Revision: 20739
          http://sourceforge.net/p/jmol/code/20739
Author:   hansonr
Date:     2015-08-28 15:13:16 +0000 (Fri, 28 Aug 2015)
Log Message:
-----------
Jmol.___JmolVersion="14.3.16_2015.08.28"

new feature: Gaussian fchk reader reads vibrational modes 
-- Gaussian command deck must include Freq=(SaveNormalModes,Raman,VibRot)
 

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianFchkReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java
    trunk/Jmol/src/org/jmol/scriptext/MathExt.java
    trunk/Jmol/src/org/jmol/scriptext/SmilesExt.java
    trunk/Jmol/src/org/jmol/smiles/SmilesGenerator.java
    trunk/Jmol/src/org/jmol/smiles/SmilesMatcher.java
    trunk/Jmol/src/org/jmol/viewer/JC.java
    trunk/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/viewer/Viewer.java

Modified: 
trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianFchkReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianFchkReader.java     
2015-08-26 14:39:24 UTC (rev 20738)
+++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianFchkReader.java     
2015-08-28 15:13:16 UTC (rev 20739)
@@ -42,9 +42,12 @@
 
 /**
  * Reader for Gaussian fchk files
- * also allows appended frequency info from the log file
+ * for vibrational modes, add Freq=(SaveNormalModes,Raman,VibRot) 
  * 
  * 
+ * also allows appended freq data
+ * 
+ * 
  * @author hansonr  Bob Hanson hans...@stolaf.edu
  *
  **/
@@ -69,15 +72,77 @@
     readPartialCharges();
     readBasis();
     readMolecularObitals();
-    readFrequencies("NumFreq", false); // if log frequency info is appended
+    checkForFreq();
     continuing = false;
   }
 
