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

Reply via email to