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 |