Revision: 20968
          http://sourceforge.net/p/jmol/code/20968
Author:   hansonr
Date:     2016-02-28 01:43:05 +0000 (Sun, 28 Feb 2016)
Log Message:
-----------
Jmol.___JmolVersion="14.4.3_2016.02.28"

bug fix: cyclic peptides do not complete loop for cartoons, backbone, etc.

Modified Paths:
--------------
    branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioPolymer.java
    branches/v14_4/Jmol/src/org/jmol/renderbio/BackboneRenderer.java
    branches/v14_4/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java
    branches/v14_4/Jmol/src/org/jmol/shapebio/Backbone.java
    branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java
    trunk/Jmol/src/org/jmol/renderbio/BackboneRenderer.java
    trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java
    trunk/Jmol/src/org/jmol/shapebio/Backbone.java
    trunk/Jmol/src/org/jmol/viewer/Jmol.properties

Modified: branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioPolymer.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioPolymer.java        
2016-02-27 20:23:18 UTC (rev 20967)
+++ branches/v14_4/Jmol/src/org/jmol/modelsetbio/BioPolymer.java        
2016-02-28 01:43:05 UTC (rev 20968)
@@ -81,6 +81,8 @@
   protected final static int TYPE_NUCLEIC = 2;
   protected final static int TYPE_CARBOHYDRATE = 3;
 
+  public int cyclicFlag;
+  
   protected void set(Monomer[] monomers) {
     this.monomers = monomers;
     monomerCount = monomers.length;
@@ -483,4 +485,9 @@
     return type;
   }
 
+  public boolean isCyclic() { // Jmol 14.5.3
+    return ((cyclicFlag == 0 ? (cyclicFlag = (monomerCount >= 4 && monomers[0]
+        .isConnectedAfter(monomers[monomerCount - 1])) ? 1 : -1) : cyclicFlag) 
== 1);
+  }
+
 }

Modified: branches/v14_4/Jmol/src/org/jmol/renderbio/BackboneRenderer.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/renderbio/BackboneRenderer.java    
2016-02-27 20:23:18 UTC (rev 20967)
+++ branches/v14_4/Jmol/src/org/jmol/renderbio/BackboneRenderer.java    
2016-02-28 01:43:05 UTC (rev 20968)
@@ -45,12 +45,15 @@
     boolean showSteps = vwr.getBoolean(T.backbonesteps)
         && bioShape.bioPolymer.isNucleic();
     isDataFrame = vwr.ms.isJmolDataFrameForModel(bioShape.modelIndex);
+    int n = monomerCount;
+    Atom[] atoms = ms.at;
     for (int i = bsVisible.nextSetBit(0); i >= 0; i = bsVisible
         .nextSetBit(i + 1)) {
-      Atom atomA = ms.at[leadAtomIndices[i]];
+      Atom atomA = atoms[leadAtomIndices[i]];
       short cA = colixes[i];
       mad = mads[i];
-      drawSegment(atomA, ms.at[leadAtomIndices[i + 1]], cA, colixes[i + 1], 
100, checkPass2);
+      int i1 = (i + 1) % n;
+      drawSegment(atomA, atoms[leadAtomIndices[i1]], cA, colixes[i1], 100, 
checkPass2);
       if (showSteps) {
         NucleicMonomer g = (NucleicMonomer) monomers[i];
         Lst<BasePair> bps = g.getBasePairs();
@@ -58,7 +61,7 @@
           for (int j = bps.size(); --j >= 0;) {
             int iAtom = bps.get(j).getPartnerAtom(g);
             if (iAtom > i)
-              drawSegment(atomA, ms.at[iAtom], cA, cA, 1000, checkPass2);
+              drawSegment(atomA, atoms[iAtom], cA, cA, 1000, checkPass2);
           }
         }
       }

Modified: branches/v14_4/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java    
2016-02-27 20:23:18 UTC (rev 20967)
+++ branches/v14_4/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java    
2016-02-28 01:43:05 UTC (rev 20968)
@@ -85,6 +85,7 @@
   protected boolean wireframeOnly;
   private boolean needTranslucent;
   JmolBioMeshRenderer meshRenderer;
+  BioShape bioShape;
   
   protected abstract void renderBioShape(BioShape bioShape);
 
