org.jmol.smiles
Class SmilesGenerator

java.lang.Object
  extended by org.jmol.smiles.SmilesGenerator

public class SmilesGenerator
extends java.lang.Object

Double bond, allene, square planar and tetrahedral stereochemistry only not octahedral or trigonal bipyramidal. No attempt at canonicalization -- unnecessary for model searching. see SmilesMatcher and package.html for details Bob Hanson, Jmol 12.0.RC17 2010.06.5


Field Summary
private  int atomCount
           
private  JmolNode[] atoms
           
private  java.util.BitSet bsAromatic
           
private  java.util.BitSet bsBondsDn
           
private  java.util.BitSet bsBondsUp
           
private  java.util.BitSet bsIncludingH
           
private  java.util.BitSet bsSelected
           
private  java.util.BitSet bsToDo
           
private  java.util.Hashtable htRings
           
private  java.util.Hashtable htRingsSequence
           
private  int nPairs
           
private  JmolNode prevAtom
           
private  JmolNode[] prevSp2Atoms
           
private  java.lang.StringBuffer ringSets
           
private  SmilesSearch.VTemp vTemp
           
 
Constructor Summary
SmilesGenerator()
           
 
Method Summary
private  void addBracketedBioName(java.lang.StringBuffer sb, JmolNode a, java.lang.String atomName)
           
private  java.lang.String addStereoCheck(int atomIndex, JmolNode[] stereo, int i, java.lang.String s)
          checks a group and either adds a new group to the growing check string or returns null
private  java.lang.String checkStereoPairs(JmolNode atom, int atomIndex, JmolNode[] stereo, int stereoFlag)
           
private  void dumpRingKeys(java.lang.StringBuffer sb, java.util.Hashtable ht)
           
(package private)  java.lang.String getBioSmiles(JmolNode[] atoms, int atomCount, java.util.BitSet bsSelected, boolean allowUnmatchedRings, boolean addCrossLinks, java.lang.String comment)
           
private  char getBondStereochemistry(JmolEdge bond, JmolNode atomFrom)
          Retrieves the saved character based on the index of the bond.
private  java.lang.String getRingCache(int i0, int i1, java.util.Hashtable ht)
           
protected static java.lang.String getRingKey(int i0, int i1)
           
(package private)  java.lang.String getSmiles(JmolNode[] atoms, int atomCount, java.util.BitSet bsSelected)
           
private  JmolNode getSmiles(java.lang.StringBuffer sb, JmolNode atom, boolean allowConnectionsToOutsideWorld, boolean allowBranches)
           
private  java.lang.String getSmilesComponent(JmolNode atom, java.util.BitSet bs, boolean allowConnectionsToOutsideWorld)
          creates a valid SMILES string from a model.
private static java.lang.String getStereoFlag(JmolNode atom0, JmolNode[] atoms, int nAtoms, SmilesSearch.VTemp v)
           
private  void setBondDirections()
          Creates global BitSets bsBondsUp and bsBondsDown.
private  java.lang.String sortInorganic(JmolNode atom, java.util.List v)
          We must sort the bond vector such that a diaxial pair is first and last.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

atoms

private JmolNode[] atoms

atomCount

private int atomCount

bsSelected

private java.util.BitSet bsSelected

bsAromatic

private java.util.BitSet bsAromatic

ringSets

private java.lang.StringBuffer ringSets

vTemp

private SmilesSearch.VTemp vTemp

nPairs

private int nPairs

bsBondsUp

private java.util.BitSet bsBondsUp

bsBondsDn

private java.util.BitSet bsBondsDn

bsToDo

private java.util.BitSet bsToDo

prevAtom

private JmolNode prevAtom

prevSp2Atoms

private JmolNode[] prevSp2Atoms

htRingsSequence

private java.util.Hashtable htRingsSequence

htRings

private java.util.Hashtable htRings

bsIncludingH

private java.util.BitSet bsIncludingH
Constructor Detail

SmilesGenerator

public SmilesGenerator()
Method Detail

getSmiles

java.lang.String getSmiles(JmolNode[] atoms,
                           int atomCount,
                           java.util.BitSet bsSelected)
                     throws InvalidSmilesException
Throws:
InvalidSmilesException

getBioSmiles

java.lang.String getBioSmiles(JmolNode[] atoms,
                              int atomCount,
                              java.util.BitSet bsSelected,
                              boolean allowUnmatchedRings,
                              boolean addCrossLinks,
                              java.lang.String comment)
                        throws InvalidSmilesException
Throws:
InvalidSmilesException

addBracketedBioName

private void addBracketedBioName(java.lang.StringBuffer sb,
                                 JmolNode a,
                                 java.lang.String atomName)

getSmilesComponent

private java.lang.String getSmilesComponent(JmolNode atom,
                                            java.util.BitSet bs,
                                            boolean allowConnectionsToOutsideWorld)
                                     throws InvalidSmilesException
creates a valid SMILES string from a model. TODO: stereochemistry other than square planar and tetrahedral

Parameters:
atom -
bs -
allowConnectionsToOutsideWorld -
Returns:
SMILES
Throws:
InvalidSmilesException

getBondStereochemistry

private char getBondStereochemistry(JmolEdge bond,
                                    JmolNode atomFrom)
Retrieves the saved character based on the index of the bond. bsBondsUp and bsBondsDown are global fields.

Parameters:
bond -
atomFrom -
Returns:
the correct character '/', '\\', '\0' (meaning "no stereochemistry")

setBondDirections

private void setBondDirections()
Creates global BitSets bsBondsUp and bsBondsDown. Noniterative.


getSmiles

private JmolNode getSmiles(java.lang.StringBuffer sb,
                           JmolNode atom,
                           boolean allowConnectionsToOutsideWorld,
                           boolean allowBranches)

sortInorganic

private java.lang.String sortInorganic(JmolNode atom,
                                       java.util.List v)
We must sort the bond vector such that a diaxial pair is first and last. Then we assign stereochemistry based on what is left. The assignment is not made if there are no diaxial groups or with octahedral if there are fewer than three.

Parameters:
atom -
v -
Returns:
"@" or "@@" or ""

checkStereoPairs

private java.lang.String checkStereoPairs(JmolNode atom,
                                          int atomIndex,
                                          JmolNode[] stereo,
                                          int stereoFlag)

getStereoFlag

private static java.lang.String getStereoFlag(JmolNode atom0,
                                              JmolNode[] atoms,
                                              int nAtoms,
                                              SmilesSearch.VTemp v)
Parameters:
atom0 -
atoms -
nAtoms -
v -
Returns:
String

addStereoCheck

private java.lang.String addStereoCheck(int atomIndex,
                                        JmolNode[] stereo,
                                        int i,
                                        java.lang.String s)
checks a group and either adds a new group to the growing check string or returns null

Parameters:
atomIndex -
stereo -
i -
s -
Returns:
null if duplicate

getRingCache

private java.lang.String getRingCache(int i0,
                                      int i1,
                                      java.util.Hashtable ht)

dumpRingKeys

private void dumpRingKeys(java.lang.StringBuffer sb,
                          java.util.Hashtable ht)

getRingKey

protected static java.lang.String getRingKey(int i0,
                                             int i1)