Class 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 Detail

      • atoms

        private Node[] atoms
      • ac

        private int ac
      • bsSelected

        private javajs.util.BS bsSelected
      • bsAromatic

        private javajs.util.BS bsAromatic
      • flags

        private int flags
      • explicitH

        private int explicitH
        0 H all implicit 0x1000 CH2 explicit 0x2000 CH2 and CH3 explicit
      • ringSets

        private javajs.util.Lst<javajs.util.BS> ringSets
      • vTemp

        private VTemp vTemp
      • nPairs

        private int nPairs
      • nPairsMax

        private int nPairsMax
      • bsBondsUp

        private javajs.util.BS bsBondsUp
      • bsBondsDn

        private javajs.util.BS bsBondsDn
      • bsToDo

        private javajs.util.BS bsToDo
      • bsIgnoreH

        private javajs.util.BS bsIgnoreH
      • htRingsSequence

        private java.util.Map<java.lang.String,​java.lang.Object[]> htRingsSequence
      • htRings

        private java.util.Map<java.lang.String,​java.lang.Object[]> htRings
      • bsRingKeys

        private javajs.util.BS bsRingKeys
      • bsIncludingH

        private javajs.util.BS bsIncludingH
      • topologyOnly

        private boolean topologyOnly
      • getAromatic

        boolean getAromatic
      • addAtomComment

        private boolean addAtomComment
      • noBioComment

        private boolean noBioComment
      • aromaticDouble

        private boolean aromaticDouble
      • noStereo

        private boolean noStereo
      • openSMILES

        private boolean openSMILES
      • polySmilesCenter

        public javajs.util.P3 polySmilesCenter
      • isPolyhedral

        private boolean isPolyhedral
      • aromaticRings

        private javajs.util.Lst<javajs.util.BS> aromaticRings
      • iHypervalent

        private int iHypervalent
      • is2D

        private boolean is2D
      • ptAtom

        private int ptAtom
      • ptSp2Atom0

        private int ptSp2Atom0
      • chainCheck

        private int chainCheck
    • Constructor Detail

      • SmilesGenerator

        public SmilesGenerator()
    • Method Detail

      • addBracketedBioName

        private void addBracketedBioName​(javajs.util.SB sb,
                                         Node atom,
                                         java.lang.String atomName,
                                         boolean addComment)
      • getSmilesComponent

        private java.lang.String getSmilesComponent​(Node atom,
                                                    javajs.util.BS bs,
                                                    boolean allowBioResidues,
                                                    boolean allowConnectionsToOutsideWorld,
                                                    boolean forceBrackets)
                                             throws InvalidSmilesException
        creates a valid SMILES string from a model. TODO: stereochemistry other than square planar and tetrahedral
        Parameters:
        atom -
        bs -
        allowBioResidues -
        allowConnectionsToOutsideWorld -
        forceBrackets -
        Returns:
        SMILES
        Throws:
        InvalidSmilesException
      • generateRingData

        private void generateRingData()
                               throws InvalidSmilesException
        get aromaticity, ringSets, and aromaticRings fields so that we can assign / and \ and also provide inter-aromatic single bond
        Throws:
        InvalidSmilesException
      • getBondStereochemistry

        private char getBondStereochemistry​(Edge bond,
                                            SimpleNode 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.
      • getSmilesAt

        private Node getSmilesAt​(javajs.util.SB sb,
                                 SimpleNode atom,
                                 boolean allowConnectionsToOutsideWorld,
                                 boolean allowBranches,
                                 boolean forceBrackets)
      • swapArray

        private void swapArray​(SimpleNode[] a,
                               int i0,
                               int i1,
                               int i2)
        swap slices of an array [i0 i1) with [i1 i2)
        Parameters:
        a -
        i0 -
        i1 -
        i2 -
      • getBondOrder

        private java.lang.String getBondOrder​(Edge bondPrev,
                                              int atomIndex,
                                              int prevIndex,
                                              boolean isAromatic)
        Parameters:
        bondPrev -
        atomIndex -
        prevIndex -
        isAromatic -
        Returns:
        "-", "=", "#", "$", or ""
      • isSameAromaticRing

        private boolean isSameAromaticRing​(int a1,
                                           int a2)
      • sortPolyBonds

        void sortPolyBonds​(SimpleNode atom,
                           SimpleNode refAtom,
                           javajs.util.P3 center)
      • sortInorganic

        private java.lang.String sortInorganic​(SimpleNode atom,
                                               javajs.util.Lst<Edge> v,
                                               VTemp vTemp)
        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 or trigonal bipyramidal with no axial ligands.
        Parameters:
        atom -
        v -
        vTemp -
        Returns:
        "@" or "@@" or ""
      • checkStereoPairs

        private java.lang.String checkStereoPairs​(SimpleNode atom,
                                                  int atomIndex,
                                                  SimpleNode[] stereo,
                                                  int stereoFlag,
                                                  boolean isFirst)
      • addStereoCheck

        private java.lang.String addStereoCheck​(int level,
                                                int atomIndex,
                                                SimpleNode atom,
                                                java.lang.String s,
                                                javajs.util.BS bsDone)
        checks a group and either adds a new group to the growing check string or returns null
        Parameters:
        level -
        atomIndex -
        atom -
        s -
        bsDone -
        Returns:
        null if duplicate
      • getRingCache

        private java.lang.String getRingCache​(int i0,
                                              int i1,
                                              java.util.Map<java.lang.String,​java.lang.Object[]> ht)
      • getRingPointer

        private java.lang.String getRingPointer​(int i)
      • dumpRingKeys

        private void dumpRingKeys​(javajs.util.SB sb,
                                  java.util.Map<java.lang.String,​java.lang.Object[]> ht)
      • getRingKey

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