@@ -161,12 +162,13 @@
 
     BioShapeCollection mps = (BioShapeCollection) shape;
     for (int c = mps.bioShapes.length; --c >= 0;) {
-      BioShape bioShape = mps.getBioShape(c);
+      bioShape = mps.getBioShape(c);
       if ((bioShape.modelVisibilityFlags & myVisibilityFlag) == 0)
         continue;
       if (bioShape.monomerCount >= 2 && initializePolymer(bioShape)) {
         if (meshRenderer != null)
           meshRenderer.initBS();    
+        isCyclic = bioShape.bioPolymer.isCyclic();
         renderBioShape(bioShape);
         if (meshRenderer != null)
           meshRenderer.renderMeshes();
@@ -304,12 +306,21 @@
   short madBeg, madMid, madEnd;
   short colixBack;
   private BS reversed;
+  private boolean isCyclic;
 
   void setNeighbors(int i) {
-    iPrev = Math.max(i - 1, 0);
-    iNext = Math.min(i + 1, monomerCount);
-    iNext2 = Math.min(i + 2, monomerCount);
-    iNext3 = Math.min(i + 3, monomerCount);
+    if (isCyclic) {
+      i += monomerCount;
+      iPrev = (i - 1) % monomerCount;
+      iNext = (i + 1) % monomerCount;
+      iNext2 = (i + 2) % monomerCount;
+      iNext3 = (i + 3) % monomerCount;
+    } else {
+      iPrev = Math.max(i - 1, 0);
+      iNext = Math.min(i + 1, monomerCount);
+      iNext2 = Math.min(i + 2, monomerCount);
+      iNext3 = Math.min(i + 3, monomerCount);
+    }
   }
 
   protected boolean setColix(short colix) {

Modified: branches/v14_4/Jmol/src/org/jmol/shapebio/Backbone.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/shapebio/Backbone.java     2016-02-27 
20:23:18 UTC (rev 20967)
+++ branches/v14_4/Jmol/src/org/jmol/shapebio/Backbone.java     2016-02-28 
01:43:05 UTC (rev 20968)
@@ -73,9 +73,10 @@
       if (bioShape.bsSizeSet == null)
         bioShape.bsSizeSet = new BS();
       bioShape.isActive = true;
-      for (int i = bioShape.monomerCount - 1; --i >= 0;) {
+      int n = bioShape.monomerCount;
+      for (int i = n - (bioShape.bioPolymer.isCyclic() ? 0 : 1); --i >= 0;) {
         int index1 = atomIndices[i];
-        int index2 = atomIndices[i + 1];
+        int index2 = atomIndices[(i + 1) % n];
         boolean isAtom1 = bsSelected.get(index1);
         boolean isAtom2 = bsSelected.get(index2);
         if (isAtom1 && isAtom2 

Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties     2016-02-27 
20:23:18 UTC (rev 20967)
+++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties     2016-02-28 
01:43:05 UTC (rev 20968)
@@ -8,7 +8,11 @@
 # see also http://chemapps.stolaf.edu/jmol/zip for daily updates
        
 
-Jmol.___JmolVersion="14.4.3_2016.02.27"
+Jmol.___JmolVersion="14.4.3_2016.02.28"
+
+bug fix: cyclic peptides do not complete loop for cartoons, backbone, etc.
+
+JmolVersion="14.4.3_2016.02.27"
 released
 
 bug fix: [function:"yyy",Function:"zzz"] fails to retain key capitalization 
after first entry for special names

Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java 2016-02-27 20:23:18 UTC 
(rev 20967)
+++ trunk/Jmol/src/org/jmol/modelsetbio/BioPolymer.java 2016-02-28 01:43:05 UTC 
(rev 20968)
@@ -81,6 +81,8 @@
   protected final static int TYPE_NUCLEIC = 2;
   protected final static int TYPE_CARBOHYDRATE = 3;
 
+  public int cyclicFlag;
+  
   protected void set(Monomer[] monomers) {
     this.monomers = monomers;
     monomerCount = monomers.length;
@@ -483,4 +485,9 @@
     return type;
   }
 
+  public boolean isCyclic() { // Jmol 14.5.3
+    return ((cyclicFlag == 0 ? (cyclicFlag = (monomerCount >= 4 && monomers[0]
+        .isConnectedAfter(monomers[monomerCount - 1])) ? 1 : -1) : cyclicFlag) 
== 1);
+  }
+
 }

Modified: trunk/Jmol/src/org/jmol/renderbio/BackboneRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderbio/BackboneRenderer.java     2016-02-27 
20:23:18 UTC (rev 20967)
+++ trunk/Jmol/src/org/jmol/renderbio/BackboneRenderer.java     2016-02-28 
01:43:05 UTC (rev 20968)
@@ -45,12 +45,15 @@
     boolean showSteps = vwr.getBoolean(T.backbonesteps)
         && bioShape.bioPolymer.isNucleic();
     isDataFrame = vwr.ms.isJmolDataFrameForModel(bioShape.modelIndex);
+    int n = monomerCount;
+    Atom[] atoms = ms.at;
     for (int i = bsVisible.nextSetBit(0); i >= 0; i = bsVisible
         .nextSetBit(i + 1)) {
-      Atom atomA = ms.at[leadAtomIndices[i]];
+      Atom atomA = atoms[leadAtomIndices[i]];
       short cA = colixes[i];
       mad = mads[i];
-      drawSegment(atomA, ms.at[leadAtomIndices[i + 1]], cA, colixes[i + 1], 
100, checkPass2);
+      int i1 = (i + 1) % n;
+      drawSegment(atomA, atoms[leadAtomIndices[i1]], cA, colixes[i1], 100, 
checkPass2);
       if (showSteps) {
         NucleicMonomer g = (NucleicMonomer) monomers[i];
         Lst<BasePair> bps = g.getBasePairs();
@@ -58,7 +61,7 @@
           for (int j = bps.size(); --j >= 0;) {
             int iAtom = bps.get(j).getPartnerAtom(g);
             if (iAtom > i)
-              drawSegment(atomA, ms.at[iAtom], cA, cA, 1000, checkPass2);
+              drawSegment(atomA, atoms[iAtom], cA, cA, 1000, checkPass2);
           }
         }
       }

Modified: trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java
===================================================================
--- trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java     2016-02-27 
20:23:18 UTC (rev 20967)
+++ trunk/Jmol/src/org/jmol/renderbio/BioShapeRenderer.java     2016-02-28 
01:43:05 UTC (rev 20968)
@@ -85,6 +85,7 @@
   protected boolean wireframeOnly;
   private boolean needTranslucent;
   JmolBioMeshRenderer meshRenderer;
+  BioShape bioShape;
   
   protected abstract void renderBioShape(BioShape bioShape);
 
@@ -161,12 +162,13 @@
 
     BioShapeCollection mps = (BioShapeCollection) shape;
     for (int c = mps.bioShapes.length; --c >= 0;) {
-      BioShape bioShape = mps.getBioShape(c);
+      bioShape = mps.getBioShape(c);
       if ((bioShape.modelVisibilityFlags & myVisibilityFlag) == 0)
         continue;
       if (bioShape.monomerCount >= 2 && initializePolymer(bioShape)) {
         if (meshRenderer != null)
           meshRenderer.initBS();    
+        isCyclic = bioShape.bioPolymer.isCyclic();
         renderBioShape(bioShape);
         if (meshRenderer != null)
           meshRenderer.renderMeshes();
@@ -304,12 +306,21 @@
   short madBeg, madMid, madEnd;
   short colixBack;
   private BS reversed;
+  private boolean isCyclic;
 
   void setNeighbors(int i) {
-    iPrev = Math.max(i - 1, 0);
-    iNext = Math.min(i + 1, monomerCount);
-    iNext2 = Math.min(i + 2, monomerCount);
-    iNext3 = Math.min(i + 3, monomerCount);
+    if (isCyclic) {
+      i += monomerCount;
+      iPrev = (i - 1) % monomerCount;
+      iNext = (i + 1) % monomerCount;
+      iNext2 = (i + 2) % monomerCount;
+      iNext3 = (i + 3) % monomerCount;
+    } else {
+      iPrev = Math.max(i - 1, 0);
+      iNext = Math.min(i + 1, monomerCount);
+      iNext2 = Math.min(i + 2, monomerCount);
+      iNext3 = Math.min(i + 3, monomerCount);
+    }
   }
 
   protected boolean setColix(short colix) {

Modified: trunk/Jmol/src/org/jmol/shapebio/Backbone.java
===================================================================
--- trunk/Jmol/src/org/jmol/shapebio/Backbone.java      2016-02-27 20:23:18 UTC 
(rev 20967)
+++ trunk/Jmol/src/org/jmol/shapebio/Backbone.java      2016-02-28 01:43:05 UTC 
(rev 20968)
@@ -73,9 +73,10 @@
       if (bioShape.bsSizeSet == null)
         bioShape.bsSizeSet = new BS();
       bioShape.isActive = true;
-      for (int i = bioShape.monomerCount - 1; --i >= 0;) {
+      int n = bioShape.monomerCount;
+      for (int i = n - (bioShape.bioPolymer.isCyclic() ? 0 : 1); --i >= 0;) {
         int index1 = atomIndices[i];
-        int index2 = atomIndices[i + 1];
+        int index2 = atomIndices[(i + 1) % n];
         boolean isAtom1 = bsSelected.get(index1);
         boolean isAtom2 = bsSelected.get(index2);
         if (isAtom1 && isAtom2 

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2016-02-27 20:23:18 UTC 
(rev 20967)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2016-02-28 01:43:05 UTC 
(rev 20968)
@@ -65,8 +65,12 @@
 TODO: isosurface molecular has an issue with 2gb1
 TODO: slab SET will not be rendered correctly when exported because 
tm.transformPoint
 
-Jmol.___JmolVersion="14.5.3_2016.02.27"
+Jmol.___JmolVersion="14.5.3_2016.02.28"
 
+bug fix: cyclic peptides do not complete loop for cartoons, backbone, etc.
+
+JmolVersion="14.5.3_2016.02.27"
+
 bug fix: [function:"yyy",Function:"zzz"] fails to retain key capitalization 
after first entry for special names
 bug fix: (JavaScript only) polyhedra not saved in state
 bug fix: (Applet) broken image in coverImage

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


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to