+  private void checkForFreq() throws Exception {
+    Integer n = (Integer) fileData.get("Vib-NDim");
+    if (n == null) {
+//      NumAtom 9
+//      NumFreq 21
+//                           1                      2                      3
+//                          A2                     B1                     A2
+//       Frequencies --   613.8891               622.9996               
722.2497
+//       Red. masses --     3.1195                 3.8445                 
1.3156
+//       Frc consts  --     0.6927                 0.8791                 
0.4043
+      readFrequencies("NumFreq", false); // if freq file appended
+      return;
+    }
+    try {
+      int nModes  = n.intValue();
+      float[] vibE2 = (float[]) fileData.get("Vib-E2");
+      float[] modes = (float[]) fileData.get("Vib-Modes");      
+      float[] frequencies = fillFloat(vibE2, 0, nModes);
+      float[] red_masses = fillFloat(vibE2, nModes, nModes);
+      float[] frc_consts = fillFloat(vibE2, nModes * 2, nModes);
+      float[] intensities = fillFloat(vibE2, nModes * 3, nModes);
+      int ac = asc.getLastAtomSetAtomCount();
+      boolean[] ignore = new boolean[nModes];
+      int fpt = 0;
+      for (int i = 0; i < nModes; ++i) {
+        ignore[i] = !doGetVibration(++vibrationNumber);
+        if (ignore[i])
+          continue;   
+        int iAtom0 = asc.ac;
+        asc.cloneAtomSetWithBonds(true);
+        // set the properties
+        String name = asc.setAtomSetFrequency("Calculation " + 
calculationNumber, null, "" + frequencies[i], null);
+        appendLoadNote("model " + asc.atomSetCount + ": " + name);
+        namedSets.set(asc.iSet);
+        asc.setAtomSetModelProperty("ReducedMass",
+            red_masses[i]+" AMU");
+        asc.setAtomSetModelProperty("ForceConstant",
+            frc_consts[i]+" mDyne/A");
+        asc.setAtomSetModelProperty("IRIntensity",
+            intensities[i]+" KM/Mole");
+        for (int iAtom = 0; iAtom < ac; iAtom++) {
+          asc.addVibrationVectorWithSymmetry(iAtom0
+              + iAtom, modes[fpt++], modes[fpt++], modes[fpt++], false);
+        }
+      }
+    } catch (Exception e) {
+      Logger.error("Could not read Vib-E2 section: " + e.getMessage());
+    }
+
+  }
+
+  private float[] fillFloat(float[] f0, int i, int n) {
+    float[] f = new float[n];
+    for (int i1 = 0, ilast = i + n; i < ilast; i++, i1++)
+      f[i1] = f0[i];
+    return f;
+  }
+
   private void readAllData() throws Exception {
     while ((line == null ? rd() : line) != null) {
       if (line.length() < 40) {
-        if (line.indexOf("NumAtom") == 0)
+        if (line.indexOf("NumAtom") == 0) {
+          // freq file appended
+//        NumAtom 9
+//        NumFreq 21 
           return;
+        }
         continue;
       }
       String name = PT.rep(line.substring(0, 40).trim(), " ", "");

Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java 
2015-08-26 14:39:24 UTC (rev 20738)
+++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java 
2015-08-28 15:13:16 UTC (rev 20739)
@@ -65,7 +65,7 @@
   private String energyKey = "";
   
   /** The number of the calculation being interpreted. */
-  private int calculationNumber = 1;
+  protected int calculationNumber = 1;
   
   /**  The scan point, where -1 denotes no scan information. */
   private int scanPoint = -1;
@@ -78,7 +78,7 @@
   private int stepNumber;
 
   private int moModelSet = -1;
-  private BS namedSets = new BS();
+  protected BS namedSets = new BS();
 
 
   /**

Modified: trunk/Jmol/src/org/jmol/scriptext/MathExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/MathExt.java      2015-08-26 14:39:24 UTC 
(rev 20738)
+++ trunk/Jmol/src/org/jmol/scriptext/MathExt.java      2015-08-28 15:13:16 UTC 
(rev 20739)
@@ -429,14 +429,14 @@
           return mp.addXStr("NONE");
         if (bs1 != null)
           smiles1 = (String) e.getSmilesExt().getSmilesMatches("", null, bs1,
-              null, false, true, false);
+              null, JC.SMILES_TYPE_SMILES, true, false);
         boolean check;
         if (bs2 == null) {
           // note: find smiles1 IN smiles2 here
           check = (vwr.getSmilesMatcher().areEqual(smiles2, smiles1) > 0);
         } else {
           check = (((BS) e.getSmilesExt().getSmilesMatches(smiles1, null, bs2,
-              null, false, true, false)).nextSetBit(0) >= 0);
+              null, JC.SMILES_TYPE_SMILES, true, false)).nextSetBit(0) >= 0);
         }
         if (!check) {
           // MF matched, but didn't match SMILES
@@ -451,7 +451,7 @@
                 check = (vwr.getSmilesMatcher().areEqual(smiles1, smiles2) > 
0);
               } else {
                 check = (((BS) e.getSmilesExt().getSmilesMatches(smiles1, null,
-                    bs2, null, false, true, false)).nextSetBit(0) >= 0);
+                    bs2, null, JC.SMILES_TYPE_SMILES, true, 
false)).nextSetBit(0) >= 0);
               }
               if (check)
                 return mp.addXStr("ENANTIOMERS");
@@ -462,7 +462,7 @@
                   smiles1) > 0);
             } else {
               Object ret = e.getSmilesExt().getSmilesMatches(
-                  "/nostereo/" + smiles1, null, bs2, null, false, true, false);
+                  "/nostereo/" + smiles1, null, bs2, null, 
JC.SMILES_TYPE_SMILES, true, false);
               check = (((BS) ret).nextSetBit(0) >= 0);
             }
             if (check)
@@ -515,7 +515,7 @@
           pattern = "/noaromatic"
               + (allMaps || bestMap ? "/" : " nostereo/")
               + e.getSmilesExt().getSmilesMatches((hMaps ? "H" : ""), null,
-                  bs1, null, false, true, false);
+                  bs1, null, JC.SMILES_TYPE_SMILES, true, false);
         } else {
           allMaps = true;
         }
@@ -1110,7 +1110,9 @@
             }
             try {
               ret = e.getSmilesExt().getSmilesMatches(pattern, smiles, null,
-                  null, isSMARTS, !asMap, !allMappings);
+                  null,
+                  isSMARTS ? JC.SMILES_TYPE_SMARTS : JC.SMILES_TYPE_SMILES,
+                  !asMap, !allMappings);
             } catch (Exception e) {
               return mp.addXInt(-1);
             }
@@ -1149,8 +1151,12 @@
                     | JC.SMILES_RETURN_FIRST);
             ret = (map.length > 0 ? vwr.ms.getDihedralMap(map[0]) : new 
int[0]);
           } else {
+            int smilesFlags = (isSmiles ? JC.SMILES_TYPE_SMILES
+                : JC.SMILES_TYPE_SMARTS)
+                | (isON && sFind.length() == 0 ? JC.SMILES_BIO
+                    | JC.SMILES_BIO_COMMENT : 0);
             ret = e.getSmilesExt().getSmilesMatches(sFind, null, (BS) x1.value,
-                bsMatch3D, !isSmiles, !isAll, false);
+                bsMatch3D, smilesFlags, !isON, false);
           }
           break;
         }
@@ -2782,8 +2788,8 @@
     RadiusData rd = null;
     switch (tok) {
     case T.branch:
-      return (i == 3 && args[1].value instanceof BS 
-      && args[2].value instanceof BS && mp.addXBs(vwr.getBranchBitSet(
+      return (i == 3 && args[1].value instanceof BS
+          && args[2].value instanceof BS && mp.addXBs(vwr.getBranchBitSet(
           ((BS) args[2].value).nextSetBit(0),
           ((BS) args[1].value).nextSetBit(0), true)));
     case T.smiles:
@@ -2806,8 +2812,10 @@
       }
       if (!isOK)
         e.invArg();
-      return mp.addXObj(e.getSmilesExt().getSmilesMatches(SV.sValue(args[1]), 
null, bsSelected,
-          null, tok == T.search, mp.asBitSet, false));
+      return mp.addXObj(e.getSmilesExt().getSmilesMatches(SV.sValue(args[1]),
+          null, bsSelected, null,
+          tok == T.search ? JC.SMILES_TYPE_SMARTS : JC.SMILES_TYPE_SMILES,
+          mp.asBitSet, false));
     }
     if (withinSpec instanceof String) {
       if (tok == T.nada) {
@@ -2835,13 +2843,13 @@
           return mp.addXBs(getAtomsNearSurface(distance, s.substring(1)));
         isWithinGroup = (s.equalsIgnoreCase("group"));
         isVdw = (!isWithinGroup && s.equalsIgnoreCase("vanderwaals"));
-        isWithinUnitcell  = (!isWithinGroup && s.equalsIgnoreCase("unitcell"));
+        isWithinUnitcell = (!isWithinGroup && s.equalsIgnoreCase("unitcell"));
         if (isVdw) {
           withinSpec = null;
           tok = T.vanderwaals;
         } else if (isWithinUnitcell) {
-          tok = T.unitcell; 
-        } else {         
+          tok = T.unitcell;
+        } else {
           tok = T.group;
         }
         break;
@@ -2881,8 +2889,8 @@
       case T.rna3d:
       case T.domains:
       case T.validation:
-        return mp.addXBs(vwr.ms.getAtoms(tok,
-            SV.sValue(args[args.length - 1])));
+        return mp
+            .addXBs(vwr.ms.getAtoms(tok, SV.sValue(args[args.length - 1])));
       }
       break;
     case 3:
@@ -2926,11 +2934,12 @@
     bs = (args[i].tok == T.bitset ? SV.bsSelectVar(args[i]) : null);
     if (tok == T.unitcell) {
       boolean asMap = isWithinModelSet;
-      return mp.addXObj(vwr.ms.getUnitCellPointsWithin(distance, bs, pt, 
asMap));
+      return mp
+          .addXObj(vwr.ms.getUnitCellPointsWithin(distance, bs, pt, asMap));
     }
     if (pt != null)
       return mp.addXBs(vwr.getAtomsNearPt(distance, pt));
-    
+
     if (tok == T.sequence)
       return mp.addXBs(vwr.ms.getSequenceBits(withinStr, bs));
     if (bs == null)

Modified: trunk/Jmol/src/org/jmol/scriptext/SmilesExt.java
===================================================================
--- trunk/Jmol/src/org/jmol/scriptext/SmilesExt.java    2015-08-26 14:39:24 UTC 
(rev 20738)
+++ trunk/Jmol/src/org/jmol/scriptext/SmilesExt.java    2015-08-28 15:13:16 UTC 
(rev 20739)
@@ -24,25 +24,21 @@
 
 package org.jmol.scriptext;
 
+import javajs.util.AU;
+import javajs.util.Lst;
+import javajs.util.M4;
+import javajs.util.Measure;
+import javajs.util.P3;
+
 import org.jmol.api.Interface;
 import org.jmol.api.SmilesMatcherInterface;
 import org.jmol.java.BS;
 import org.jmol.modelset.Atom;
-import org.jmol.modelset.BondSet;
 import org.jmol.script.ScriptEval;
 import org.jmol.script.ScriptException;
-import org.jmol.util.BSUtil;
-
-import javajs.util.AU;
-import javajs.util.Lst;
-import javajs.util.Measure;
-
 import org.jmol.util.Logger;
 import org.jmol.viewer.JC;
 
-import javajs.util.M4;
-import javajs.util.P3;
-
 public class SmilesExt {
   
   private ScriptEval e;
@@ -160,52 +156,47 @@
   }
 
   /**
-   * @param pattern e
-   * @param smiles 
-   * @param bsSelected 
-   * @param bsMatch3D 
-   * @param isSmarts 
-   * @param asOneBitset 
-   * @param firstMatchOnly  
-   * @return 
-   * @throws ScriptException 
+   * @param pattern
+   *        e
+   * @param smiles
+   * @param bsSelected
+   * @param bsMatch3D
+   * @param flags
+   * @param asOneBitset
+   * @param firstMatchOnly
+   * @return Object
+   * @throws ScriptException
    */
   public Object getSmilesMatches(String pattern, String smiles, BS bsSelected,
-                                 BS bsMatch3D, boolean isSmarts,
-                                 boolean asOneBitset, boolean firstMatchOnly) 
throws ScriptException {
+                                 BS bsMatch3D, int flags, boolean asOneBitset,
+                                 boolean firstMatchOnly) throws 
ScriptException {
 
     // just retrieving the SMILES or bioSMILES string
-
     if (pattern.length() == 0 || pattern.equals("H") || pattern.equals("*")) {
-      boolean isBioSmiles = (!asOneBitset);
       try {
         return e.vwr.getSmilesOpt(
             bsSelected,
             0,
             0,
-            (pattern.equals("H") ? JC.SMILES_EXPLICIT_H : 0)
-                | (pattern.equals("*") ? JC.SMILES_TOPOLOGY : 0)
-                | (isBioSmiles ? JC.SMILES_BIO | JC.SMILES_BIO_CROSSLINK
-                    | JC.SMILES_BIO_COMMENT : 0));
+            flags | (pattern.equals("H") ? JC.SMILES_EXPLICIT_H : 0)
+                | (pattern.equals("*") ? JC.SMILES_TOPOLOGY : 0));
       } catch (Exception ex) {
         e.evalError(ex.getMessage(), null);
       }
     }
-
     BS[] b;
     if (bsMatch3D == null) {
-
       // getting a BitSet or BitSet[] from a set of atoms or a pattern.
-
+      boolean isSmarts = JC.checkFlag(flags, JC.SMILES_TYPE_SMARTS);
       try {
         if (smiles == null) {
           b = sm.getSubstructureSetArray(pattern, e.vwr.ms.at, e.vwr.ms.ac,
-              bsSelected, null, isSmarts ? JC.SMILES_TYPE_SMARTS
-                  : JC.SMILES_TYPE_SMILES);
+              bsSelected, null, flags);
         } else {
           int[][] map = sm.find(pattern, smiles, isSmarts, firstMatchOnly);
           if (!asOneBitset)
-            return (!firstMatchOnly ? map : map.length == 0 ? new int[0] : 
map[0]);
+            return (!firstMatchOnly ? map : map.length == 0 ? new int[0]
+                : map[0]);
           BS bs = new BS();
           for (int j = 0; j < map.length; j++) {
             int[] a = map[j];
@@ -232,13 +223,9 @@
 
       Lst<BS> vReturn = new Lst<BS>();
       float stddev = getSmilesCorrelation(bsMatch3D, bsSelected, pattern, null,
-          null, null, vReturn, false, null, null, false,
-          isSmarts ? JC.SMILES_TYPE_SMARTS : JC.SMILES_TYPE_SMILES);
-      if (Float.isNaN(stddev)) {
-        if (asOneBitset)
-          return new BS();
-        return new String[] {};
-      }
+          null, null, vReturn, false, null, null, false, flags);
+      if (Float.isNaN(stddev))
+        return (asOneBitset ? new BS() : new String[] {});
       e.showString("RMSD " + stddev + " Angstroms");
       b = vReturn.toArray(new BS[vReturn.size()]);
     }

Modified: trunk/Jmol/src/org/jmol/smiles/SmilesGenerator.java
===================================================================
--- trunk/Jmol/src/org/jmol/smiles/SmilesGenerator.java 2015-08-26 14:39:24 UTC 
(rev 20738)
+++ trunk/Jmol/src/org/jmol/smiles/SmilesGenerator.java 2015-08-28 15:13:16 UTC 
(rev 20739)
@@ -84,10 +84,11 @@
   private BS bsIncludingH;
   private boolean topologyOnly;
   boolean getAromatic = true;
+  private boolean addAtomComment;
 
   // generation of SMILES strings
 
-  String getSmiles(Node[] atoms, int ac, BS bsSelected, boolean explicitH, 
boolean topologyOnly, boolean getAromatic)
+  String getSmiles(Node[] atoms, int ac, BS bsSelected, boolean explicitH, 
boolean topologyOnly, boolean getAromatic, boolean addAtomComment)
       throws InvalidSmilesException {
     int i = bsSelected.nextSetBit(0);
     if (i < 0)
@@ -98,6 +99,7 @@
     this.explicitH = explicitH;
     this.topologyOnly = topologyOnly;
     this.getAromatic = getAromatic;
+    this.addAtomComment = addAtomComment;
     return getSmilesComponent(atoms[i], bsSelected, true, false);
   }
 
@@ -122,7 +124,7 @@
         BNode a = atoms[i];
         String ch = a.getGroup1('?');
         String bioStructureName = a.getBioStructureTypeName();
-        boolean unknown = (ch.equals("?"));
+        boolean unknown = (ch == ch.toLowerCase());
         if (end != null) {
           if (sb.length() > 0)
             sb.append(end);
@@ -135,7 +137,7 @@
               len = s.length();
               sb.append(s);
             }
-            sb.append("~").appendC(bioStructureName.charAt(0)).append("~");
+            
sb.append("~").appendC(bioStructureName.toLowerCase().charAt(0)).append("~");
             len++;
           } else {
             s = getSmilesComponent(a, bs, false, true);
@@ -157,7 +159,7 @@
           len = 2;
         }
         if (unknown) {
-          addBracketedBioName(sb, a, bioStructureName.length() > 0 ? ".0" : 
null);
+          addBracketedBioName(sb, a, bioStructureName.length() > 0 ? ".0" : 
null, false);
         } else {
           sb.append(ch);
         }
@@ -199,7 +201,7 @@
     return s;
   }
 
-  private void addBracketedBioName(SB sb, Node atom, String atomName) {
+  private void addBracketedBioName(SB sb, Node atom, String atomName, boolean 
addComment) {
     sb.append("[");
     if (atomName != null && atom instanceof BNode) {
       BNode a = (BNode) atom;
@@ -207,11 +209,13 @@
       sb.append(a.getGroup3(false));
       if (!atomName.equals(".0"))
         sb.append(atomName).append("#").appendI(a.getElementNumber());
+      if (addComment) {
       sb.append("//* ").appendI(
           a.getResno());
       if (chain.length() > 0)
         sb.append(":").append(chain);
       sb.append(" *//");
+      }
     } else {
       sb.append(Elements.elementNameFromNumber(atom.getElementNumber()));
     }
@@ -662,12 +666,12 @@
     // for bioSMARTS we provide the connecting atom if 
     // present. For example, in 1BLU we have 
     // .[CYS.SG#16] could match either the atom number or the element number 
-    if (Logger.debugging)
+    if (addAtomComment)
       sb.append("\n//* " + atom + " *//\t");
     if (topologyOnly)
       sb.append("*");
     else if (isExtension && groupType.length() != 0 && atomName.length() != 0)
-      addBracketedBioName(sb, atom, "." + atomName);
+      addBracketedBioName(sb, atom, "." + atomName, false);
     else
       sb.append(SmilesAtom
           .getAtomLabel(atomicNumber, isotope, valence, charge, nH, isAromatic,

Modified: trunk/Jmol/src/org/jmol/smiles/SmilesMatcher.java
===================================================================
--- trunk/Jmol/src/org/jmol/smiles/SmilesMatcher.java   2015-08-26 14:39:24 UTC 
(rev 20738)
+++ trunk/Jmol/src/org/jmol/smiles/SmilesMatcher.java   2015-08-28 15:13:16 UTC 
(rev 20739)
@@ -106,10 +106,6 @@
   private final static int SMILES_MODE_MASK         = 0x00F000;
 
 
-  private boolean checkFlag(int flags, int flag) {
-    return (flags & flag) == flag;
-  }
-
   @Override
   public String getLastException() {
     return InvalidSmilesException.getLastError();
@@ -149,19 +145,20 @@
                              String bioComment, int flags) throws Exception {
 //  boolean asBioSmiles, boolean bioAllowUnmatchedRings,  boolean 
bioAddCrossLinks, boolean explicitH
      InvalidSmilesException.clear();
-    if (checkFlag(flags, JC.SMILES_BIO)) {
-      boolean bioAllowUnmatchedRings = checkFlag(flags,
+    if (JC.checkFlag(flags, JC.SMILES_BIO)) {
+      boolean bioAllowUnmatchedRings = JC.checkFlag(flags,
           JC.SMILES_BIO_ALLOW_UNMACHED_RINGS);
-      boolean bioAddCrossLinks = checkFlag(flags, JC.SMILES_BIO_CROSSLINK);
+      boolean bioAddCrossLinks = JC.checkFlag(flags, JC.SMILES_BIO_CROSSLINK);
       return (new SmilesGenerator()).getBioSmiles((BNode[]) atoms, ac,
           bsSelected, bioAllowUnmatchedRings, bioAddCrossLinks, bioComment);
     }
-    boolean explicitH = checkFlag(flags, JC.SMILES_EXPLICIT_H);
-    boolean topologyOnly = checkFlag(flags, JC.SMILES_TOPOLOGY);
-    boolean getAromatic = !checkFlag(flags, JC.SMILES_NOAROMATIC);
+    boolean explicitH = JC.checkFlag(flags, JC.SMILES_EXPLICIT_H);
+    boolean topologyOnly = JC.checkFlag(flags, JC.SMILES_TOPOLOGY);
+    boolean getAromatic = !JC.checkFlag(flags, JC.SMILES_NOAROMATIC);
+    boolean addAtomComment = JC.checkFlag(flags, JC.SMILES_ATOM_COMMENT);
     
     return (new SmilesGenerator()).getSmiles(atoms, ac, bsSelected, explicitH,
-        topologyOnly, getAromatic);
+        topologyOnly, getAromatic, addAtomComment);
   }
 
   @Override
@@ -452,7 +449,7 @@
                        BS bsAromatic, int flags) throws Exception {
     InvalidSmilesException.clear();
     try {
-      SmilesSearch search = SmilesParser.getMolecule(pattern, checkFlag(flags, 
JC.SMILES_TYPE_SMARTS));
+      SmilesSearch search = SmilesParser.getMolecule(pattern, 
JC.checkFlag(flags, JC.SMILES_TYPE_SMARTS));
       search.jmolAtoms = atoms;
       if (atoms instanceof BNode[])
         search.bioAtoms = (BNode[]) atoms;
@@ -463,8 +460,8 @@
       search.getSelections();
       search.bsRequired = null;//(bsRequired != null && 
bsRequired.cardinality() > 0 ? bsRequired : null);
       search.setRingData(bsAromatic);
-      search.firstMatchOnly = checkFlag(flags, JC.SMILES_RETURN_FIRST);
-      search.matchAllAtoms = checkFlag(flags, JC.SMILES_MATCH_ALL);
+      search.firstMatchOnly = JC.checkFlag(flags, JC.SMILES_RETURN_FIRST);
+      search.matchAllAtoms = JC.checkFlag(flags, JC.SMILES_MATCH_ALL);
       switch (flags & SMILES_MODE_MASK) {
       case SMILES_MODE_BITSET:
         search.asVector = false;

Modified: trunk/Jmol/src/org/jmol/viewer/JC.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/JC.java      2015-08-26 14:39:24 UTC (rev 
20738)
+++ trunk/Jmol/src/org/jmol/viewer/JC.java      2015-08-28 15:13:16 UTC (rev 
20739)
@@ -1032,22 +1032,22 @@
     return hAlignNames[(align >> TEXT_ALIGN_SHIFT) & 3];
   }
   
-  public static final int SMILES_EXPLICIT_H               = 0x001;
-  public static final int SMILES_TOPOLOGY                 = 0x002;
-  public static final int SMILES_NOAROMATIC               = 0x004;
-  public static final int SMILES_BIO                      = 0x100;
-  public static final int SMILES_BIO_ALLOW_UNMACHED_RINGS = 0x101;
-  public static final int SMILES_BIO_CROSSLINK            = 0x102;
-  public static final int SMILES_BIO_COMMENT              = 0x104;
+  public static final int SMILES_TYPE_SMILES       = 0x1;
+  public static final int SMILES_TYPE_SMARTS       = 0x2;
   
-  public static final int SMILES_TYPE_SMILES       = 0x010000;
-  public static final int SMILES_TYPE_SMARTS       = 0x020000;
-  public static final int SMILES_MATCH_ALL         = 0x100000;
-  public static final int SMILES_MATCH_ONE         = 0x200000;
-  public static final int SMILES_RETURN_FIRST      = 0x400000;
+  public static final int SMILES_MATCH_ALL         = 0x10;
+  public static final int SMILES_MATCH_ONE         = 0x20;
+  public static final int SMILES_RETURN_FIRST      = 0x40;
 
-
-
+  public static final int SMILES_EXPLICIT_H               = 0x00100;
+  public static final int SMILES_TOPOLOGY                 = 0x00200;
+  public static final int SMILES_NOAROMATIC               = 0x00400;
+  public static final int SMILES_BIO                      = 0x10000;
+  public static final int SMILES_BIO_ALLOW_UNMACHED_RINGS = 0x10100;
+  public static final int SMILES_BIO_CROSSLINK            = 0x10200;
+  public static final int SMILES_BIO_COMMENT              = 0x10400;
+  public static final int SMILES_ATOM_COMMENT             = 0x20000;
+  
   public static final int JSV_NOT = -1;
   public static final int JSV_SEND_JDXMOL = 0;
   public static final int JSV_SETPEAKS = 7;
@@ -1079,4 +1079,8 @@
 
   public static String READER_NOT_FOUND = "File reader was not found:";
 
+  public static boolean checkFlag(int flags, int flag) {
+    return (flags & flag) == flag;
+  }
+
 }

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-08-26 14:39:24 UTC 
(rev 20738)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-08-28 15:13:16 UTC 
(rev 20739)
@@ -60,8 +60,12 @@
 TODO: Rolf's errors in Safari due to move + zoomto
 
 
+Jmol.___JmolVersion="14.3.16_2015.08.28"
+
+new feature: Gaussian fchk reader reads vibrational modes 
+-- Gaussian command deck must include Freq=(SaveNormalModes,Raman,VibRot)
  
-Jmol.___JmolVersion="14.3.16_2015.08.26"
+JmolVersion="14.3.16_2015.08.26"
 
 new feature: SMARTS conformational search no longer limited to one range. 
   -- example:

Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-08-26 14:39:24 UTC (rev 
20738)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-08-28 15:13:16 UTC (rev 
20739)
@@ -8620,7 +8620,7 @@
 
   @Override
   public String getSmiles(BS bs) throws Exception {
-    return getSmilesOpt(bs, -1, -1, 0);
+    return getSmilesOpt(bs, -1, -1, Logger.debugging ? JC.SMILES_ATOM_COMMENT 
: 0);
   }
 
   /**

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to