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