Package org.jmol.smiles
Class SmilesGenerator
- java.lang.Object
-
- org.jmol.smiles.SmilesGenerator
-
public class SmilesGenerator extends java.lang.ObjectDouble 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 intacprivate booleanaddAtomCommentprivate SimpleNode[]alleneStereoprivate booleanaromaticDoubleprivate javajs.util.Lst<javajs.util.BS>aromaticRingsprivate SimpleNode[]atempprivate Node[]atomsprivate javajs.util.BSbsAromaticprivate javajs.util.BSbsBondsDnprivate javajs.util.BSbsBondsUpprivate javajs.util.BSbsIgnoreHprivate javajs.util.BSbsIncludingHprivate javajs.util.BSbsRingKeysprivate javajs.util.BSbsSelectedprivate javajs.util.BSbsToDoprivate intchainCheckprivate intexplicitH0 H all implicit 0x1000 CH2 explicit 0x2000 CH2 and CH3 explicitprivate intflags(package private) booleangetAromaticprivate java.util.Map<java.lang.String,java.lang.Object[]>htRingsprivate java.util.Map<java.lang.String,java.lang.Object[]>htRingsSequenceprivate intiHypervalentprivate booleanis2Dprivate booleanisPolyhedralprivate booleannoBioCommentprivate booleannoStereoprivate intnPairsprivate intnPairsMaxprivate booleanopenSMILESjavajs.util.P3polySmilesCenterprivate SimpleNodeprevAtomprivate SimpleNode[]prevSp2Atomsprivate intptAtomprivate intptSp2Atom0private javajs.util.Lst<javajs.util.BS>ringSetsprivate SmilesMatchersmprivate SmilesStereosmilesStereoprivate booleantopologyOnlyprivate VTempvTemp
-
Constructor Summary
Constructors Constructor Description SmilesGenerator()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddBracketedBioName(javajs.util.SB sb, Node atom, java.lang.String atomName, boolean addComment)private java.lang.StringaddStereoCheck(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 java.lang.StringcheckStereoPairs(SimpleNode atom, int atomIndex, SimpleNode[] stereo, int stereoFlag, boolean isFirst)private voiddumpRingKeys(javajs.util.SB sb, java.util.Map<java.lang.String,java.lang.Object[]> ht)private voidgenerateRingData()get aromaticity, ringSets, and aromaticRings fields so that we can assign / and \ and also provide inter-aromatic single bondprivate java.lang.StringgetBioSmiles(javajs.util.BS bsSelected, java.lang.String comment, int flags)private java.lang.StringgetBondOrder(Edge bondPrev, int atomIndex, int prevIndex, boolean isAromatic)private chargetBondStereochemistry(Edge bond, SimpleNode atomFrom)Retrieves the saved character based on the index of the bond.private java.lang.StringgetRingCache(int i0, int i1, java.util.Map<java.lang.String,java.lang.Object[]> ht)protected static java.lang.StringgetRingKey(int i0, int i1)private java.lang.StringgetRingPointer(int i)(package private) java.lang.StringgetSmiles(SmilesMatcher sm, Node[] atoms, int ac, javajs.util.BS bsSelected, java.lang.String comment, int flags)private NodegetSmilesAt(javajs.util.SB sb, SimpleNode atom, boolean allowConnectionsToOutsideWorld, boolean allowBranches, boolean forceBrackets)private java.lang.StringgetSmilesComponent(Node atom, javajs.util.BS bs, boolean allowBioResidues, boolean allowConnectionsToOutsideWorld, boolean forceBrackets)creates a valid SMILES string from a model.private booleanisSameAromaticRing(int a1, int a2)private voidsetBondDirections()Creates global BitSets bsBondsUp and bsBondsDown.private voidsetStereoTemp(SimpleNode[] stereo, SimpleNode a, float z)private java.lang.StringsortInorganic(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) voidsortPolyBonds(SimpleNode atom, SimpleNode refAtom, javajs.util.P3 center)private voidswapArray(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
-
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
-
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
-
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
- 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
-
generateRingData
private void generateRingData() throws InvalidSmilesExceptionget 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)
-
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)
-
-