Package org.jmol.smiles
Class SmilesGenerator
- java.lang.Object
-
- 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
Fields Modifier and Type Field Description private int
ac
private boolean
addAtomComment
private SimpleNode[]
alleneStereo
private boolean
aromaticDouble
private javajs.util.Lst<javajs.util.BS>
aromaticRings
private SimpleNode[]
atemp
private Node[]
atoms
private javajs.util.BS
bsAromatic
private javajs.util.BS
bsBondsDn
private javajs.util.BS
bsBondsUp
private javajs.util.BS
bsIgnoreHydrogen
private javajs.util.BS
bsIncludingH
private javajs.util.BS
bsRingKeys
private javajs.util.BS
bsSelected
private javajs.util.BS
bsToDo
private int
chainCheck
private int
explicitHydrogen
0 H all implicit 0x1000 CH2 explicit 0x2000 CH2 and CH3 explicitprivate int
flags
(package private) boolean
getAromatic
private boolean
haveSmilesAtoms
private java.util.Map<java.lang.String,java.lang.Object[]>
htRings
private java.util.Map<java.lang.String,java.lang.Object[]>
htRingsSequence
private int
iHypervalent
private boolean
is2D
private boolean
isPolyhedral
private boolean
noBioComment
private boolean
noStereo
private int
nPairs
private int
nPairsMax
private boolean
openSMILES
javajs.util.P3
polySmilesCenter
private SimpleNode
prevAtom
private SimpleNode[]
prevSp2Atoms
private int
ptAtom
private int
ptSp2Atom0
private javajs.util.Lst<javajs.util.BS>
ringSets
private SmilesMatcher
sm
private SmilesStereo
smilesStereo
private boolean
topologyOnly
private VTemp
vTemp
-
Constructor Summary
Constructors Constructor Description SmilesGenerator()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addBracketedBioName(javajs.util.SB sb, Node atom, java.lang.String atomName, boolean addComment)
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 nullprivate Node
checkFirstAtom(Node atom)
Don't start with H or central cumulene (in case there is symmetry)private java.lang.String
checkStereoPairs(SimpleNode atom, int atomIndex, SimpleNode[] stereo, int stereoFlag, boolean isFirst)
private void
dumpRingKeys(javajs.util.SB sb, java.util.Map<java.lang.String,java.lang.Object[]> ht)
private void
generateRingData()
get aromaticity, ringSets, and aromaticRings fields so that we can assign / and \ and also provide inter-aromatic single bondprivate java.lang.String
getBioSmiles(javajs.util.BS bsSelected, java.lang.String comment, int flags)
private java.lang.String
getBondOrder(Edge bondPrev, int atomIndex, int prevIndex, boolean isAromatic)
private char
getBondStereochemistry(Edge bond, SimpleNode atomFrom)
Retrieves the saved character based on the index of the bond.private java.lang.String
getRingCache(int i0, int i1, java.util.Map<java.lang.String,java.lang.Object[]> ht)
protected static java.lang.String
getRingKey(int i0, int i1)
private java.lang.String
getRingPointer(int i)
(package private) java.lang.String
getSmiles(SmilesMatcher sm, Node[] atoms, int ac, javajs.util.BS bsSelected, java.lang.String comment, int flags)
The main entry point from SmilesMatcherprivate Node
getSmilesAt(javajs.util.SB sb, SimpleNode atom, boolean allowConnectionsToOutsideWorld, boolean allowBranches, boolean forceBrackets)
private java.lang.String
getSmilesComponent(Node atom, javajs.util.BS bs, boolean allowBioResidues, boolean allowConnectionsToOutsideWorld, boolean forceBrackets)
creates a valid SMILES string from a model.private boolean
isExplicitOnly(SimpleNode atom)
private boolean
isSameAromaticRing(int a1, int a2)
private void
setBondDirections()
Creates global BitSets bsBondsUp and bsBondsDown.private void
setStereoTemp(SimpleNode[] stereo, SimpleNode a, float z)
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.(package private) void
sortPolyBonds(SimpleNode atom, SimpleNode refAtom, javajs.util.P3 center)
private void
swapArray(SimpleNode[] a, int i0, int i1, int i2)
swap slices of an array [i0 i1) with [i1 i2)
-
-
-
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
-
explicitHydrogen
private int explicitHydrogen
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
-
bsIgnoreHydrogen
private javajs.util.BS bsIgnoreHydrogen
-
prevAtom
private SimpleNode prevAtom
-
prevSp2Atoms
private SimpleNode[] prevSp2Atoms
-
alleneStereo
private SimpleNode[] alleneStereo
-
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
-
smilesStereo
private SmilesStereo smilesStereo
-
isPolyhedral
private boolean isPolyhedral
-
aromaticRings
private javajs.util.Lst<javajs.util.BS> aromaticRings
-
sm
private SmilesMatcher sm
-
iHypervalent
private int iHypervalent
-
is2D
private boolean is2D
-
haveSmilesAtoms
private boolean haveSmilesAtoms
-
ptAtom
private int ptAtom
-
ptSp2Atom0
private int ptSp2Atom0
-
atemp
private SimpleNode[] atemp
-
chainCheck
private int chainCheck
-
-
Method Detail
-
getSmiles
java.lang.String getSmiles(SmilesMatcher sm, Node[] atoms, int ac, javajs.util.BS bsSelected, java.lang.String comment, int flags) throws InvalidSmilesException
The main entry point from SmilesMatcher- Parameters:
sm
-atoms
-ac
-bsSelected
-comment
-flags
-- Returns:
- SMILES
- Throws:
InvalidSmilesException
-
getBioSmiles
private java.lang.String getBioSmiles(javajs.util.BS bsSelected, java.lang.String comment, int flags) throws InvalidSmilesException
- Throws:
InvalidSmilesException
-
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
-
checkFirstAtom
private Node checkFirstAtom(Node atom)
Don't start with H or central cumulene (in case there is symmetry)- Parameters:
atom
-- Returns:
- starting node atom
-
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)
-
isExplicitOnly
private boolean isExplicitOnly(SimpleNode atom)
-
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)
-
setStereoTemp
private void setStereoTemp(SimpleNode[] stereo, SimpleNode a, float z)
-
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)
-
-