Revision: 21604
          http://sourceforge.net/p/jmol/code/21604
Author:   hansonr
Date:     2017-05-17 14:10:57 +0000 (Wed, 17 May 2017)
Log Message:
-----------
CIP adds helicene chirality (AY-236.32, AY-236.33); validated using CCDC 
HEXHEL02 HEXHEL03 HEXHEL04 ODAGOS ODAHAF

Modified Paths:
--------------
    trunk/Jmol/src/org/jmol/symmetry/CIPChirality.java
    trunk/Jmol/src/org/jmol/symmetry/Symmetry.java

Modified: trunk/Jmol/src/org/jmol/symmetry/CIPChirality.java
===================================================================
--- trunk/Jmol/src/org/jmol/symmetry/CIPChirality.java  2017-05-15 03:07:29 UTC 
(rev 21603)
+++ trunk/Jmol/src/org/jmol/symmetry/CIPChirality.java  2017-05-17 14:10:57 UTC 
(rev 21604)
@@ -28,7 +28,7 @@
  * Yerin, ACD/Labs (Moscow).
  * 
  * Mikko Vainio also supplied a 64-compound testing suite (MV-64), which is
- * available on SourceForge in the Jmol-datafiles directory. 
+ * available on SourceForge in the Jmol-datafiles directory.
  * (https://sourceforge.net/p/jmol/code/HEAD/tree/trunk/Jmol-datafiles/cip).
  * 
  * Additional thanks to the IUPAC Blue Book Revision project, specifically
@@ -74,33 +74,53 @@
  * 
  * 4/6/17 Introduced in Jmol 14.12.0; validated for Rules 1 and 2 in Jmol
  * 14.13.2;
- *  
- * E/Z added 14.14.1; 
  * 
- * 4/27/17 Ruled 3-5 preliminary version 14.15.1 
+ * E/Z added 14.14.1;
  * 
+ * 4/27/17 Ruled 3-5 preliminary version 14.15.1
+ * 
  * 4/28/17 Validated for 146 compounds, including imines and diazines, sulfur,
- * phosphorus 
+ * phosphorus
  * 
- * 4/29/17 validated for 160 compounds, including M/P, m/p (axial
- * chirality for biaryls and odd-number cumulenes) 
+ * 4/29/17 validated for 160 compounds, including M/P, m/p (axial chirality for
+ * biaryls and odd-number cumulenes)
  * 
- * 5/02/17 validated for 161
- * compounds, including M/P, m/p (axial chirality for biaryls and odd-number
- * cumulenes) 
+ * 5/02/17 validated for 161 compounds, including M/P, m/p (axial chirality for
+ * biaryls and odd-number cumulenes)
  * 
  * 5/06/16 validated for 236 compound set AY-236.
  * 
- * 5/13/16 Jmol 14.15.4. algorithm simplified; validated for mixed Rule 4b 
systems
- * involving auxiliary R/S, M/P, and seqCis/seqTrans; 959 lines
+ * 5/13/16 Jmol 14.15.4. algorithm simplified; validated for mixed Rule 4b
+ * systems involving auxiliary R/S, M/P, and seqCis/seqTrans; 959 lines
  * 
- * 5/14/16 Jmol 14.15.5. trimmed up and documented; no need for lone pairs; 
948 lines
+ * 5/14/16 Jmol 14.15.5. trimmed up and documented; no need for lone pairs; 948
+ * lines
  * 
+ * 5/17/16 Jmol 14.15.5. adds helicene M/P chirality; validated using CCDC
+ * structures HEXHEL02 HEXHEL03 HEXHEL04 ODAGOS ODAHAF
+ * 
  * NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! 
NOTE!
  * 
- * Added logic to Rule 1b: The root distance for a Kekule-ambiguous duplicate 
atom is
- * its own sphere, not the sphere of its duplicated atom.
+ * Added logic to Rule 1b: The root distance for a Kekule-ambiguous duplicate
+ * atom is its own sphere, not the sphere of its duplicated atom.
  * 
+ * Stated more precisely:
+ * 
+ * Proposed amended Rule 1:
+ * 
+ * (1a) higher atomic number precedes lower;
+ * 
+ * (1b) in comparing two duplicate nodes, lower root distance precedes higher
+ * root distance, where "root distance" is defined:
+ * 
+ * (i) in the case of a duplicate atom for which the atomic number is averaged
+ * over two or more atoms in applying Rule 1a, the distance from the duplicate
+ * node itself to the root node; and
+ * 
+ * (ii) in all other cases, the distance of its corresponding nonduplicated 
atom
+ * node to the root node.
+ * 
+ * 
  * Rationale: Giving the distance of the duplicated atom introduces a Kekule
  * bias, which is not acceptable.
  * 
@@ -333,7 +353,8 @@
   Lst<BS> lstSmallRings = new Lst<BS>();
   
   /**
-   * don't do this atom again (atropisomer)
+   * the aromatic atoms connected by a nonaromatic single bond
+   * smarts("a-a")
    * 
    */
   BS bsAtropisomeric;
@@ -381,8 +402,10 @@
    *        bit set of all atoms to process
    * @param bsAtropisomeric
    *        bit set of all biphenyl-like connections
+   * @param bsHelixM aromatic atoms at the end of a negative helical turn; 
smarts("A{a}(.t:-10,-40)a(.t:-10,-40)aaa")
+   * @param bsHelixP aromatic atoms at the end of a positive helical turn; 
smarts("A{a}(.t:10,40)a(.t:10,40)aaa")
    */
-  public void getChiralityForAtoms(Node[] atoms, BS bsAtoms, BS 
bsAtropisomeric) {
+  public void getChiralityForAtoms(Node[] atoms, BS bsAtoms, BS 
bsAtropisomeric, BS bsHelixM, BS bsHelixP) {
     if (bsAtoms.isEmpty())
       return;
     init();
@@ -419,7 +442,22 @@
       if (lstSmallRings.size() > 0 && lstEZ.size() > 0)
         clearSmallRingEZ(atoms, lstEZ);
     }
+    
+    // add helical chiralities
 
+    if (bsHelixM != null) 
+      for (int i = bsHelixM.nextSetBit(0); i >= 0; i = bsHelixM.nextSetBit(i + 
1))
+        atoms[i].setCIPChirality(STEREO_M);
+
+
+    if (bsHelixM != null) 
+      for (int i = bsHelixM.nextSetBit(0); i >= 0; i = bsHelixM.nextSetBit(i + 
1))
+        atoms[i].setCIPChirality(STEREO_M);
+
+    if (bsHelixP != null) 
+      for (int i = bsHelixP.nextSetBit(0); i >= 0; i = bsHelixP.nextSetBit(i + 
1))
+        atoms[i].setCIPChirality(STEREO_P);
+
     if (Logger.debugging) {
       Logger.info("sp2-aromatic = " + bsKekuleAmbiguous);
       Logger.info("smallRings = " + PT.toJSON(null,lstSmallRings));

Modified: trunk/Jmol/src/org/jmol/symmetry/Symmetry.java
===================================================================
--- trunk/Jmol/src/org/jmol/symmetry/Symmetry.java      2017-05-15 03:07:29 UTC 
(rev 21603)
+++ trunk/Jmol/src/org/jmol/symmetry/Symmetry.java      2017-05-17 14:10:57 UTC 
(rev 21604)
@@ -795,8 +795,15 @@
   @Override
   public void calculateCIPChiralityForAtoms(Viewer vwr, BS bsAtoms) {
     CIPChirality cip = getCIPChirality(vwr);
-    BS bsAtropisomer = vwr.getAtomBitSet("smarts('a-a')");
-    cip.getChiralityForAtoms(vwr.ms.at, bsAtoms, bsAtropisomer);
+    BS bsAtropisomer = null, bsHelixM = null, bsHelixP = null;
+    try {
+      bsAtropisomer = vwr.getSmartsMatch("a-a", bsAtoms);
+      bsHelixM = vwr.getSmartsMatch("A{a}(.t:-10,-40)a(.t:-10,-40)aaa", 
bsAtoms);
+      bsHelixP = vwr.getSmartsMatch("A{a}(.t:10,40)a(.t:10,40)aaa", bsAtoms);
+    } catch (Exception e) {
+     // ignore
+    }
+    cip.getChiralityForAtoms(vwr.ms.at, bsAtoms, bsAtropisomer, bsHelixM, 
bsHelixP);
   }
   
   CIPChirality cip;

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


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to