From: <ha...@us...> - 2015-05-07 11:53:08
|
Revision: 20485 http://sourceforge.net/p/jmol/code/20485 Author: hansonr Date: 2015-05-07 11:53:05 +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 (Hiroufmi Suzuki) Modified Paths: -------------- branches/v14_2/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java branches/v14_2/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java branches/v14_2/Jmol/src/org/jmol/modelsetbio/Monomer.java branches/v14_2/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java branches/v14_2/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties Modified: branches/v14_2/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java =================================================================== --- branches/v14_2/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java 2015-05-07 11:52:58 UTC (rev 20484) +++ branches/v14_2/Jmol/src/org/jmol/modelsetbio/AlphaMonomer.java 2015-05-07 11:53:05 UTC (rev 20485) @@ -226,6 +226,8 @@ } protected Quat getQuaternionAlpha(char qType) { + if (monomerIndex < 0) + return null; /* * also NucleicMonomer, AminoMonomer * Modified: branches/v14_2/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java =================================================================== --- branches/v14_2/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java 2015-05-07 11:52:58 UTC (rev 20484) +++ branches/v14_2/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java 2015-05-07 11:53:05 UTC (rev 20485) @@ -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: branches/v14_2/Jmol/src/org/jmol/modelsetbio/Monomer.java =================================================================== --- branches/v14_2/Jmol/src/org/jmol/modelsetbio/Monomer.java 2015-05-07 11:52:58 UTC (rev 20484) +++ branches/v14_2/Jmol/src/org/jmol/modelsetbio/Monomer.java 2015-05-07 11:53:05 UTC (rev 20485) @@ -58,6 +58,8 @@ protected byte[] offsets; + int monomerIndex = -1; + protected static boolean have(byte[] offsets, byte n) { return (offsets[n] & 0xFF) != 0xFF; } @@ -76,26 +78,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 +105,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 +362,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 +482,8 @@ @Override public float getGroupParameter(int tok) { + if (bioPolymer == null) + return 0; if (!bioPolymer.haveParameters) bioPolymer.calcParameters(); switch (tok) { Modified: branches/v14_2/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java =================================================================== --- branches/v14_2/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java 2015-05-07 11:52:58 UTC (rev 20484) +++ branches/v14_2/Jmol/src/org/jmol/modelsetbio/NucleicMonomer.java 2015-05-07 11:53:05 UTC (rev 20485) @@ -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: branches/v14_2/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java =================================================================== --- branches/v14_2/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java 2015-05-07 11:52:58 UTC (rev 20484) +++ branches/v14_2/Jmol/src/org/jmol/modelsetbio/PhosphorusMonomer.java 2015-05-07 11:53:05 UTC (rev 20485) @@ -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: branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties 2015-05-07 11:52:58 UTC (rev 20484) +++ branches/v14_2/Jmol/src/org/jmol/viewer/Jmol.properties 2015-05-07 11:53:05 UTC (rev 20485) @@ -4,8 +4,13 @@ # THIS IS THE RELEASE BRANCH # BUG FIXES ONLY, PLEASE -Jmol.___JmolVersion="14.2.13_2015.05.05" +JmolVersion="14.2.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 + +JmolVersion="14.2.13_2015.05.05" + bug fix: set modifyStructureCallback does not work with "JmolScript:...." JmolVersion="14.2.13_2015.05.02" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |