From: Chris F. <chr...@st...> - 2009-02-26 15:44:58
|
Hi all, I'm having a bit of trouble with atom indexes. I'm using mouse over events to get the atom under the mouse cursor and then trying to select the same atom in Jmol. In essence it's this: int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent evalString("select atomno=" + atom + ";"); However, the selected atom is not the same as under the mouse. Here's a demo app so you can see what I mean (please excuse the messy use of reflection). You will need Jmol and the 2 PDB files in the same directory as the compiled class file to run it. Thanks in advance for any help. Cheers, Chris Foley. package JmolAtomDemo; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.lang.reflect.Method; import javax.swing.JFrame; import javax.swing.JPanel; import org.jmol.adapter.smarter.SmarterJmolAdapter; import org.jmol.viewer.Viewer; public class JmolAtomDemo extends JPanel { private static final long serialVersionUID = 1L; // Oh so messy! private static Method findNearestAtomIndex; static { Class<?> c = Viewer.class; Class<?>[] findNearestAtomIndexParams = {int.class, int.class}; try {findNearestAtomIndex = c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams); } catch (Exception e) {e.printStackTrace();} findNearestAtomIndex.setAccessible(true); } private Viewer viewer; public JmolAtomDemo(String pdb) { viewer = new Viewer(this, new SmarterJmolAdapter() ); viewer.setAppletContext("",null,null,""); viewer.openFile(pdb); viewer.evalString("selectionHalos ON;"); addMouseMotionListener(new MouseMotionAdapter() { @Override public void mouseMoved(MouseEvent e) { int atomIndex = findNearestAtomIndex(e.getPoint()); String script = "select atomno=" + atomIndex + ";"; System.out.println(script); viewer.evalString(script); } }); } // constructor private final Dimension currentSize = new Dimension(); private final Rectangle rectClip = new Rectangle(); @Override public void paint(Graphics g) { getSize(currentSize); g.getClipBounds(rectClip); viewer.renderScreenImage(g, currentSize, rectClip); } // paint public int findNearestAtomIndex(Point mousePosition) { Integer rv = -1; try { rv = (Integer)findNearestAtomIndex.invoke( viewer, mousePosition.x, mousePosition.y); } catch (Exception e) { e.printStackTrace(); } // try return rv; } // findNearestAtomIndex public static void main(String[] args) { JFrame frame1 = new JFrame("1NCP"); frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb")); frame1.setSize(300, 300); frame1.setVisible(true); JFrame frame2 = new JFrame("1CDH"); frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb")); frame2.setLocation(300, 0); frame2.setSize(300, 300); frame2.setVisible(true); } // main } |
From: Robert H. <ha...@st...> - 2009-02-26 15:51:20
|
Chris, we can't use the atomno property to uniquely identify an atom, because there may be multiple models loaded, and more than one may have, say, atomno=1. So instead we indicate an "atom index" which is a unique number relating to the entire set of models. These numbers start with 0. So all you need to do is select atomindex= instead of select atomno= On Thu, Feb 26, 2009 at 9:44 AM, Chris Foley <chr...@st... > wrote: > Hi all, > > I'm having a bit of trouble with atom indexes. I'm using mouse over > events to get the atom under the mouse cursor and then trying to select > the same atom in Jmol. In essence it's this: > > int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent > evalString("select atomno=" + atom + ";"); > > However, the selected atom is not the same as under the mouse. Here's a > demo app so you can see what I mean (please excuse the messy use of > reflection). You will need Jmol and the 2 PDB files in the same > directory as the compiled class file to run it. > > Thanks in advance for any help. > > Cheers, > Chris Foley. > > > > > > > > > package JmolAtomDemo; > > import java.awt.Dimension; > import java.awt.Graphics; > import java.awt.Point; > import java.awt.Rectangle; > import java.awt.event.MouseEvent; > import java.awt.event.MouseMotionAdapter; > import java.lang.reflect.Method; > > import javax.swing.JFrame; > import javax.swing.JPanel; > > import org.jmol.adapter.smarter.SmarterJmolAdapter; > import org.jmol.viewer.Viewer; > > public class JmolAtomDemo extends JPanel { > private static final long serialVersionUID = 1L; > > > > // Oh so messy! > private static Method findNearestAtomIndex; > static { > Class<?> c = Viewer.class; > Class<?>[] findNearestAtomIndexParams = {int.class, int.class}; > try {findNearestAtomIndex = > c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams); > } catch (Exception e) {e.printStackTrace();} > findNearestAtomIndex.setAccessible(true); > } > > > > private Viewer viewer; > > public JmolAtomDemo(String pdb) { > viewer = new Viewer(this, new SmarterJmolAdapter() ); > viewer.setAppletContext("",null,null,""); > viewer.openFile(pdb); > viewer.evalString("selectionHalos ON;"); > > addMouseMotionListener(new MouseMotionAdapter() { > @Override > public void mouseMoved(MouseEvent e) { > int atomIndex = findNearestAtomIndex(e.getPoint()); > String script = "select atomno=" + atomIndex + ";"; > System.out.println(script); > viewer.evalString(script); > } > }); > } // constructor > > private final Dimension currentSize = new Dimension(); > private final Rectangle rectClip = new Rectangle(); > > @Override > public void paint(Graphics g) { > getSize(currentSize); > g.getClipBounds(rectClip); > viewer.renderScreenImage(g, currentSize, rectClip); > } // paint > > > > > public int findNearestAtomIndex(Point mousePosition) { > Integer rv = -1; > try { > rv = (Integer)findNearestAtomIndex.invoke( > viewer, mousePosition.x, mousePosition.y); > } catch (Exception e) { > e.printStackTrace(); > } // try > return rv; > } // findNearestAtomIndex > > > > public static void main(String[] args) { > > > JFrame frame1 = new JFrame("1NCP"); > frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); > frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb")); > frame1.setSize(300, 300); > frame1.setVisible(true); > > JFrame frame2 = new JFrame("1CDH"); > frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); > frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb")); > frame2.setLocation(300, 0); > frame2.setSize(300, 300); > frame2.setVisible(true); > > > } // main > > > > > } > > > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, > CA > -OSBC tackles the biggest issue in open source: Open Sourcing the > Enterprise > -Strategies to boost innovation and cut costs with open source > participation > -Receive a $600 discount off the registration fee with the source code: > SFAD > http://p.sf.net/sfu/XcvMzF8H > _______________________________________________ > Jmol-users mailing list > Jmo...@li... > https://lists.sourceforge.net/lists/listinfo/jmol-users > -- Robert M. Hanson Professor of Chemistry St. Olaf College 1520 St. Olaf Ave. Northfield, MN 55057 http://www.stolaf.edu/people/hansonr phone: 507-786-3107 If nature does not answer first what we want, it is better to take what answer we get. -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 |
From: Chris F. <chr...@st...> - 2009-02-26 16:10:23
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> Hi Robert,<br> <br> Thanks for the reply, but unfortunately it introduces another problem.<br> <br> My application offers several views of PDB files, one of which is Jmol (others include graphs and tables). Moving the mouse over any of the views highlights all the appropriate atoms in the other views (e.g. all the atoms in an amino acid residue or just a single single atom on a small molecule). Up until now I have done this by maintaining a list of all the PDB atom serial numbers for each residue in memory.<br> <br> When I move the mouse over Jmol it currently uses findNearestAtomIndex() and looks up the corresponding residue (if any).<br> When I move the mouse over one of my other views, it correctly pulls out the residue and I "select atomno=" for all the associated PDB atom serials.<br> <br> In light of your last email, this is obviously flawed. Does Jmol provide a mechanism for converting between the serial numbers in the PDB file and its own atom indexes? Thanks again for the help.<br> <br> Chris.<br> <br> <br> <br> <br> <br> Robert Hanson wrote: <blockquote cite="mid:ba9...@ma..." type="cite">Chris, we can't use the atomno property to uniquely identify an atom, because there may be multiple models loaded, and more than one may have, say, atomno=1. So instead we indicate an "atom index" which is a unique number relating to the entire set of models. These numbers start with 0. So all you need to do is<br> <br> select atomindex=<br> <br> instead of <br> <br> select atomno=<br> <br> <br> <br> <br> <div class="gmail_quote">On Thu, Feb 26, 2009 at 9:44 AM, Chris Foley <span dir="ltr"><<a moz-do-not-send="true" href="mailto:chr...@st...">chr...@st...</a>></span> wrote:<br> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi all,<br> <br> I'm having a bit of trouble with atom indexes. I'm using mouse over<br> events to get the atom under the mouse cursor and then trying to select<br> the same atom in Jmol. In essence it's this:<br> <br> int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent<br> evalString("select atomno=" + atom + ";");<br> <br> However, the selected atom is not the same as under the mouse. Here's a<br> demo app so you can see what I mean (please excuse the messy use of<br> reflection). You will need Jmol and the 2 PDB files in the same<br> directory as the compiled class file to run it.<br> <br> Thanks in advance for any help.<br> <br> Cheers,<br> Chris Foley.<br> <br> <br> <br> <br> <br> <br> <br> <br> package JmolAtomDemo;<br> <br> import java.awt.Dimension;<br> import java.awt.Graphics;<br> import java.awt.Point;<br> import java.awt.Rectangle;<br> import java.awt.event.MouseEvent;<br> import java.awt.event.MouseMotionAdapter;<br> import java.lang.reflect.Method;<br> <br> import javax.swing.JFrame;<br> import javax.swing.JPanel;<br> <br> import org.jmol.adapter.smarter.SmarterJmolAdapter;<br> import org.jmol.viewer.Viewer;<br> <br> public class JmolAtomDemo extends JPanel {<br> private static final long serialVersionUID = 1L;<br> <br> <br> <br> // Oh so messy!<br> private static Method findNearestAtomIndex;<br> static {<br> Class<?> c = Viewer.class;<br> Class<?>[] findNearestAtomIndexParams = {int.class, int.class};<br> try {findNearestAtomIndex =<br> c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams);<br> } catch (Exception e) {e.printStackTrace();}<br> findNearestAtomIndex.setAccessible(true);<br> }<br> <br> <br> <br> private Viewer viewer;<br> <br> public JmolAtomDemo(String pdb) {<br> viewer = new Viewer(this, new SmarterJmolAdapter() );<br> viewer.setAppletContext("",null,null,"");<br> viewer.openFile(pdb);<br> viewer.evalString("selectionHalos ON;");<br> <br> addMouseMotionListener(new MouseMotionAdapter() {<br> @Override<br> public void mouseMoved(MouseEvent e) {<br> int atomIndex = findNearestAtomIndex(e.getPoint());<br> String script = "select atomno=" + atomIndex + ";";<br> System.out.println(script);<br> viewer.evalString(script);<br> }<br> });<br> } // constructor<br> <br> private final Dimension currentSize = new Dimension();<br> private final Rectangle rectClip = new Rectangle();<br> <br> @Override<br> public void paint(Graphics g) {<br> getSize(currentSize);<br> g.getClipBounds(rectClip);<br> viewer.renderScreenImage(g, currentSize, rectClip);<br> } // paint<br> <br> <br> <br> <br> public int findNearestAtomIndex(Point mousePosition) {<br> Integer rv = -1;<br> try {<br> rv = (Integer)findNearestAtomIndex.invoke(<br> viewer, mousePosition.x, mousePosition.y);<br> } catch (Exception e) {<br> e.printStackTrace();<br> } // try<br> return rv;<br> } // findNearestAtomIndex<br> <br> <br> <br> public static void main(String[] args) {<br> <br> <br> JFrame frame1 = new JFrame("1NCP");<br> frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb"));<br> frame1.setSize(300, 300);<br> frame1.setVisible(true);<br> <br> JFrame frame2 = new JFrame("1CDH");<br> frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb"));<br> frame2.setLocation(300, 0);<br> frame2.setSize(300, 300);<br> frame2.setVisible(true);<br> <br> <br> } // main<br> <br> <br> <br> <br> }<br> <br> <br> ------------------------------------------------------------------------------<br> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA<br> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise<br> -Strategies to boost innovation and cut costs with open source participation<br> -Receive a $600 discount off the registration fee with the source code: SFAD<br> <a moz-do-not-send="true" href="http://p.sf.net/sfu/XcvMzF8H" target="_blank">http://p.sf.net/sfu/XcvMzF8H</a><br> _______________________________________________<br> Jmol-users mailing list<br> <a moz-do-not-send="true" href="mailto:Jmo...@li...">Jmo...@li...</a><br> <a moz-do-not-send="true" href="https://lists.sourceforge.net/lists/listinfo/jmol-users" target="_blank">https://lists.sourceforge.net/lists/listinfo/jmol-users</a><br> </blockquote> </div> <br> <br clear="all"> <br> -- <br> Robert M. Hanson<br> Professor of Chemistry<br> St. Olaf College<br> 1520 St. Olaf Ave.<br> Northfield, MN 55057<br> <a moz-do-not-send="true" href="http://www.stolaf.edu/people/hansonr">http://www.stolaf.edu/people/hansonr</a><br> phone: 507-786-3107<br> <br> <br> If nature does not answer first what we want,<br> it is better to take what answer we get. <br> <br> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900<br> </blockquote> </body> </html> |
From: Robert H. <ha...@st...> - 2009-02-26 16:20:02
|
On Thu, Feb 26, 2009 at 10:09 AM, Chris Foley < chr...@st...> wrote: > Hi Robert, > > Thanks for the reply, but unfortunately it introduces another problem. > > My application offers several views of PDB files, one of which is Jmol > (others include graphs and tables). Moving the mouse over any of the views > highlights all the appropriate atoms in the other views (e.g. all the atoms > in an amino acid residue or just a single single atom on a small molecule). > Up until now I have done this by maintaining a list of all the PDB atom > serial numbers for each residue in memory. > very nice. Could be a problem with multi-model PDB files, but.... > > > When I move the mouse over Jmol it currently uses findNearestAtomIndex() > and looks up the corresponding residue (if any). > good. > > When I move the mouse over one of my other views, it correctly pulls out > the residue and I "select atomno=" for all the associated PDB atom serials. > ok. > > > In light of your last email, this is obviously flawed. Does Jmol provide a > mechanism for converting between the serial numbers in the PDB file and its > own atom indexes? Thanks again for the help. > Once you have the atom Object, you can do anything with it. Most of the methods there are public. To get a pointer to the atom set -- KEEP THIS LOCAL!! -- Atom[] atoms = viewer.getModelSet().atoms And once you have that, you can, for instance, just check: int atomNo = atoms[atomIndex].getAtomNumber(); > > > Chris. > > > > > > > Robert Hanson wrote: > > Chris, we can't use the atomno property to uniquely identify an atom, > because there may be multiple models loaded, and more than one may have, > say, atomno=1. So instead we indicate an "atom index" which is a unique > number relating to the entire set of models. These numbers start with 0. So > all you need to do is > > select atomindex= > > instead of > > select atomno= > > > > > On Thu, Feb 26, 2009 at 9:44 AM, Chris Foley < > chr...@st...> wrote: > >> Hi all, >> >> I'm having a bit of trouble with atom indexes. I'm using mouse over >> events to get the atom under the mouse cursor and then trying to select >> the same atom in Jmol. In essence it's this: >> >> int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent >> evalString("select atomno=" + atom + ";"); >> >> However, the selected atom is not the same as under the mouse. Here's a >> demo app so you can see what I mean (please excuse the messy use of >> reflection). You will need Jmol and the 2 PDB files in the same >> directory as the compiled class file to run it. >> >> Thanks in advance for any help. >> >> Cheers, >> Chris Foley. >> >> >> >> >> >> >> >> >> package JmolAtomDemo; >> >> import java.awt.Dimension; >> import java.awt.Graphics; >> import java.awt.Point; >> import java.awt.Rectangle; >> import java.awt.event.MouseEvent; >> import java.awt.event.MouseMotionAdapter; >> import java.lang.reflect.Method; >> >> import javax.swing.JFrame; >> import javax.swing.JPanel; >> >> import org.jmol.adapter.smarter.SmarterJmolAdapter; >> import org.jmol.viewer.Viewer; >> >> public class JmolAtomDemo extends JPanel { >> private static final long serialVersionUID = 1L; >> >> >> >> // Oh so messy! >> private static Method findNearestAtomIndex; >> static { >> Class<?> c = Viewer.class; >> Class<?>[] findNearestAtomIndexParams = {int.class, int.class}; >> try {findNearestAtomIndex = >> c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams); >> } catch (Exception e) {e.printStackTrace();} >> findNearestAtomIndex.setAccessible(true); >> } >> >> >> >> private Viewer viewer; >> >> public JmolAtomDemo(String pdb) { >> viewer = new Viewer(this, new SmarterJmolAdapter() ); >> viewer.setAppletContext("",null,null,""); >> viewer.openFile(pdb); >> viewer.evalString("selectionHalos ON;"); >> >> addMouseMotionListener(new MouseMotionAdapter() { >> @Override >> public void mouseMoved(MouseEvent e) { >> int atomIndex = findNearestAtomIndex(e.getPoint()); >> String script = "select atomno=" + atomIndex + ";"; >> System.out.println(script); >> viewer.evalString(script); >> } >> }); >> } // constructor >> >> private final Dimension currentSize = new Dimension(); >> private final Rectangle rectClip = new Rectangle(); >> >> @Override >> public void paint(Graphics g) { >> getSize(currentSize); >> g.getClipBounds(rectClip); >> viewer.renderScreenImage(g, currentSize, rectClip); >> } // paint >> >> >> >> >> public int findNearestAtomIndex(Point mousePosition) { >> Integer rv = -1; >> try { >> rv = (Integer)findNearestAtomIndex.invoke( >> viewer, mousePosition.x, mousePosition.y); >> } catch (Exception e) { >> e.printStackTrace(); >> } // try >> return rv; >> } // findNearestAtomIndex >> >> >> >> public static void main(String[] args) { >> >> >> JFrame frame1 = new JFrame("1NCP"); >> frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); >> frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb")); >> frame1.setSize(300, 300); >> frame1.setVisible(true); >> >> JFrame frame2 = new JFrame("1CDH"); >> frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); >> frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb")); >> frame2.setLocation(300, 0); >> frame2.setSize(300, 300); >> frame2.setVisible(true); >> >> >> } // main >> >> >> >> >> } >> >> >> >> ------------------------------------------------------------------------------ >> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, >> CA >> -OSBC tackles the biggest issue in open source: Open Sourcing the >> Enterprise >> -Strategies to boost innovation and cut costs with open source >> participation >> -Receive a $600 discount off the registration fee with the source code: >> SFAD >> http://p.sf.net/sfu/XcvMzF8H >> _______________________________________________ >> Jmol-users mailing list >> Jmo...@li... >> https://lists.sourceforge.net/lists/listinfo/jmol-users >> > > > > -- > Robert M. Hanson > Professor of Chemistry > St. Olaf College > 1520 St. Olaf Ave. > Northfield, MN 55057 > http://www.stolaf.edu/people/hansonr > phone: 507-786-3107 > > > If nature does not answer first what we want, > it is better to take what answer we get. > > -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 > > > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, > CA > -OSBC tackles the biggest issue in open source: Open Sourcing the > Enterprise > -Strategies to boost innovation and cut costs with open source > participation > -Receive a $600 discount off the registration fee with the source code: > SFAD > http://p.sf.net/sfu/XcvMzF8H > _______________________________________________ > Jmol-users mailing list > Jmo...@li... > https://lists.sourceforge.net/lists/listinfo/jmol-users > > -- Robert M. Hanson Professor of Chemistry St. Olaf College 1520 St. Olaf Ave. Northfield, MN 55057 http://www.stolaf.edu/people/hansonr phone: 507-786-3107 If nature does not answer first what we want, it is better to take what answer we get. -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 |
From: Chris F. <chr...@st...> - 2009-02-27 13:10:01
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> <title></title> </head> <body bgcolor="#ffffff" text="#000000"> Thanks again for your help. It appears that<br> <br> int pdbSerialNumber = viewer.getModelSet().atoms[jmolAtomIndex].getAtomNumber();<br> goes from atom index to PDB serial and<br> <br> int jmolIndex = viewer.getModelSet().getAtomIndexFromAtomNumber(pdbSerialNumber);<br> goes the other way around.<br> <br> I also don't need all that messy reflection from my example because ModelSet has a findNearestAtomIndex() method that is publicly accessible. I'll have a poke around ModelSet and see what else is there. I hadn't found it previously so thanks for pointing me in that direction!<br> <br> Cheers,<br> Chris.<br> <br> <br> <br> <br> <br> Robert Hanson wrote: <blockquote cite="mid:ba9...@ma..." type="cite"> <div class="gmail_quote">On Thu, Feb 26, 2009 at 10:09 AM, Chris Foley <span dir="ltr"><<a moz-do-not-send="true" href="mailto:chr...@st...">chr...@st...</a>></span> wrote:<br> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000">Hi Robert,<br> <br> Thanks for the reply, but unfortunately it introduces another problem.<br> <br> My application offers several views of PDB files, one of which is Jmol (others include graphs and tables). Moving the mouse over any of the views highlights all the appropriate atoms in the other views (e.g. all the atoms in an amino acid residue or just a single single atom on a small molecule). Up until now I have done this by maintaining a list of all the PDB atom serial numbers for each residue in memory.</div> </blockquote> <div><br> very nice. Could be a problem with multi-model PDB files, but....<br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> <br> When I move the mouse over Jmol it currently uses findNearestAtomIndex() and looks up the corresponding residue (if any).</div> </blockquote> <div><br> good. <br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> When I move the mouse over one of my other views, it correctly pulls out the residue and I "select atomno=" for all the associated PDB atom serials.</div> </blockquote> <div><br> ok.<br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> <br> In light of your last email, this is obviously flawed. Does Jmol provide a mechanism for converting between the serial numbers in the PDB file and its own atom indexes? Thanks again for the help.</div> </blockquote> <div><br> Once you have the atom Object, you can do anything with it. Most of the methods there are public. To get a pointer to the atom set -- KEEP THIS LOCAL!! -- <br> <br> Atom[] atoms = viewer.getModelSet().atoms<br> <br> And once you have that, you can, for instance, just check:<br> <br> int atomNo = atoms[atomIndex].getAtomNumber();<br> <br> <br> <br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> <font color="#888888"><br> Chris.</font> <div> <div class="Wj3C7c"><br> <br> <br> <br> <br> <br> Robert Hanson wrote: <blockquote type="cite">Chris, we can't use the atomno property to uniquely identify an atom, because there may be multiple models loaded, and more than one may have, say, atomno=1. So instead we indicate an "atom index" which is a unique number relating to the entire set of models. These numbers start with 0. So all you need to do is<br> <br> select atomindex=<br> <br> instead of <br> <br> select atomno=<br> <br> <br> <br> <br> <div class="gmail_quote">On Thu, Feb 26, 2009 at 9:44 AM, Chris Foley <span dir="ltr"><<a moz-do-not-send="true" href="mailto:chr...@st..." target="_blank">chr...@st...</a>></span> wrote:<br> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi all,<br> <br> I'm having a bit of trouble with atom indexes. I'm using mouse over<br> events to get the atom under the mouse cursor and then trying to select<br> the same atom in Jmol. In essence it's this:<br> <br> int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent<br> evalString("select atomno=" + atom + ";");<br> <br> However, the selected atom is not the same as under the mouse. Here's a<br> demo app so you can see what I mean (please excuse the messy use of<br> reflection). You will need Jmol and the 2 PDB files in the same<br> directory as the compiled class file to run it.<br> <br> Thanks in advance for any help.<br> <br> Cheers,<br> Chris Foley.<br> <br> <br> <br> <br> <br> <br> <br> <br> package JmolAtomDemo;<br> <br> import java.awt.Dimension;<br> import java.awt.Graphics;<br> import java.awt.Point;<br> import java.awt.Rectangle;<br> import java.awt.event.MouseEvent;<br> import java.awt.event.MouseMotionAdapter;<br> import java.lang.reflect.Method;<br> <br> import javax.swing.JFrame;<br> import javax.swing.JPanel;<br> <br> import org.jmol.adapter.smarter.SmarterJmolAdapter;<br> import org.jmol.viewer.Viewer;<br> <br> public class JmolAtomDemo extends JPanel {<br> private static final long serialVersionUID = 1L;<br> <br> <br> <br> // Oh so messy!<br> private static Method findNearestAtomIndex;<br> static {<br> Class<?> c = Viewer.class;<br> Class<?>[] findNearestAtomIndexParams = {int.class, int.class};<br> try {findNearestAtomIndex =<br> c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams);<br> } catch (Exception e) {e.printStackTrace();}<br> findNearestAtomIndex.setAccessible(true);<br> }<br> <br> <br> <br> private Viewer viewer;<br> <br> public JmolAtomDemo(String pdb) {<br> viewer = new Viewer(this, new SmarterJmolAdapter() );<br> viewer.setAppletContext("",null,null,"");<br> viewer.openFile(pdb);<br> viewer.evalString("selectionHalos ON;");<br> <br> addMouseMotionListener(new MouseMotionAdapter() {<br> @Override<br> public void mouseMoved(MouseEvent e) {<br> int atomIndex = findNearestAtomIndex(e.getPoint());<br> String script = "select atomno=" + atomIndex + ";";<br> System.out.println(script);<br> viewer.evalString(script);<br> }<br> });<br> } // constructor<br> <br> private final Dimension currentSize = new Dimension();<br> private final Rectangle rectClip = new Rectangle();<br> <br> @Override<br> public void paint(Graphics g) {<br> getSize(currentSize);<br> g.getClipBounds(rectClip);<br> viewer.renderScreenImage(g, currentSize, rectClip);<br> } // paint<br> <br> <br> <br> <br> public int findNearestAtomIndex(Point mousePosition) {<br> Integer rv = -1;<br> try {<br> rv = (Integer)findNearestAtomIndex.invoke(<br> viewer, mousePosition.x, mousePosition.y);<br> } catch (Exception e) {<br> e.printStackTrace();<br> } // try<br> return rv;<br> } // findNearestAtomIndex<br> <br> <br> <br> public static void main(String[] args) {<br> <br> <br> JFrame frame1 = new JFrame("1NCP");<br> frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb"));<br> frame1.setSize(300, 300);<br> frame1.setVisible(true);<br> <br> JFrame frame2 = new JFrame("1CDH");<br> frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb"));<br> frame2.setLocation(300, 0);<br> frame2.setSize(300, 300);<br> frame2.setVisible(true);<br> <br> <br> } // main<br> <br> <br> <br> <br> }<br> <br> <br> ------------------------------------------------------------------------------<br> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA<br> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise<br> -Strategies to boost innovation and cut costs with open source participation<br> -Receive a $600 discount off the registration fee with the source code: SFAD<br> <a moz-do-not-send="true" href="http://p.sf.net/sfu/XcvMzF8H" target="_blank">http://p.sf.net/sfu/XcvMzF8H</a><br> _______________________________________________<br> Jmol-users mailing list<br> <a moz-do-not-send="true" href="mailto:Jmo...@li..." target="_blank">Jmo...@li...</a><br> <a moz-do-not-send="true" href="https://lists.sourceforge.net/lists/listinfo/jmol-users" target="_blank">https://lists.sourceforge.net/lists/listinfo/jmol-users</a><br> </blockquote> </div> <br> <br clear="all"> <br> -- <br> Robert M. Hanson<br> Professor of Chemistry<br> St. Olaf College<br> 1520 St. Olaf Ave.<br> Northfield, MN 55057<br> <a moz-do-not-send="true" href="http://www.stolaf.edu/people/hansonr" target="_blank">http://www.stolaf.edu/people/hansonr</a><br> phone: 507-786-3107<br> <br> <br> If nature does not answer first what we want,<br> it is better to take what answer we get. <br> <br> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900<br> </blockquote> </div> </div> </div> <br> ------------------------------------------------------------------------------<br> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA<br> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise<br> -Strategies to boost innovation and cut costs with open source participation<br> -Receive a $600 discount off the registration fee with the source code: SFAD<br> <a moz-do-not-send="true" href="http://p.sf.net/sfu/XcvMzF8H" target="_blank">http://p.sf.net/sfu/XcvMzF8H</a><br> _______________________________________________<br> Jmol-users mailing list<br> <a moz-do-not-send="true" href="mailto:Jmo...@li...">Jmo...@li...</a><br> <a moz-do-not-send="true" href="https://lists.sourceforge.net/lists/listinfo/jmol-users" target="_blank">https://lists.sourceforge.net/lists/listinfo/jmol-users</a><br> <br> </blockquote> </div> <br> <br clear="all"> <br> -- <br> Robert M. Hanson<br> Professor of Chemistry<br> St. Olaf College<br> 1520 St. Olaf Ave.<br> Northfield, MN 55057<br> <a moz-do-not-send="true" href="http://www.stolaf.edu/people/hansonr">http://www.stolaf.edu/people/hansonr</a><br> phone: 507-786-3107<br> <br> <br> If nature does not answer first what we want,<br> it is better to take what answer we get. <br> <br> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900<br> </blockquote> </body> </html> |
From: Robert H. <ha...@st...> - 2009-02-27 13:54:50
|
Yes, ok. Be aware that I just modified ModelSet.getAtomIndexFromAtomNumber(pdbSerialNumber). You should use instead Viewer.getAtomIndexFromAtomNumber. In general, use methods that are not in JmolViewer completely at your own risk. Those are subject to change at any time. Only methods in JmolViewer are "public" in the sense that we try very hard not to change those interface methods if at all possible. All other public methods could change name, signature, return type, anything. For example, you should use JmolViewer.getAtomNumber(jmolAtomIndex) instead of viewer.getModelSet().atoms[jmolAtomIndex].getAtomNumber(); I forgot to mention that.... Bob On Fri, Feb 27, 2009 at 7:09 AM, Chris Foley <chr...@st... > wrote: > Thanks again for your help. It appears that > > int pdbSerialNumber = > viewer.getModelSet().atoms[jmolAtomIndex].getAtomNumber(); > goes from atom index to PDB serial and > > int jmolIndex = > viewer.getModelSet().getAtomIndexFromAtomNumber(pdbSerialNumber); > goes the other way around. > > I also don't need all that messy reflection from my example because > ModelSet has a findNearestAtomIndex() method that is publicly accessible. > I'll have a poke around ModelSet and see what else is there. I hadn't found > it previously so thanks for pointing me in that direction! > > Cheers, > Chris. > > > > > > > Robert Hanson wrote: > > On Thu, Feb 26, 2009 at 10:09 AM, Chris Foley < > chr...@st...> wrote: > >> Hi Robert, >> >> Thanks for the reply, but unfortunately it introduces another problem. >> >> My application offers several views of PDB files, one of which is Jmol >> (others include graphs and tables). Moving the mouse over any of the views >> highlights all the appropriate atoms in the other views (e.g. all the atoms >> in an amino acid residue or just a single single atom on a small molecule). >> Up until now I have done this by maintaining a list of all the PDB atom >> serial numbers for each residue in memory. >> > > very nice. Could be a problem with multi-model PDB files, but.... > > >> >> >> When I move the mouse over Jmol it currently uses findNearestAtomIndex() >> and looks up the corresponding residue (if any). >> > > good. > > >> >> When I move the mouse over one of my other views, it correctly pulls out >> the residue and I "select atomno=" for all the associated PDB atom serials. >> > > ok. > > >> >> >> In light of your last email, this is obviously flawed. Does Jmol provide a >> mechanism for converting between the serial numbers in the PDB file and its >> own atom indexes? Thanks again for the help. >> > > Once you have the atom Object, you can do anything with it. Most of the > methods there are public. To get a pointer to the atom set -- KEEP THIS > LOCAL!! -- > > Atom[] atoms = viewer.getModelSet().atoms > > And once you have that, you can, for instance, just check: > > int atomNo = atoms[atomIndex].getAtomNumber(); > > > > > >> >> >> Chris. >> >> >> >> >> >> Robert Hanson wrote: >> >> Chris, we can't use the atomno property to uniquely identify an atom, >> because there may be multiple models loaded, and more than one may have, >> say, atomno=1. So instead we indicate an "atom index" which is a unique >> number relating to the entire set of models. These numbers start with 0. So >> all you need to do is >> >> select atomindex= >> >> instead of >> >> select atomno= >> >> >> >> >> On Thu, Feb 26, 2009 at 9:44 AM, Chris Foley < >> chr...@st...> wrote: >> >>> Hi all, >>> >>> I'm having a bit of trouble with atom indexes. I'm using mouse over >>> events to get the atom under the mouse cursor and then trying to select >>> the same atom in Jmol. In essence it's this: >>> >>> int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent >>> evalString("select atomno=" + atom + ";"); >>> >>> However, the selected atom is not the same as under the mouse. Here's a >>> demo app so you can see what I mean (please excuse the messy use of >>> reflection). You will need Jmol and the 2 PDB files in the same >>> directory as the compiled class file to run it. >>> >>> Thanks in advance for any help. >>> >>> Cheers, >>> Chris Foley. >>> >>> >>> >>> >>> >>> >>> >>> >>> package JmolAtomDemo; >>> >>> import java.awt.Dimension; >>> import java.awt.Graphics; >>> import java.awt.Point; >>> import java.awt.Rectangle; >>> import java.awt.event.MouseEvent; >>> import java.awt.event.MouseMotionAdapter; >>> import java.lang.reflect.Method; >>> >>> import javax.swing.JFrame; >>> import javax.swing.JPanel; >>> >>> import org.jmol.adapter.smarter.SmarterJmolAdapter; >>> import org.jmol.viewer.Viewer; >>> >>> public class JmolAtomDemo extends JPanel { >>> private static final long serialVersionUID = 1L; >>> >>> >>> >>> // Oh so messy! >>> private static Method findNearestAtomIndex; >>> static { >>> Class<?> c = Viewer.class; >>> Class<?>[] findNearestAtomIndexParams = {int.class, int.class}; >>> try {findNearestAtomIndex = >>> c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams); >>> } catch (Exception e) {e.printStackTrace();} >>> findNearestAtomIndex.setAccessible(true); >>> } >>> >>> >>> >>> private Viewer viewer; >>> >>> public JmolAtomDemo(String pdb) { >>> viewer = new Viewer(this, new SmarterJmolAdapter() ); >>> viewer.setAppletContext("",null,null,""); >>> viewer.openFile(pdb); >>> viewer.evalString("selectionHalos ON;"); >>> >>> addMouseMotionListener(new MouseMotionAdapter() { >>> @Override >>> public void mouseMoved(MouseEvent e) { >>> int atomIndex = findNearestAtomIndex(e.getPoint()); >>> String script = "select atomno=" + atomIndex + ";"; >>> System.out.println(script); >>> viewer.evalString(script); >>> } >>> }); >>> } // constructor >>> >>> private final Dimension currentSize = new Dimension(); >>> private final Rectangle rectClip = new Rectangle(); >>> >>> @Override >>> public void paint(Graphics g) { >>> getSize(currentSize); >>> g.getClipBounds(rectClip); >>> viewer.renderScreenImage(g, currentSize, rectClip); >>> } // paint >>> >>> >>> >>> >>> public int findNearestAtomIndex(Point mousePosition) { >>> Integer rv = -1; >>> try { >>> rv = (Integer)findNearestAtomIndex.invoke( >>> viewer, mousePosition.x, mousePosition.y); >>> } catch (Exception e) { >>> e.printStackTrace(); >>> } // try >>> return rv; >>> } // findNearestAtomIndex >>> >>> >>> >>> public static void main(String[] args) { >>> >>> >>> JFrame frame1 = new JFrame("1NCP"); >>> frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); >>> frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb")); >>> frame1.setSize(300, 300); >>> frame1.setVisible(true); >>> >>> JFrame frame2 = new JFrame("1CDH"); >>> frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); >>> frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb")); >>> frame2.setLocation(300, 0); >>> frame2.setSize(300, 300); >>> frame2.setVisible(true); >>> >>> >>> } // main >>> >>> >>> >>> >>> } >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, >>> CA >>> -OSBC tackles the biggest issue in open source: Open Sourcing the >>> Enterprise >>> -Strategies to boost innovation and cut costs with open source >>> participation >>> -Receive a $600 discount off the registration fee with the source code: >>> SFAD >>> http://p.sf.net/sfu/XcvMzF8H >>> _______________________________________________ >>> Jmol-users mailing list >>> Jmo...@li... >>> https://lists.sourceforge.net/lists/listinfo/jmol-users >>> >> >> >> >> -- >> Robert M. Hanson >> Professor of Chemistry >> St. Olaf College >> 1520 St. Olaf Ave. >> Northfield, MN 55057 >> http://www.stolaf.edu/people/hansonr >> phone: 507-786-3107 >> >> >> If nature does not answer first what we want, >> it is better to take what answer we get. >> >> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 >> >> >> >> ------------------------------------------------------------------------------ >> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, >> CA >> -OSBC tackles the biggest issue in open source: Open Sourcing the >> Enterprise >> -Strategies to boost innovation and cut costs with open source >> participation >> -Receive a $600 discount off the registration fee with the source code: >> SFAD >> http://p.sf.net/sfu/XcvMzF8H >> _______________________________________________ >> Jmol-users mailing list >> Jmo...@li... >> https://lists.sourceforge.net/lists/listinfo/jmol-users >> >> > > > -- > Robert M. Hanson > Professor of Chemistry > St. Olaf College > 1520 St. Olaf Ave. > Northfield, MN 55057 > http://www.stolaf.edu/people/hansonr > phone: 507-786-3107 > > > If nature does not answer first what we want, > it is better to take what answer we get. > > -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 > > > > ------------------------------------------------------------------------------ > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, > CA > -OSBC tackles the biggest issue in open source: Open Sourcing the > Enterprise > -Strategies to boost innovation and cut costs with open source > participation > -Receive a $600 discount off the registration fee with the source code: > SFAD > http://p.sf.net/sfu/XcvMzF8H > _______________________________________________ > Jmol-users mailing list > Jmo...@li... > https://lists.sourceforge.net/lists/listinfo/jmol-users > > -- Robert M. Hanson Professor of Chemistry St. Olaf College 1520 St. Olaf Ave. Northfield, MN 55057 http://www.stolaf.edu/people/hansonr phone: 507-786-3107 If nature does not answer first what we want, it is better to take what answer we get. -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900 |
From: Chris F. <chr...@st...> - 2009-03-03 12:33:04
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> </head> <body bgcolor="#ffffff" text="#000000"> Thanks! That's good to know. I've updated my code.<br> <br> Cheers,<br> Chris.<br> <br> <br> <br> <br> Robert Hanson wrote: <blockquote cite="mid:ba9...@ma..." type="cite">Yes, ok. Be aware that I just modified ModelSet.getAtomIndexFromAtomNumber( <div bgcolor="#ffffff" text="#000000">pdbSerialNumber). <br> <br> You should use instead Viewer.getAtomIndexFromAtomNumber. <br> <br> In general, use methods that are not in JmolViewer completely at your own risk. Those are subject to change at any time. Only methods in JmolViewer are "public" in the sense that we try very hard not to change those interface methods if at all possible. All other public methods could change name, signature, return type, anything.<br> <br> <br> For example, you should use JmolViewer.getAtomNumber(jmolAtomIndex) instead of viewer.getModelSet().atoms[jmolAtomIndex].getAtomNumber();<br> <br> I forgot to mention that....<br> <br> Bob<br> <br> </div> <br> <br> <div class="gmail_quote">On Fri, Feb 27, 2009 at 7:09 AM, Chris Foley <span dir="ltr"><<a moz-do-not-send="true" href="mailto:chr...@st...">chr...@st...</a>></span> wrote:<br> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000">Thanks again for your help. It appears that<br> <br> int pdbSerialNumber = viewer.getModelSet().atoms[jmolAtomIndex].getAtomNumber();<br> goes from atom index to PDB serial and<br> <br> int jmolIndex = viewer.getModelSet().getAtomIndexFromAtomNumber(pdbSerialNumber);<br> goes the other way around.<br> <br> I also don't need all that messy reflection from my example because ModelSet has a findNearestAtomIndex() method that is publicly accessible. I'll have a poke around ModelSet and see what else is there. I hadn't found it previously so thanks for pointing me in that direction!<br> <br> Cheers,<br> <font color="#888888">Chris.</font> <div> <div class="Wj3C7c"><br> <br> <br> <br> <br> <br> Robert Hanson wrote: <blockquote type="cite"> <div class="gmail_quote">On Thu, Feb 26, 2009 at 10:09 AM, Chris Foley <span dir="ltr"><<a moz-do-not-send="true" href="mailto:chr...@st..." target="_blank">chr...@st...</a>></span> wrote:<br> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000">Hi Robert,<br> <br> Thanks for the reply, but unfortunately it introduces another problem.<br> <br> My application offers several views of PDB files, one of which is Jmol (others include graphs and tables). Moving the mouse over any of the views highlights all the appropriate atoms in the other views (e.g. all the atoms in an amino acid residue or just a single single atom on a small molecule). Up until now I have done this by maintaining a list of all the PDB atom serial numbers for each residue in memory.</div> </blockquote> <div><br> very nice. Could be a problem with multi-model PDB files, but....<br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> <br> When I move the mouse over Jmol it currently uses findNearestAtomIndex() and looks up the corresponding residue (if any).</div> </blockquote> <div><br> good. <br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> When I move the mouse over one of my other views, it correctly pulls out the residue and I "select atomno=" for all the associated PDB atom serials.</div> </blockquote> <div><br> ok.<br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> <br> In light of your last email, this is obviously flawed. Does Jmol provide a mechanism for converting between the serial numbers in the PDB file and its own atom indexes? Thanks again for the help.</div> </blockquote> <div><br> Once you have the atom Object, you can do anything with it. Most of the methods there are public. To get a pointer to the atom set -- KEEP THIS LOCAL!! -- <br> <br> Atom[] atoms = viewer.getModelSet().atoms<br> <br> And once you have that, you can, for instance, just check:<br> <br> int atomNo = atoms[atomIndex].getAtomNumber();<br> <br> <br> <br> <br> </div> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"> <div bgcolor="#ffffff" text="#000000"><br> <font color="#888888"><br> Chris.</font> <div> <div><br> <br> <br> <br> <br> <br> Robert Hanson wrote: <blockquote type="cite">Chris, we can't use the atomno property to uniquely identify an atom, because there may be multiple models loaded, and more than one may have, say, atomno=1. So instead we indicate an "atom index" which is a unique number relating to the entire set of models. These numbers start with 0. So all you need to do is<br> <br> select atomindex=<br> <br> instead of <br> <br> select atomno=<br> <br> <br> <br> <br> <div class="gmail_quote">On Thu, Feb 26, 2009 at 9:44 AM, Chris Foley <span dir="ltr"><<a moz-do-not-send="true" href="mailto:chr...@st..." target="_blank">chr...@st...</a>></span> wrote:<br> <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi all,<br> <br> I'm having a bit of trouble with atom indexes. I'm using mouse over<br> events to get the atom under the mouse cursor and then trying to select<br> the same atom in Jmol. In essence it's this:<br> <br> int atom = findNearestAtomIndex(e.getPoint()); // e is of type MouseEvent<br> evalString("select atomno=" + atom + ";");<br> <br> However, the selected atom is not the same as under the mouse. Here's a<br> demo app so you can see what I mean (please excuse the messy use of<br> reflection). You will need Jmol and the 2 PDB files in the same<br> directory as the compiled class file to run it.<br> <br> Thanks in advance for any help.<br> <br> Cheers,<br> Chris Foley.<br> <br> <br> <br> <br> <br> <br> <br> <br> package JmolAtomDemo;<br> <br> import java.awt.Dimension;<br> import java.awt.Graphics;<br> import java.awt.Point;<br> import java.awt.Rectangle;<br> import java.awt.event.MouseEvent;<br> import java.awt.event.MouseMotionAdapter;<br> import java.lang.reflect.Method;<br> <br> import javax.swing.JFrame;<br> import javax.swing.JPanel;<br> <br> import org.jmol.adapter.smarter.SmarterJmolAdapter;<br> import org.jmol.viewer.Viewer;<br> <br> public class JmolAtomDemo extends JPanel {<br> private static final long serialVersionUID = 1L;<br> <br> <br> <br> // Oh so messy!<br> private static Method findNearestAtomIndex;<br> static {<br> Class<?> c = Viewer.class;<br> Class<?>[] findNearestAtomIndexParams = {int.class, int.class};<br> try {findNearestAtomIndex =<br> c.getDeclaredMethod("findNearestAtomIndex", findNearestAtomIndexParams);<br> } catch (Exception e) {e.printStackTrace();}<br> findNearestAtomIndex.setAccessible(true);<br> }<br> <br> <br> <br> private Viewer viewer;<br> <br> public JmolAtomDemo(String pdb) {<br> viewer = new Viewer(this, new SmarterJmolAdapter() );<br> viewer.setAppletContext("",null,null,"");<br> viewer.openFile(pdb);<br> viewer.evalString("selectionHalos ON;");<br> <br> addMouseMotionListener(new MouseMotionAdapter() {<br> @Override<br> public void mouseMoved(MouseEvent e) {<br> int atomIndex = findNearestAtomIndex(e.getPoint());<br> String script = "select atomno=" + atomIndex + ";";<br> System.out.println(script);<br> viewer.evalString(script);<br> }<br> });<br> } // constructor<br> <br> private final Dimension currentSize = new Dimension();<br> private final Rectangle rectClip = new Rectangle();<br> <br> @Override<br> public void paint(Graphics g) {<br> getSize(currentSize);<br> g.getClipBounds(rectClip);<br> viewer.renderScreenImage(g, currentSize, rectClip);<br> } // paint<br> <br> <br> <br> <br> public int findNearestAtomIndex(Point mousePosition) {<br> Integer rv = -1;<br> try {<br> rv = (Integer)findNearestAtomIndex.invoke(<br> viewer, mousePosition.x, mousePosition.y);<br> } catch (Exception e) {<br> e.printStackTrace();<br> } // try<br> return rv;<br> } // findNearestAtomIndex<br> <br> <br> <br> public static void main(String[] args) {<br> <br> <br> JFrame frame1 = new JFrame("1NCP");<br> frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> frame1.getContentPane().add(new JmolAtomDemo("1NCP.pdb"));<br> frame1.setSize(300, 300);<br> frame1.setVisible(true);<br> <br> JFrame frame2 = new JFrame("1CDH");<br> frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br> frame2.getContentPane().add(new JmolAtomDemo("1cdh.pdb"));<br> frame2.setLocation(300, 0);<br> frame2.setSize(300, 300);<br> frame2.setVisible(true);<br> <br> <br> } // main<br> <br> <br> <br> <br> }<br> <br> <br> ------------------------------------------------------------------------------<br> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA<br> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise<br> -Strategies to boost innovation and cut costs with open source participation<br> -Receive a $600 discount off the registration fee with the source code: SFAD<br> <a moz-do-not-send="true" href="http://p.sf.net/sfu/XcvMzF8H" target="_blank">http://p.sf.net/sfu/XcvMzF8H</a><br> _______________________________________________<br> Jmol-users mailing list<br> <a moz-do-not-send="true" href="mailto:Jmo...@li..." target="_blank">Jmo...@li...</a><br> <a moz-do-not-send="true" href="https://lists.sourceforge.net/lists/listinfo/jmol-users" target="_blank">https://lists.sourceforge.net/lists/listinfo/jmol-users</a><br> </blockquote> </div> <br> <br clear="all"> <br> -- <br> Robert M. Hanson<br> Professor of Chemistry<br> St. Olaf College<br> 1520 St. Olaf Ave.<br> Northfield, MN 55057<br> <a moz-do-not-send="true" href="http://www.stolaf.edu/people/hansonr" target="_blank">http://www.stolaf.edu/people/hansonr</a><br> phone: 507-786-3107<br> <br> <br> If nature does not answer first what we want,<br> it is better to take what answer we get. <br> <br> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900<br> </blockquote> </div> </div> </div> <br> ------------------------------------------------------------------------------<br> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA<br> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise<br> -Strategies to boost innovation and cut costs with open source participation<br> -Receive a $600 discount off the registration fee with the source code: SFAD<br> <a moz-do-not-send="true" href="http://p.sf.net/sfu/XcvMzF8H" target="_blank">http://p.sf.net/sfu/XcvMzF8H</a><br> _______________________________________________<br> Jmol-users mailing list<br> <a moz-do-not-send="true" href="mailto:Jmo...@li..." target="_blank">Jmo...@li...</a><br> <a moz-do-not-send="true" href="https://lists.sourceforge.net/lists/listinfo/jmol-users" target="_blank">https://lists.sourceforge.net/lists/listinfo/jmol-users</a><br> <br> </blockquote> </div> <br> <br clear="all"> <br> -- <br> Robert M. Hanson<br> Professor of Chemistry<br> St. Olaf College<br> 1520 St. Olaf Ave.<br> Northfield, MN 55057<br> <a moz-do-not-send="true" href="http://www.stolaf.edu/people/hansonr" target="_blank">http://www.stolaf.edu/people/hansonr</a><br> phone: 507-786-3107<br> <br> <br> If nature does not answer first what we want,<br> it is better to take what answer we get. <br> <br> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900<br> </blockquote> </div> </div> </div> <br> ------------------------------------------------------------------------------<br> Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA<br> -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise<br> -Strategies to boost innovation and cut costs with open source participation<br> -Receive a $600 discount off the registration fee with the source code: SFAD<br> <a moz-do-not-send="true" href="http://p.sf.net/sfu/XcvMzF8H" target="_blank">http://p.sf.net/sfu/XcvMzF8H</a><br> _______________________________________________<br> Jmol-users mailing list<br> <a moz-do-not-send="true" href="mailto:Jmo...@li...">Jmo...@li...</a><br> <a moz-do-not-send="true" href="https://lists.sourceforge.net/lists/listinfo/jmol-users" target="_blank">https://lists.sourceforge.net/lists/listinfo/jmol-users</a><br> <br> </blockquote> </div> <br> <br clear="all"> <br> -- <br> Robert M. Hanson<br> Professor of Chemistry<br> St. Olaf College<br> 1520 St. Olaf Ave.<br> Northfield, MN 55057<br> <a moz-do-not-send="true" href="http://www.stolaf.edu/people/hansonr">http://www.stolaf.edu/people/hansonr</a><br> phone: 507-786-3107<br> <br> <br> If nature does not answer first what we want,<br> it is better to take what answer we get. <br> <br> -- Josiah Willard Gibbs, Lecture XXX, Monday, February 5, 1900<br> </blockquote> </body> </html> |