Revision: 20483 http://sourceforge.net/p/jmol/code/20483 Author: hansonr Date: 2015-05-07 11:51:43 +0000 (Thu, 07 May 2015) Log Message: ----------- JmolVersion="14.3.13_2015.05.07"
bug fix: isolated bio groups such as AMP, which are not part of biopolymers, can result in crashes when colored or queried about their parameters Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java trunk/Jmol/src/org/jmol/modelsetbio/Monomer.java trunk/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java trunk/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java 2015-05-07 03:08:03 UTC (rev 20482) +++ trunk/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java 2015-05-07 11:51:43 UTC (rev 20483) @@ -226,6 +226,8 @@ } protected Quat getQuaternionAlpha(char qType) { + if (monomerIndex < 0) + return null; /* * also NucleicMonomer, AminoMonomer * Modified: trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java 2015-05-07 03:08:03 UTC (rev 20482) +++ trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java 2015-05-07 11:51:43 UTC (rev 20483) @@ -208,7 +208,7 @@ public boolean getNHPoint(P3 aminoHydrogenPoint, V3 vNH, boolean jmolHPoint, boolean dsspIgnoreHydrogens) { - if (monomerIndex == 0 || groupID == JC.GROUPID_PROLINE) + if (monomerIndex <= 0 || groupID == JC.GROUPID_PROLINE) return false; Atom nitrogenPoint = getNitrogenAtom(); P3 nhPoint = getNitrogenHydrogenPoint(); @@ -252,6 +252,8 @@ @Override P3 getQuaternionFrameCenter(char qType) { + if (monomerIndex < 0) + return null; switch (qType) { default: case 'a': @@ -278,6 +280,8 @@ @Override public Quat getQuaternion(char qType) { + if (monomerIndex < 0) + return null; /* * also NucleicMonomer * Modified: trunk/Jmol/src/org/jmol/modelsetbio/Monomer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/Monomer.java 2015-05-07 03:08:03 UTC (rev 20482) +++ trunk/Jmol/src/org/jmol/modelsetbio/Monomer.java 2015-05-07 11:51:43 UTC (rev 20483) @@ -44,6 +44,13 @@ import java.util.Map; +/** + * A class to maintain information about biomolecule groups that are (potentially) + * part of biopolymers -- peptides, nucleic acid strands, or complex carbohydrates. + * Note that it is possible that a monomer is created but is not part of a BioPolymer. + * + * + */ public abstract class Monomer extends Group { @@ -58,6 +65,8 @@ protected byte[] offsets; + int monomerIndex = -1; + protected static boolean have(byte[] offsets, byte n) { return (offsets[n] & 0xFF) != 0xFF; } @@ -76,26 +85,24 @@ leadAtomIndex = firstAtomIndex + offset; } - int monomerIndex; - void setBioPolymer(BioPolymer polymer, int index) { - this.bioPolymer = polymer; + bioPolymer = polymer; monomerIndex = index; } @Override public int getSelectedMonomerCount() { - return bioPolymer.getSelectedMonomerCount(); + return (bioPolymer == null ? 0 : bioPolymer.getSelectedMonomerCount()); } @Override public int getSelectedMonomerIndex() { - return (monomerIndex >= 0 && bioPolymer.isMonomerSelected(monomerIndex) ? monomerIndex : -1); + return (bioPolymer == null || !bioPolymer.isMonomerSelected(monomerIndex) ? -1 : monomerIndex); } @Override public int getBioPolymerLength() { - return bioPolymer == null ? 0 : bioPolymer.monomerCount; + return (bioPolymer == null ? 0 : bioPolymer.monomerCount); } @Override @@ -105,19 +112,21 @@ @Override public int getAtomIndex(String name, int offset) { - Group[] groups = bioPolymer.monomers; - int ipt = monomerIndex + offset; - if (ipt >= 0 && ipt < groups.length) { - Group m = groups[ipt]; - if (offset == 1 && !m.isConnectedPrevious()) - return -1; - if ("0".equals(name)) - return m.leadAtomIndex; - Atom[] atoms = chain.model.ms.at; - // this is OK -- only used for finding special atom by name - for (int i = m.firstAtomIndex; i <= m.lastAtomIndex; i++) - if (name == null || name.equalsIgnoreCase(atoms[i].getAtomName())) - return i; + if (bioPolymer != null) { + Group[] groups = bioPolymer.monomers; + int ipt = monomerIndex + offset; + if (ipt >= 0 && ipt < groups.length) { + Group m = groups[ipt]; + if (offset == 1 && !m.isConnectedPrevious()) + return -1; + if ("0".equals(name)) + return m.leadAtomIndex; + Atom[] atoms = chain.model.ms.at; + // this is OK -- only used for finding special atom by name + for (int i = m.firstAtomIndex; i <= m.lastAtomIndex; i++) + if (name == null || name.equalsIgnoreCase(atoms[i].getAtomName())) + return i; + } } return -1; } @@ -360,6 +369,8 @@ } protected Object getHelixData2(int tokType, char qType, int mStep) { + if (monomerIndex < 0) + return null; int iPrev = monomerIndex - mStep; Monomer prev = (mStep < 1 || monomerIndex <= 0 ? null : bioPolymer.monomers[iPrev]); @@ -478,6 +489,8 @@ @Override public float getGroupParameter(int tok) { + if (bioPolymer == null) + return 0; if (!bioPolymer.haveParameters) bioPolymer.calcParameters(); switch (tok) { Modified: trunk/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java 2015-05-07 03:08:03 UTC (rev 20482) +++ trunk/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java 2015-05-07 11:51:43 UTC (rev 20483) @@ -385,6 +385,8 @@ @Override public Quat getQuaternion(char qType) { + if (bioPolymer == null) + return null; // quaternionFrame 'c' from // Sarver M, Zirbel CL, Stombaugh J, Mokdad A, Leontis NB. // FR3D: finding local and composite recurrent structural motifs in RNA 3D structures. @@ -547,6 +549,7 @@ } private Lst<BasePair> bps; + public void addBasePair(BasePair bp) { if (bps == null) bps = new Lst<BasePair>(); @@ -559,8 +562,12 @@ group1 = g; } + /** + * + * @return list of base pairs associated with this monomer, possibly more than one if noncanonical + */ public Lst<BasePair> getBasePairs() { - if (!((NucleicPolymer) bioPolymer).isDssrSet) + if (bioPolymer != null && !((NucleicPolymer) bioPolymer).isDssrSet) bioPolymer.model.ms.vwr.getAnnotationParser().setAllDSSRParametersForModel(bioPolymer.model.ms.vwr, bioPolymer.model.modelIndex); return bps; } Modified: trunk/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java 2015-05-07 03:08:03 UTC (rev 20482) +++ trunk/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java 2015-05-07 11:51:43 UTC (rev 20483) @@ -131,7 +131,7 @@ //vA = ptP(i+1) - ptP //vB = ptP(i-1) - ptP int i = monomerIndex; - if (i == 0 || i >= bioPolymer.monomerCount - 1) + if (i <= 0 || i >= bioPolymer.monomerCount - 1) return null; P3 ptP = bioPolymer.monomers[i].getAtomFromOffsetIndex(P); P3 ptA, ptB; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-05-07 03:08:03 UTC (rev 20482) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-05-07 11:51:43 UTC (rev 20483) @@ -14,6 +14,12 @@ TODO: remove HTML5 dependency on synchronous file loading (check SCRIPT command for problems) +JmolVersion="14.3.13_2015.05.07" + +bug fix: isolated bio groups such as AMP, which are not part of biopolymers, can result in crashes + when colored or queried about their parameters + + Jmol.___JmolVersion="14.3.13_2015.05.06" new feature: "drilling" in associative arrays for sub arrays with a given property (Rolf Huehne) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ Jmol-commits mailing list Jmol-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-commits