Revision: 20474 http://sourceforge.net/p/jmol/code/20474 Author: hansonr Date: 2015-05-02 17:46:35 +0000 (Sat, 02 May 2015) Log Message: ----------- Jmol.___JmolVersion="14.3.13_2015.05.02"
bug fix: color atoms property vxyz crashes Jmol if no vibrations bug fix: with msCIF, select subsystem=1 does not select anything bug fix: vibrations in trajectories not animating (14.3.6_2014.08.14) Modified Paths: -------------- trunk/Jmol/src/javajs/api/GenericCifDataParser.java trunk/Jmol/src/javajs/util/CifDataParser.java trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java trunk/Jmol/src/org/jmol/adapter/readers/cif/MSCifRdr.java trunk/Jmol/src/org/jmol/g3d/CylinderRenderer.java trunk/Jmol/src/org/jmol/g3d/Graphics3D.java trunk/Jmol/src/org/jmol/g3d/LineRenderer.java trunk/Jmol/src/org/jmol/modelset/AtomCollection.java trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java trunk/Jmol/src/org/jmol/modelset/Model.java trunk/Jmol/src/org/jmol/modelset/ModelSet.java trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java trunk/Jmol/src/org/jmol/script/ScriptExpr.java trunk/Jmol/src/org/jmol/thread/VibrationThread.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/javajs/api/GenericCifDataParser.java =================================================================== --- trunk/Jmol/src/javajs/api/GenericCifDataParser.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/javajs/api/GenericCifDataParser.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -38,7 +38,7 @@ String toUnicode(String data); - void skipLoop() throws Exception; + String skipLoop(boolean doReport) throws Exception; String fixKey(String key); Modified: trunk/Jmol/src/javajs/util/CifDataParser.java =================================================================== --- trunk/Jmol/src/javajs/util/CifDataParser.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/javajs/util/CifDataParser.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -273,12 +273,24 @@ * @throws Exception */ @Override - public void skipLoop() throws Exception { + public String skipLoop(boolean doReport) throws Exception { String str; - while ((str = peekToken()) != null && str.charAt(0) == '_') - getTokenPeeked(); - while (getNextDataToken() != null) { + SB ret = (doReport ? new SB() : null); + int n = 0; + while ((str = peekToken()) != null && str.charAt(0) == '_') { + if (ret != null) + ret.append(str).append("\n"); + getTokenPeeked(); + n++; } + int m = 0; + while ((str = getNextDataToken()) != null) { + if (ret != null) + ret.append(str).append(" "); + if ((++m % n) == 0) + ret.append("\n"); + } + return (ret == null ? null : ret.toString()); } /** Modified: trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -193,7 +193,7 @@ if (key.startsWith("loop_")) { if (skipping) { parser.getTokenPeeked(); - parser.skipLoop(); + parser.skipLoop(false); } else { processLoopBlock(); } @@ -680,7 +680,7 @@ case 0: break; case -1: - parser.skipLoop(); + parser.skipLoop(false); //$FALL-THROUGH$ case 1: return; @@ -700,7 +700,7 @@ || key.startsWith("_symmetry_ssg_equiv")) { if (ignoreFileSymmetryOperators) { Logger.warn("ignoring file-based symmetry operators"); - parser.skipLoop(); + parser.skipLoop(false); } else { processSymmetryOperationsLoopBlock(); } @@ -724,7 +724,7 @@ addMore(); return; } - parser.skipLoop(); + parser.skipLoop(false); } protected boolean processSubclassLoopBlock() throws Exception { @@ -827,7 +827,7 @@ parseLoopParameters(atomTypeFields); for (int i = propertyCount; --i >= 0;) if (fieldOf[i] == NONE) { - parser.skipLoop(); + parser.skipLoop(false); return; } @@ -1014,7 +1014,7 @@ // no coordinates, but valuable information } else { // it is a different kind of _atom_site loop block - parser.skipLoop(); + parser.skipLoop(false); return false; } int modelField = fieldOf[MODEL_NO]; @@ -1025,7 +1025,7 @@ int modelNo = parseIntStr(field); if (modelNo != currentModelNo) { if (iHaveDesiredModel && asc.atomSetCount > 0) { - parser.skipLoop(); + parser.skipLoop(false); // but only this atom loop skipping = false; continuing = true; @@ -1451,7 +1451,7 @@ break; if (n < 0) { Logger.warn("required " + FAMILY_SGOP + " key not found"); - parser.skipLoop(); + parser.skipLoop(false); return; } n = 0; @@ -1556,7 +1556,7 @@ for (int i = propertyCount; --i >= 0;) if (propertyOf[i] != CCDC_GEOM_BOND_TYPE && fieldOf[i] == NONE) { Logger.warn("?que? missing property: " + geomBondFields[i]); - parser.skipLoop(); + parser.skipLoop(false); return; } Modified: trunk/Jmol/src/org/jmol/adapter/readers/cif/MSCifRdr.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cif/MSCifRdr.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/adapter/readers/cif/MSCifRdr.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -165,15 +165,15 @@ "*_displace_fourier_param_sin", // 15 "*_displace_fourier_param_modulus", "*_displace_fourier_param_phase", - "*_displace_special_func_atom_site_label", - "*_displace_special_func_sawtooth_ax", // 25 + "*_displace_special_func_atom_site_label", // 18 + "*_displace_special_func_sawtooth_ax", "*_displace_special_func_sawtooth_ay", "*_displace_special_func_sawtooth_az", "*_displace_special_func_sawtooth_c", "*_displace_special_func_sawtooth_w", "*_occ_fourier_atom_site_label", "*_occ_fourier_wave_vector_seq_id", - "*_occ_fourier_param_cos", // 20 + "*_occ_fourier_param_cos", // 26 "*_occ_fourier_param_sin", "*_occ_fourier_param_modulus", "*_occ_fourier_param_phase", @@ -271,11 +271,17 @@ */ public int processLoopBlock() throws Exception { CifReader cr = (CifReader) this.cr; - if (cr.key.equals("_cell_subsystem_code")) + String key = cr.key; + if (key.equals("_cell_subsystem_code")) return processSubsystemLoopBlock(); - if (!cr.key.startsWith("_cell_wave") && !cr.key.contains("fourier") - && !cr.key.contains("legendre") && !cr.key.contains("_special_func")) + + if (!key.startsWith("_cell_wave") && !key.contains("fourier") + && !key.contains("legendre") && !key.contains("_special_func")) { + if (key.contains("crenel_ortho")) + cr.appendLoadNote("WARNING: Orthogonalized non-Legendre functions not supported.\nThe following block has been ignored. Use Legendre functions instead.\n\n" + + cr.parser.skipLoop(true) + "=================================\n"); return 0; + } if (cr.asc.iSet < 0) cr.asc.newAtomSet(); cr.parseLoopParametersFor(CifReader.FAMILY_ATOM, modulationFields); @@ -341,35 +347,38 @@ type_id += field; break; case JANA_OCC_ABS_LABEL: - if (type_id == null) - type_id = "J_O"; + type_id = "J_O"; pt[0] = pt[2] = 1; - //$FALL-THROUGH$ + axis = "0"; + atomLabel = field; + break; case OCC_SPECIAL_LABEL: - if (type_id == null) - type_id = "O_0"; + type_id = "O_0"; axis = "0"; - //$FALL-THROUGH$ + atomLabel = field; + break; case DISP_SPEC_LABEL: - if (type_id == null) - type_id = "D_S"; - //$FALL-THROUGH$ + type_id = "D_S"; + axis = "0"; + atomLabel = field; + break; + case SPIN_SPEC_LABEL: + type_id = "M_T"; + axis = "0"; + atomLabel = field; + break; case LEG_DISP_LABEL: - if (type_id == null) - type_id = "D_L"; - //$FALL-THROUGH$ + type_id = "D_L"; + atomLabel = field; + break; case LEG_U_LABEL: - if (type_id == null) - type_id = "U_L"; - //$FALL-THROUGH$ + type_id = "U_L"; + atomLabel = field; + break; case LEG_OCC_LABEL: - if (type_id == null) - type_id = "O_L"; - //$FALL-THROUGH$ - case SPIN_SPEC_LABEL: - if (type_id == null) - type_id = "M_T"; - //$FALL-THROUGH$ + type_id = "O_L"; + atomLabel = field; + break; case FWV_DISP_LABEL: case FWV_OCC_LABEL: case FWV_SPIN_LABEL: @@ -481,6 +490,7 @@ if (!ok) continue; switch (type_id.charAt(0)) { + case 'C': case 'D': case 'O': case 'M': Modified: trunk/Jmol/src/org/jmol/g3d/CylinderRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/CylinderRenderer.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/g3d/CylinderRenderer.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -169,6 +169,11 @@ private P3 ptA0, ptB0; void renderBits(short colixA, short colixB, int screen, byte endcaps, int diameter, P3 ptA, P3 ptB) { + Graphics3D g = this.g3d; + if (diameter == 0 || diameter == 1) { + line3d.plotLineBits(g.getColorArgbOrGray(colixA), g.getColorArgbOrGray(colixB), ptA, ptB); + return; + } if (ptA0 == null) { ptA0 = new P3(); ptB0 = new P3(); @@ -183,7 +188,6 @@ int ixB = Math.round(ptB.x); int iyB = Math.round(ptB.y); int izB = Math.round(ptB.z); - Graphics3D g = this.g3d; int codeMinA = g.clipCode3(ixA - r, iyA - r, izA - r); int codeMaxA = g.clipCode3(ixA + r, iyA + r, izA + r); int codeMinB = g.clipCode3(ixB - r, iyB - r, izB - r); @@ -198,10 +202,6 @@ dxBf = ptB.x - ptA.x; dyBf = ptB.y - ptA.y; dzBf = ptB.z - ptA.z; - if (diameter == 0 || diameter == 1) { - line3d.plotLineClippedBits(g.getColorArgbOrGray(colixA), g.getColorArgbOrGray(colixB), ptA, ptB, clipped, 0, 0); - return; - } if (diameter > 0) { this.diameter = diameter; this.xAf = ptA.x; Modified: trunk/Jmol/src/org/jmol/g3d/Graphics3D.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/g3d/Graphics3D.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -1263,13 +1263,14 @@ @Override public void drawLineBits(short colixA, short colixB, P3 pointA, P3 pointB) { + // drawQuadBits, drawTriangleBits if (!setC(colixA)) colixA = 0; int argbA = argbCurrent; if (!setC(colixB)) colixB = 0; if (colixA != 0 || colixB != 0) - line3d.plotLineClippedBits(argbA, argbCurrent, pointA, pointB, true, 0, 0); + line3d.plotLineBits(argbA, argbCurrent, pointA, pointB); } @Override Modified: trunk/Jmol/src/org/jmol/g3d/LineRenderer.java =================================================================== --- trunk/Jmol/src/org/jmol/g3d/LineRenderer.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/g3d/LineRenderer.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -419,28 +419,41 @@ } } + void plotLineBits(int argbA, int argbB, P3 ptA, P3 ptB) { + if (ptA.z <= 1 || ptB.z <= 1) + return; + boolean clipped = true; + switch (getTrimmedLineBits(ptA, ptB)) { + case VISIBILITY_OFFSCREEN: + return; + case VISIBILITY_UNCLIPPED: + clipped = false; + break; + } + plotLineClippedBits(argbA, argbB, ptA, ptB, clipped, 0, 0); + } + void plotDashedLineBits(int argb, int run, int rise, P3 ptA, P3 ptB) { // measures, axes, bbcage only - boolean clipped = true; if (ptA.z <= 1 || ptB.z <= 1) return; - if (clipped) - switch (getTrimmedLineBits(ptA, ptB)) { - case VISIBILITY_OFFSCREEN: - return; - case VISIBILITY_UNCLIPPED: - clipped = false; - break; - default: - if (ptAtrimmed == null) { - ptAtrimmed = new P3(); - ptBtrimmed = new P3(); - } - ptAtrimmed.set(x1t, y1t, z1t); - ptBtrimmed.set(x2t, y2t, z2t); - ptA = ptAtrimmed; - ptB = ptBtrimmed; + boolean clipped = true; + switch (getTrimmedLineBits(ptA, ptB)) { + case VISIBILITY_OFFSCREEN: + return; + case VISIBILITY_UNCLIPPED: + clipped = false; + break; + default: + if (ptAtrimmed == null) { + ptAtrimmed = new P3(); + ptBtrimmed = new P3(); } + ptAtrimmed.set(x1t, y1t, z1t); + ptBtrimmed.set(x2t, y2t, z2t); + ptA = ptAtrimmed; + ptB = ptBtrimmed; + } plotLineClippedBits(argb, argb, ptA, ptB, clipped, run, rise); } @@ -669,7 +682,7 @@ } } - void plotLineClippedBits(int argb1, int argb2, P3 ptA, P3 ptB, boolean clipped, int run, + private void plotLineClippedBits(int argb1, int argb2, P3 ptA, P3 ptB, boolean clipped, int run, int rise) { // standard, dashed or not dashed -- isosurface mesh int[] zbuf = g3d.zbuf; @@ -683,7 +696,9 @@ int y = (int) ptA.y; int z = (int) ptA.z; int dx = (int) ptB.x - x; + int x2 = x + dx; int dy = (int) ptB.y - y; + int y2 = y + dy; int offset = y * width + x; int offsetMax = g3d.bufferSize; //boolean flipflop = (((x ^ y) & 1) != 0); @@ -716,8 +731,8 @@ // using x setRastAB(ptA.x, ptA.z, ptB.x, ptB.z); int twoDxAccumulatedYError = 0; - int n1 = Math.abs(x + dx - x2t) - 1; - int n2 = Math.abs(x + dx - x1t) - 1; + int n1 = Math.abs(x2 - x2t) - 1; + int n2 = Math.abs(x2 - x1t) - 1; for (int n = dx - 1, nMid = n / 2; --n >= n1;) { if (n == nMid) { argb = argb2; @@ -743,8 +758,8 @@ // using y setRastAB(ptA.y, ptA.z, ptB.y, ptB.z); int twoDyAccumulatedXError = 0; - int n1 = Math.abs(y + dy - y2t) - 1; - int n2 = Math.abs(y + dy - y1t) - 1; + int n1 = Math.abs(y2 - y2t) - 1; + int n2 = Math.abs(y2 - y1t) - 1; for (int n = dy - 1, nMid = n / 2; --n >= n1;) { if (n == nMid) { argb = argb2; Modified: trunk/Jmol/src/org/jmol/modelset/AtomCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/AtomCollection.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/modelset/AtomCollection.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -2170,7 +2170,7 @@ } return bs; case T.spec_alternate: - // could be PDB type file with UNK + // could be PDB type file with UNK or a modulated CIF file subsystem String spec = (String) specInfo; for (int i = ac; --i >= 0;) if (isAltLoc(at[i].altloc, spec)) Modified: trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/modelset/JmolBioModelSet.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -54,9 +54,6 @@ int getBioPolymerCountInModel(int modelIndex); - void getConformations(int modelIndex, int conformationIndex, - boolean doSet, BS bsAtoms, BS bsRet); - String getFullProteinStructureState(BS bsAtoms, int mode); BS getIdentifierOrNull(String identifier); Modified: trunk/Jmol/src/org/jmol/modelset/Model.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/Model.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/modelset/Model.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -227,6 +227,15 @@ return null; } + protected BS getConformationBS(int conformationIndex, BS bsSelected) { + if (conformationIndex > 0 && conformationIndex >= altLocCount) + return null; + BS bsConformation = ms.vwr.getModelUndeletedAtomsBitSet(modelIndex); + if (bsSelected != null) + bsConformation.and(bsSelected); + return (bsConformation.nextSetBit(0) < 0 ? null : bsConformation); + } + public void fixIndices(int modelIndex, int nAtomsDeleted, BS bsDeleted) { // also in BioModel fixIndicesM(modelIndex, nAtomsDeleted, bsDeleted); Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -1446,10 +1446,6 @@ return file * 1000000 + model; } - public int getAltLocCountInModel(int modelIndex) { - return am[modelIndex].altLocCount; - } - public int getChainCountInModelWater(int modelIndex, boolean countWater) { if (modelIndex < 0) { int chainCount = 0; @@ -1572,6 +1568,10 @@ ////////////// individual models //////////////// + public int getAltLocCountInModel(int modelIndex) { + return am[modelIndex].altLocCount; + } + public int getAltLocIndexInModel(int modelIndex, char alternateLocationID) { if (alternateLocationID == '\0') { return 0; @@ -1616,7 +1616,7 @@ public int getLastVibrationVector(int modelIndex, int tok) { if (vibrations != null) { Vibration v; - int a1 = (modelIndex < 0 || modelIndex >= mc - 1 ? ac : am[modelIndex + 1].firstAtomIndex); + int a1 = (modelIndex < 0 || isTrajectory(modelIndex) || modelIndex >= mc - 1 ? ac : am[modelIndex + 1].firstAtomIndex); int a0 = (modelIndex <= 0 ? 0 : am[modelIndex].firstAtomIndex); for (int i = a1; --i >= a0;) { if ((modelIndex < 0 || at[i].mi == modelIndex) @@ -3759,6 +3759,39 @@ return v.toArray(new Quat[v.size()]); } + public BS getConformation(int modelIndex, int conformationIndex, + boolean doSet, BS bsAtoms) { + BS bs = new BS(); + for (int i = mc; --i >= 0;) + if (i == modelIndex || modelIndex < 0) { + if (am[i].isBioModel) + ((BioModel) am[i]).getConformation(conformationIndex, doSet, bsAtoms, + bs); + else if (!doSet) + getSubsystem(i, conformationIndex, bsAtoms, bs); + } + return bs; + } + + private void getSubsystem(int modelIndex, int conformationIndex, BS bsAtoms, + BS bs) { + BS bsConformation = am[modelIndex].getConformationBS(conformationIndex, + bsAtoms); + if (bsConformation == null) + return; + if (conformationIndex >= 0) { + int nAltLocs = getAltLocCountInModel(modelIndex); + String altLocs = getAltLocListInModel(modelIndex); + BS bsTemp = new BS(); + for (int c = nAltLocs; --c >= 0;) + if (c != conformationIndex) + bsConformation.andNot(getAtomBitsMDa(T.spec_alternate, + altLocs.substring(c, c + 1), bsTemp)); + } + if (bsConformation.nextSetBit(0) >= 0) + bs.or(bsConformation); + } + ///// bio-only methods ///// public BS getSequenceBits(String specInfo, BS bs) { @@ -3783,13 +3816,6 @@ bioModelset.recalculatePoints(modelIndex); } - public BS getConformation(int modelIndex, int conformationIndex, boolean doSet, BS bsAtoms) { - BS bs = new BS(); - if (haveBioModels) - bioModelset.getConformations(modelIndex, conformationIndex, doSet, bsAtoms, bs); - return bs; - } - /** * These are not actual hydrogen bonds. They are N-O bonds in proteins and * nucleic acids The method is called by AminoPolymer and NucleicPolymer Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -786,15 +786,6 @@ return s; } - @Override - public void getConformations(int modelIndex, int conformationIndex, - boolean doSet, BS bsAtoms, BS bsRet) { - for (int i = ms.mc; --i >= 0;) - if (i == modelIndex || modelIndex < 0) - if (ms.am[i].isBioModel) - ((BioModel) ms.am[i]).getConformation(conformationIndex, doSet, bsAtoms, bsRet); - } - /** * @param conformationIndex * @param doSet @@ -802,21 +793,17 @@ * @param bsSelected */ public void getConformation(int conformationIndex, boolean doSet, BS bsSelected, BS bsRet) { - String altLocs = ms.getAltLocListInModel(modelIndex); - int nAltLocs = ms.getAltLocCountInModel(modelIndex); - if (conformationIndex > 0 && conformationIndex >= nAltLocs) + int nAltLocs = altLocCount; + BS bsConformation = getConformationBS(conformationIndex, bsSelected); + if (bsConformation == null) return; - BS bsConformation = vwr.getModelUndeletedAtomsBitSet(modelIndex); - if (bsSelected != null) - bsConformation.and(bsSelected); - if (bsConformation.nextSetBit(0) < 0) - return; if (conformationIndex >= 0) { if (nAltLocs > 0) for (int i = bioPolymerCount; --i >= 0;) bioPolymers[i].getConformation(bsConformation, conformationIndex); BS bs = new BS(); - for (int c = nAltLocs; --c >= 0;) + String altLocs = ms.getAltLocListInModel(modelIndex); + for (int c = altLocCount; --c >= 0;) if (c != conformationIndex) bsConformation.andNot(ms.getAtomBitsMDa(T.spec_alternate, altLocs.substring(c, c + 1), bs)); Modified: trunk/Jmol/src/org/jmol/script/ScriptExpr.java =================================================================== --- trunk/Jmol/src/org/jmol/script/ScriptExpr.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/script/ScriptExpr.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -1771,7 +1771,7 @@ T3 t = atom.atomPropertyTuple(vwr, tok, ptTemp); switch (minmaxtype) { case T.allfloat: - fout[i] = (pt == null ? -1 : t.length()); + fout[i] = (pt == null ? -1 : t == null ? 0 : t.length()); break; case T.all: vout.addLast(t == null ? Integer.valueOf(-1) : P3.newP(t)); Modified: trunk/Jmol/src/org/jmol/thread/VibrationThread.java =================================================================== --- trunk/Jmol/src/org/jmol/thread/VibrationThread.java 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/thread/VibrationThread.java 2015-05-02 17:46:35 UTC (rev 20474) @@ -71,7 +71,6 @@ } else { float t = (float) (elapsed % transformManager.vibrationPeriodMs) / transformManager.vibrationPeriodMs; -// t = 0.2f; transformManager.setVibrationT(t); vwr.refresh(3, "VibrationThread"); mode = (checkInterrupted(transformManager.vibrationThread) ? FINISH : MAIN); Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-04-30 20:25:08 UTC (rev 20473) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-05-02 17:46:35 UTC (rev 20474) @@ -14,8 +14,14 @@ TODO: remove HTML5 dependency on synchronous file loading (check SCRIPT command for problems) -Jmol.___JmolVersion="14.3.13_2015.04.30d" +Jmol.___JmolVersion="14.3.13_2015.05.02" +bug fix: color atoms property vxyz crashes Jmol if no vibrations +bug fix: with msCIF, select subsystem=1 does not select anything +bug fix: vibrations in trajectories not animating (14.3.6_2014.08.14) + +JmolVersion="14.3.13_2015.04.30d" + bug fix: reading Molden file with no MOs crashes Jmol JmolVersion="14.3.13_2015.04.30c" 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