Revision: 20904
          http://sourceforge.net/p/jmol/code/20904
Author:   hansonr
Date:     2015-12-23 21:59:40 +0000 (Wed, 23 Dec 2015)
Log Message:
-----------
Jmol.___JmolVersion="14.4.1_2015.12.23b"

bug fix: JavaScript error reporting uses alert() instead of just setting the 
error message
bug fix: PyMOL 1.8 PSE files cannot be read because of missing settings

code: more efficient loading of PyMOL .pse session files

Modified Paths:
--------------
    branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java
    branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java
    branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
    branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
    branches/v14_4/Jmol/src/org/jmol/modelset/AtomCollection.java
    branches/v14_4/Jmol/src/org/jmol/modelset/ModelLoader.java
    branches/v14_4/Jmol/src/org/jmol/modelset/ModelSet.java
    branches/v14_4/Jmol/src/org/jmol/script/ScriptManager.java
    branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
    trunk/Jmol/src/org/jmol/modelset/AtomCollection.java
    trunk/Jmol/src/org/jmol/modelset/ModelLoader.java
    trunk/Jmol/src/org/jmol/modelset/ModelSet.java
    trunk/Jmol/src/org/jmol/script/ScriptManager.java
    trunk/Jmol/src/org/jmol/viewer/Jmol.properties
    trunk/Jmol/src/org/jmol/viewer/Viewer.java

Modified: 
branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java    
2015-12-23 08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java    
2015-12-23 21:59:40 UTC (rev 20904)
@@ -1,15 +1,13 @@
 package org.jmol.adapter.readers.pymol;
 
+import java.util.Hashtable;
+import java.util.Map;
+
 import javajs.api.GenericBinaryDocument;
 import javajs.util.Lst;
 import javajs.util.SB;
 
 import org.jmol.util.Logger;
-
-import java.util.Hashtable;
-
-import java.util.Map;
-
 import org.jmol.viewer.Viewer;
 
 /**
@@ -98,6 +96,7 @@
   PickleReader(GenericBinaryDocument doc, Viewer vwr) {
     binaryDoc = doc;
     this.vwr = vwr;
+    stack.ensureCapacity(1000);
   }
 
   private void log(String s) {
@@ -386,10 +385,11 @@
   private Lst<Object> getObjects(int mark) {
     int n = stack.size() - mark;
     Lst<Object> args = new  Lst<Object>();
-    for (int j = 0; j < n; j++)
-      args.addLast(null);
-    for (int j = n, i = stack.size(); --i >= mark;)
-      args.set(--j, stack.remove(i));
+    args.ensureCapacity(n);
+    for (int i = mark; i < stack.size(); ++i)
+      args.addLast(stack.get(i));
+    for (int i = stack.size(); --i >= mark;)
+      stack.remove(i);
     return args;
   }
 
@@ -417,8 +417,12 @@
     switch (markCount) {
     case 2:
       thisSection = stack.get(i - 2);
-      inMovie = "movie".equals(thisSection);
-      inNames = "names".equals(thisSection);
+      // BH: Note that JavaScript string == object first converts object to 
string, then checks. 
+      // This can be very slow if the object is complex.
+      if (thisSection instanceof String) {
+        inMovie = "movie".equals(thisSection);
+        inNames = "names".equals(thisSection);
+      }
       break;
     default:
       break;

Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java   
2015-12-23 08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java   
2015-12-23 21:59:40 UTC (rev 20904)
@@ -3,6 +3,8 @@
 import java.util.Hashtable;
 import java.util.Map;
 
+import javajs.util.P3;
+
 import org.jmol.util.Logger;
 
 /**
@@ -471,7 +473,7 @@
   final static int offscreen_rendering_for_antialiasing  = 695;
   final static int offscreen_rendering_multiplier        = 696;
   final static int opaque_background                     = 435;
-  final static int ortho                                 =  23;
+  final static int orthoscopic                           =  23;
   final static int overlay                               =  61;
   final static int overlay_lines                         = 311;
   final static int pdb_conect_all                        = 329;
@@ -6243,30 +6245,137 @@
     moreColors.put(id, Integer.valueOf(value));
   }
 
-  public static float getDefaultSetting(int i, int pymolVersion) {
+  /**
+   * All settings that Jmol uses should go here
+   * 
+   * @param i
+   * @param pymolVersion
+   * @return setting or 0
+   */
+   static float getDefaultSetting(int i, int pymolVersion) {
     switch (i) {
-    case label_size:
-      return 14;
+    case sphere_color:
     case cartoon_color:
     case ellipsoid_color:
     case ribbon_color:
     case line_color:
+    case dot_color:
     case stick_color:
+    case surface_color:
+    case dash_color:
+    case mesh_color:
+    case cartoon_putty_quality:
     case label_distance_digits:
     case label_angle_digits:
     case label_dihedral_digits:
+    case two_sided_lighting:
       return -1;
     case ray_pixel_scale:
     case ellipsoid_scale:
+    case sphere_scale:
+    case mesh_width:
+    case cartoon_ladder_mode:
+    case clamp_colors:
+    case frame:
+    case state:
+    case depth_cue:
+    case fog:
+    case cartoon_round_helices:
+    case cartoon_fancy_helices:
+    case label_digits:
+    case ribbon_sampling:
       return 1;
-    default:
-      Logger.info("PyMOL " + pymolVersion + " does not have setting " + i);
-      //$FALL-THROUGH$
+    case sphere_transparency:
     case ellipsoid_transparency:
     case ribbon_transparency:
     case nonbonded_transparency:
+    case cartoon_transparency:
+    case stick_transparency:
+    case transparency:
+    case bg_rgb:
+    case cartoon_cylindrical_helices:
+    case surface_mode:
+    case surface_solvent:
+    case all_states:
+    case valence:
+    case cgo_transparency:
+    case cartoon_putty_transform:
+    case orthoscopic:
+    case ribbon_radius:
+    case ribbon_smooth:
+    case sphere_solvent:
+    case surface_carve_cutoff:
       return 0;
+    case cartoon_loop_radius:
+      return 0.2F;
+    case cartoon_rect_length:
+      return 1.4F;
+    case nonbonded_size:
+      return 0.25F;
+    case fog_start:
+      return 0.45f;
+    case label_size:
+      return 14;
+    case label_color:
+      return -6;
+    case label_font_id:
+      return 5;
+    case transparency_mode:
+    case cartoon_putty_range:
+    case cartoon_tube_cap:
+      return 2;
+    case cartoon_nucleic_acid_mode:
+    case cartoon_putty_scale_max:
+      return 4;
+    case cartoon_putty_radius:
+      return 0.4f;
+    case cartoon_putty_scale_min:
+      return 0.6f;
+    case cartoon_putty_scale_power:
+      return 1.5f;
+    case cartoon_tube_radius:
+      return 0.5f;
+    case solvent_radius:
+      return 1.4f;
+    case dash_width:
+      return 2.5f;
+    case line_width:
+      return 1.49f;
+    case ribbon_width:
+      return 3;
+    case field_of_view:
+      return 20;
+    case movie_fps:
+      return 30;
+    case stick_radius:
+      return 0.25f;
+    default:
+      Logger.error("PyMOL " + pymolVersion + " default float setting not 
found: " + i);
+      return 0;
     }
   }
 
+  static P3 getDefaultSettingPt(int i, int pymolVersion, P3 pt) {
+    switch (i) {
+    case label_position:
+      pt.set(0,  0,  0.75f);
+      break;
+    default:
+      Logger.error("PyMOL " + pymolVersion + " default point setting not 
found: " + i);
+      break;
+    }
+    return pt;
+  }
+
+  static String getDefaultSettingS(int i, int pymolVersion) {
+    switch (i) {
+    case surface_carve_selection:
+      break;
+    default:
+      Logger.info("PyMOL " + pymolVersion + " does not have String setting " + 
i);
+      break;
+    }
+    return "";
+  }
+
 }

Modified: 
branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java     
2015-12-23 08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java     
2015-12-23 21:59:40 UTC (rev 20904)
@@ -183,7 +183,7 @@
       sourcePNGJ = false;
     if (doCache)
       bsBytesExcluded = new BS();
-    logging = false;
+    //logging = true; // specifically for Pickle
     super.initializeReader();
   }
 
@@ -272,8 +272,9 @@
         pymolVersion, haveScenes, baseAtomIndex, baseModelIndex, doCache, 
filePath);
 
     // just log and display some information here
-
-    logging = (vwr.getLogFileName().length() > 0);
+    String logFile = vwr.getLogFileName();
+    logging = (logFile.length() > 0);
+    Logger.info(logging ? "PyMOL file data streaming to " + logFile : "To view 
raw PyMOL file data, use 'set logFile \"some_filename\" ");
     Lst<Object> names = getMapList(map, "names");
     for (Map.Entry<String, Object> e : map.entrySet()) {
       String name = e.getKey();
@@ -332,11 +333,11 @@
     // resize frame
     if (!isStateScript && doResize) {
       int width = 0, height = 0;
-      try {
-        width = intAt(getMapList(map, "main"), 0);
-        height = intAt(getMapList(map, "main"), 1);
-      } catch (Exception e) {
-        // ignore
+      Lst<Object> main = getMapList(map, "main");
+      if (main != null) {
+        // not all PSE files have this
+        width = intAt(main, 0);
+        height = intAt(main, 1);
       }
       String note;
       if (width > 0 && height > 0) {
@@ -493,7 +494,7 @@
           Lst<Object> setting = (Lst<Object>) mySettings.get(j);
           int uid = (id << 10) + intAt(setting, 0);
           uniqueSettings.put(Integer.valueOf(uid), setting);
-          Logger.info("PyMOL unique setting " + id + " " + setting);
+          //System.out.println("PyMOL unique setting " + id + " " + setting);
         }
       }
     }
@@ -514,7 +515,7 @@
     for (int i = colors.size(); --i >= 0;) {
       Lst<Object> c = listAt(colors, i);
       PyMOL.addColor((Integer) c.get(1), isClamped ? 
PyMOLScene.colorSettingClamped(c)
-          : PyMOLScene.colorSetting(c));
+          : PyMOLScene.getColorPt(c.get(2)));
     }
   }
 
@@ -899,13 +900,15 @@
 
     Lst<Object> coords = listAt(state, 2);
     Lst<Object> labelPositions = listAt(state, 8);
-    if (iState == 0 || !isTrajectory)
+    if (iState == 0 || !isTrajectory) {
+      pymolScene.ensureCapacity(n);
       for (int idx = 0; idx < n; idx++) {
         P3 a = addAtom(pymolAtoms, intAt(idxToAtm, idx), idx, coords, 
             labelPositions, bsAtoms, iState);
         if (a != null)
           trajectoryStep[trajectoryPtr++] = a;
       }
+    }
     addBonds(bonds);
     addMolStructures();
     atoms = asc.atoms;
@@ -940,9 +943,10 @@
    * @return list of bonds
    */
   private Lst<Bond> getBondList(Lst<Object> bonds) {
-    Lst<Bond> bondList = new Lst<Bond>();
     int asSingle = (pymolScene.booleanSetting(PyMOL.valence) ? 0 : 
JmolAdapter.ORDER_PYMOL_SINGLE);
     int n = bonds.size();
+    Lst<Bond> bondList = new Lst<Bond>();
+    bondList.ensureCapacity(n);
     for (int i = 0; i < n; i++) {
       Lst<Object> b = listAt(bonds, i);
       int order = intAt(b, 2);
@@ -1081,7 +1085,7 @@
       atom.radius = 1;
     atom.partialCharge = floatAt(a, 17);
     int formalCharge = intAt(a, 18);
-    
+
     BS bsReps = getBsReps(listAt(a, 20));
     int intReps = (bsReps == null ? intAt(a, 20) : 0); // Pymol 1.8      
     int atomColor = intAt(a, 21);
@@ -1096,7 +1100,8 @@
     atom.vib = V3.new3(uniqueID, cartoonType, Float.NaN);
     if (a.size() > 46) {
       float[] data = PyMOLScene.floatsAt(a, 41, new float[8], 6);
-      asc.setAnisoBorU(atom, data, 12);
+      if (data[0] != 0)
+        asc.setAnisoBorU(atom, data, 12);
     }
     //if (uniqueID > 0)
       //pymolScene.setUnique(uniqueID, atom);

Modified: branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java      
2015-12-23 08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java      
2015-12-23 21:59:40 UTC (rev 20904)
@@ -212,10 +212,9 @@
     this.stateCount = stateCount;
   }
 
-  @SuppressWarnings("unchecked")
   PyMOLScene(PymolAtomReader reader, Viewer vwr, Lst<Object> settings,
-      Map<Integer, Lst<Object>> uniqueSettings, int pymolVersion, 
-      boolean haveScenes, int baseAtomIndex, int baseModelIndex, 
+      Map<Integer, Lst<Object>> uniqueSettings, int pymolVersion,
+      boolean haveScenes, int baseAtomIndex, int baseModelIndex,
       boolean doCache, String filePath) {
     this.reader = reader;
     this.vwr = vwr;
@@ -229,11 +228,33 @@
     this.surfaceInfoName = filePath + "##JmolSurfaceInfo##";
     setVersionSettings();
     settings.trimToSize();
-    bgRgb = colorSetting(listAt(settings, PyMOL.bg_rgb));
-    pointAt((Lst<Object>) listAt(settings, PyMOL.label_position).get(2),
-        0, labelPosition0);
+    bgRgb = colorSetting(PyMOL.bg_rgb);
+    labelPosition0 = pointSetting(PyMOL.label_position);
   }
 
+  @SuppressWarnings("unchecked")
+  private int colorSetting(int i) {
+    Lst<Object> pos = listAt(settings, i);
+    Object o = (pos == null || pos.size() != 3 ? null : pos.get(2));
+    if (o == null)
+      return (int) PyMOL.getDefaultSetting(i, pymolVersion);
+    return (o instanceof Integer ? ((Integer) o).intValue() : CU
+        .colorPtToFFRGB(pointAt((Lst<Object>) o, 0, ptTemp)));
+  }
+  
+  @SuppressWarnings("unchecked")
+  private P3 pointSetting(int i) {
+    P3 pt = new P3();
+    Lst<Object> pos = listAt(settings, i);
+    if (pos != null && pos.size() == 3) 
+      return pointAt((Lst<Object>) pos.get(2), 0, pt);
+    return PyMOL.getDefaultSettingPt(i, pymolVersion, pt); 
+  }
+
+  void ensureCapacity(int n) {
+    atomColorList.ensureCapacity(atomColorList.size() + n);
+  }
+
   void setReaderObjectInfo(String name, int type, String groupName, boolean 
isHidden,
                      Lst<Object> listObjSettings,
                      Lst<Object> listStateSettings, String ext) {
@@ -634,7 +655,7 @@
 
   @SuppressWarnings("unchecked")
   static int getColorPt(Object o) {
-    return (o instanceof Integer ? ((Integer) o).intValue() : CU
+    return (o == null ? 0 : o instanceof Integer ? ((Integer) o).intValue() : 
CU
         .colorPtToFFRGB(pointAt((Lst<Object>) o, 0, ptTemp)));
   }
 
@@ -642,10 +663,6 @@
     return ((Number) list.get(i)).intValue();
   }
 
-  static int colorSetting(Lst<Object> c) {
-    return getColorPt(c.get(2));
-  }
-
   void setReaderObjects() {
     clearReaderData();
     finalizeObjects();
@@ -723,7 +740,7 @@
     for (int j = 0; j < 8; j++)
       pymolView[pt++] = floatAt(view, i++);
 
-    boolean isOrtho = booleanSetting(PyMOL.ortho); // 23
+    boolean isOrtho = booleanSetting(PyMOL.orthoscopic); // 23
     float fov = floatSetting(PyMOL.field_of_view); // 152
 
     pymolView[pt++] = (isOrtho ? fov : -fov);
@@ -735,12 +752,10 @@
 
   @SuppressWarnings("unchecked")
   float globalSetting(int i) {
-    try {
-      Lst<Object> setting = (Lst<Object>) settings.get(i);
+    Lst<Object> setting = (Lst<Object>) settings.get(i);
+    if (setting != null && setting.size() == 3)
       return ((Number) setting.get(2)).floatValue();
-    } catch (Exception e) {
-      return PyMOL.getDefaultSetting(i, pymolVersion);
-    }
+    return PyMOL.getDefaultSetting(i, pymolVersion);
   }
 
   /**
@@ -947,21 +962,17 @@
   }
 
   float floatSetting(int i) {
-    try {
-      Lst<Object> setting = getSetting(i);
+    Lst<Object> setting = getSetting(i);
+    if (setting != null && setting.size() == 3)
       return ((Number) setting.get(2)).floatValue();
-    } catch (Exception e) {
-      return PyMOL.getDefaultSetting(i, pymolVersion);
-    }
+    return PyMOL.getDefaultSetting(i, pymolVersion);
   }
 
   String stringSetting(int i) {
-    try {
       Lst<Object> setting = getSetting(i);
-      return setting.get(2).toString();
-    } catch (Exception e) {
-      return null;
-    }
+      if (setting != null && setting.size() == 3)
+        return setting.get(2).toString();
+      return PyMOL.getDefaultSettingS(i, pymolVersion);
   }
 
   @SuppressWarnings("unchecked")
@@ -1105,8 +1116,7 @@
   }
 
   static int colorSettingClamped(Lst<Object> c) {
-    return (c.size() < 6 || intAt(c, 4) == 0 ? colorSetting(c) : getColorPt(c
-        .get(5)));
+    return getColorPt(c.get(c.size() < 6 || intAt(c, 4) == 0 ? 2 : 5));
   }
 
   void setAtomColor(int atomColor) {
@@ -1685,11 +1695,11 @@
     return defs;
   }
 
-  public boolean needSelections() {
+  boolean needSelections() {
     return haveScenes || !htCarveSets.isEmpty();
   }
 
-  public void setUniqueBonds(BS bsBonds, boolean isSticks) {
+  void setUniqueBonds(BS bsBonds, boolean isSticks) {
     if (isSticks) {
       bsStickBonds.or(bsBonds);
       bsStickBonds.andNot(bsLineBonds);
@@ -1734,7 +1744,7 @@
    * @param argb
    * @param trans
    */
-  public void setBondParameters(Bond b, int modelIndex, float rad, float 
pymolValence,
+  void setBondParameters(Bond b, int modelIndex, float rad, float pymolValence,
                              int argb, float trans) {
     if (modelIndex >= 0 && b.atom1.mi != modelIndex)
       return; 
@@ -1755,7 +1765,7 @@
   }
 
 
-  public void addMesh(int tok, Lst<Object> obj, String objName, boolean isMep) 
{
+  void addMesh(int tok, Lst<Object> obj, String objName, boolean isMep) {
     JmolObject jo = addJmolObject(tok, null, obj);
     setSceneObject(objName, -1);
     int meshColor = (int) floatSetting(PyMOL.mesh_color);
@@ -1769,7 +1779,7 @@
     jo.cacheID = surfaceInfoName;
   }
 
-  public JmolObject addIsosurface(String objectName) {
+  JmolObject addIsosurface(String objectName) {
     JmolObject jo = addJmolObject(T.isosurface, null, objectName);
     jo.cacheID = surfaceInfoName;
     return jo;

Modified: branches/v14_4/Jmol/src/org/jmol/modelset/AtomCollection.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/modelset/AtomCollection.java       
2015-12-23 08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/modelset/AtomCollection.java       
2015-12-23 21:59:40 UTC (rev 20904)
@@ -2570,6 +2570,12 @@
       atomTensors.remove(toDelete.get(i));
   }
 
+  
+  private int atomCapacity;
+  void setCapacity(int nAtoms) {
+    atomCapacity += nAtoms;
+  }
+
   public void setAtomTensors(int atomIndex, Lst<Object> list) {
     if (list == null || list.size() == 0)
       return;
@@ -2590,6 +2596,16 @@
     }
   }
 
+  public void addTensor(Tensor t, String type) {
+    type = type.toLowerCase();
+    Lst<Object> tensors = atomTensors.get(type);
+    if (tensors == null) {
+      atomTensors.put(type, tensors = new Lst<Object>());
+      tensors.ensureCapacity(atomCapacity);
+    }
+    tensors.addLast(t);
+  }
+
   private static Object[] getTensorList(Lst<Object> list) {
     int pt = -1;
     boolean haveTLS = false;
@@ -2637,14 +2653,6 @@
     return null;
   }
 
-  public void addTensor(Tensor t, String type) {
-    type = type.toLowerCase();
-    Lst<Object> tensors = atomTensors.get(type);
-    if (tensors == null)
-      atomTensors.put(type, tensors = new Lst<Object>()); 
-    tensors.addLast(t);
-  }
-
   public Lst<Object> getAllAtomTensors(String type) {
     if (atomTensors == null)
       return null;

Modified: branches/v14_4/Jmol/src/org/jmol/modelset/ModelLoader.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/modelset/ModelLoader.java  2015-12-23 
08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/modelset/ModelLoader.java  2015-12-23 
21:59:40 UTC (rev 20904)
@@ -771,6 +771,7 @@
     boolean addH = false;
     boolean isLegacyHAddition = false;//vwr.getBoolean(T.legacyhaddition);
     JmolAdapterAtomIterator iterAtom = adapter.getAtomIterator(asc);
+    ms.setCapacity(adapter.getAtomCount(asc));
     int nRead = 0;
     Model[] models = ms.am;
     if (ms.mc > 0)

Modified: branches/v14_4/Jmol/src/org/jmol/modelset/ModelSet.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/modelset/ModelSet.java     2015-12-23 
08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/modelset/ModelSet.java     2015-12-23 
21:59:40 UTC (rev 20904)
@@ -668,7 +668,7 @@
     // full models are deleted for any model containing the specified atoms
     includeAllRelatedFrames(bsModels);
 
-    int nModelsDeleted = BSUtil.cardinalityOf(bsModels);
+    int nModelsDeleted = bsModels.cardinality();
     if (nModelsDeleted == 0)
       return null;
 
@@ -1310,14 +1310,14 @@
         ptCenter.add(at[i]);
       }
     }
-    if (nPoints > 0)
+    if (nPoints > 1)
       ptCenter.scale(1.0f / nPoints);
     return ptCenter;
   }
 
   public P3 getAverageAtomPoint() {
     if (averageAtomPoint == null)
-      (averageAtomPoint = new P3()).setT(getAtomSetCenter(vwr.getAllAtoms()));
+      averageAtomPoint = getAtomSetCenter(vwr.getAllAtoms());
     return averageAtomPoint;
   }
 
@@ -2710,7 +2710,7 @@
           + " pseudo-hbond calculation");
       calcRasmolHydrogenBonds(bsA, bsB, null, false, Integer.MAX_VALUE, false,
           bsHBonds);
-      return -BSUtil.cardinalityOf(bsHBonds);
+      return -bsHBonds.cardinality();
     }
     Logger.info(haveHAtoms ? "Standard Hbond calculation"
         : "Jmol pseudo-hbond calculation");

Modified: branches/v14_4/Jmol/src/org/jmol/script/ScriptManager.java
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/script/ScriptManager.java  2015-12-23 
08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/script/ScriptManager.java  2015-12-23 
21:59:40 UTC (rev 20904)
@@ -540,7 +540,7 @@
     try {
       if (fileName.endsWith(".pse")) {
         cmd = (isCached ? "" : "zap;") + "load SYNC " + PT.esc(fileName)
-            + " filter 'DORESIZE'";
+            + (vwr.isApplet ? "" : " filter 'DORESIZE'");
         return;
       }
       if (fileName.endsWith("jvxl")) {

Modified: branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties     2015-12-23 
08:23:37 UTC (rev 20903)
+++ branches/v14_4/Jmol/src/org/jmol/viewer/Jmol.properties     2015-12-23 
21:59:40 UTC (rev 20904)
@@ -7,8 +7,15 @@
 
 # see also http://chemapps.stolaf.edu/jmol/zip for daily updates
        
-Jmol.___JmolVersion="14.4.1_2015.12.23"
+Jmol.___JmolVersion="14.4.1_2015.12.23b"
 
+bug fix: JavaScript error reporting uses alert() instead of just setting the 
error message
+bug fix: PyMOL 1.8 PSE files cannot be read because of missing settings
+
+code: more efficient loading of PyMOL .pse session files
+
+JmolVersion="14.4.1_2015.12.23"
+
 bug fix: PyMOL 1.8 PSE files cannot be read
 bug fix: dots broken when colored none
 bug fix: color cartoons red blue not saved in state

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java     
2015-12-23 08:23:37 UTC (rev 20903)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PickleReader.java     
2015-12-23 21:59:40 UTC (rev 20904)
@@ -1,15 +1,13 @@
 package org.jmol.adapter.readers.pymol;
 
+import java.util.Hashtable;
+import java.util.Map;
+
 import javajs.api.GenericBinaryDocument;
 import javajs.util.Lst;
 import javajs.util.SB;
 
 import org.jmol.util.Logger;
-
-import java.util.Hashtable;
-
-import java.util.Map;
-
 import org.jmol.viewer.Viewer;
 
 /**
@@ -98,6 +96,7 @@
   PickleReader(GenericBinaryDocument doc, Viewer vwr) {
     binaryDoc = doc;
     this.vwr = vwr;
+    stack.ensureCapacity(1000);
   }
 
   private void log(String s) {
@@ -386,10 +385,11 @@
   private Lst<Object> getObjects(int mark) {
     int n = stack.size() - mark;
     Lst<Object> args = new  Lst<Object>();
-    for (int j = 0; j < n; j++)
-      args.addLast(null);
-    for (int j = n, i = stack.size(); --i >= mark;)
-      args.set(--j, stack.remove(i));
+    args.ensureCapacity(n);
+    for (int i = mark; i < stack.size(); ++i)
+      args.addLast(stack.get(i));
+    for (int i = stack.size(); --i >= mark;)
+      stack.remove(i);
     return args;
   }
 
@@ -417,8 +417,12 @@
     switch (markCount) {
     case 2:
       thisSection = stack.get(i - 2);
-      inMovie = "movie".equals(thisSection);
-      inNames = "names".equals(thisSection);
+      // BH: Note that JavaScript string == object first converts object to 
string, then checks. 
+      // This can be very slow if the object is complex.
+      if (thisSection instanceof String) {
+        inMovie = "movie".equals(thisSection);
+        inNames = "names".equals(thisSection);
+      }
       break;
     default:
       break;

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java    2015-12-23 
08:23:37 UTC (rev 20903)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOL.java    2015-12-23 
21:59:40 UTC (rev 20904)
@@ -3,6 +3,8 @@
 import java.util.Hashtable;
 import java.util.Map;
 
+import javajs.util.P3;
+
 import org.jmol.util.Logger;
 
 /**
@@ -471,7 +473,7 @@
   final static int offscreen_rendering_for_antialiasing  = 695;
   final static int offscreen_rendering_multiplier        = 696;
   final static int opaque_background                     = 435;
-  final static int ortho                                 =  23;
+  final static int orthoscopic                           =  23;
   final static int overlay                               =  61;
   final static int overlay_lines                         = 311;
   final static int pdb_conect_all                        = 329;
@@ -6243,30 +6245,137 @@
     moreColors.put(id, Integer.valueOf(value));
   }
 
-  public static float getDefaultSetting(int i, int pymolVersion) {
+  /**
+   * All settings that Jmol uses should go here
+   * 
+   * @param i
+   * @param pymolVersion
+   * @return setting or 0
+   */
+   static float getDefaultSetting(int i, int pymolVersion) {
     switch (i) {
-    case label_size:
-      return 14;
+    case sphere_color:
     case cartoon_color:
     case ellipsoid_color:
     case ribbon_color:
     case line_color:
+    case dot_color:
     case stick_color:
+    case surface_color:
+    case dash_color:
+    case mesh_color:
+    case cartoon_putty_quality:
     case label_distance_digits:
     case label_angle_digits:
     case label_dihedral_digits:
+    case two_sided_lighting:
       return -1;
     case ray_pixel_scale:
     case ellipsoid_scale:
+    case sphere_scale:
+    case mesh_width:
+    case cartoon_ladder_mode:
+    case clamp_colors:
+    case frame:
+    case state:
+    case depth_cue:
+    case fog:
+    case cartoon_round_helices:
+    case cartoon_fancy_helices:
+    case label_digits:
+    case ribbon_sampling:
       return 1;
-    default:
-      Logger.info("PyMOL " + pymolVersion + " does not have setting " + i);
-      //$FALL-THROUGH$
+    case sphere_transparency:
     case ellipsoid_transparency:
     case ribbon_transparency:
     case nonbonded_transparency:
+    case cartoon_transparency:
+    case stick_transparency:
+    case transparency:
+    case bg_rgb:
+    case cartoon_cylindrical_helices:
+    case surface_mode:
+    case surface_solvent:
+    case all_states:
+    case valence:
+    case cgo_transparency:
+    case cartoon_putty_transform:
+    case orthoscopic:
+    case ribbon_radius:
+    case ribbon_smooth:
+    case sphere_solvent:
+    case surface_carve_cutoff:
       return 0;
+    case cartoon_loop_radius:
+      return 0.2F;
+    case cartoon_rect_length:
+      return 1.4F;
+    case nonbonded_size:
+      return 0.25F;
+    case fog_start:
+      return 0.45f;
+    case label_size:
+      return 14;
+    case label_color:
+      return -6;
+    case label_font_id:
+      return 5;
+    case transparency_mode:
+    case cartoon_putty_range:
+    case cartoon_tube_cap:
+      return 2;
+    case cartoon_nucleic_acid_mode:
+    case cartoon_putty_scale_max:
+      return 4;
+    case cartoon_putty_radius:
+      return 0.4f;
+    case cartoon_putty_scale_min:
+      return 0.6f;
+    case cartoon_putty_scale_power:
+      return 1.5f;
+    case cartoon_tube_radius:
+      return 0.5f;
+    case solvent_radius:
+      return 1.4f;
+    case dash_width:
+      return 2.5f;
+    case line_width:
+      return 1.49f;
+    case ribbon_width:
+      return 3;
+    case field_of_view:
+      return 20;
+    case movie_fps:
+      return 30;
+    case stick_radius:
+      return 0.25f;
+    default:
+      Logger.error("PyMOL " + pymolVersion + " default float setting not 
found: " + i);
+      return 0;
     }
   }
 
+  static P3 getDefaultSettingPt(int i, int pymolVersion, P3 pt) {
+    switch (i) {
+    case label_position:
+      pt.set(0,  0,  0.75f);
+      break;
+    default:
+      Logger.error("PyMOL " + pymolVersion + " default point setting not 
found: " + i);
+      break;
+    }
+    return pt;
+  }
+
+  static String getDefaultSettingS(int i, int pymolVersion) {
+    switch (i) {
+    case surface_carve_selection:
+      break;
+    default:
+      Logger.info("PyMOL " + pymolVersion + " does not have String setting " + 
i);
+      break;
+    }
+    return "";
+  }
+
 }

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2015-12-23 08:23:37 UTC (rev 20903)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2015-12-23 21:59:40 UTC (rev 20904)
@@ -183,7 +183,7 @@
       sourcePNGJ = false;
     if (doCache)
       bsBytesExcluded = new BS();
-    logging = false;
+    //logging = true; // specifically for Pickle
     super.initializeReader();
   }
 
@@ -333,12 +333,11 @@
     // resize frame
     if (!isStateScript && doResize) {
       int width = 0, height = 0;
-      try {
+      Lst<Object> main = getMapList(map, "main");
+      if (main != null) {
         // not all PSE files have this
-        width = intAt(getMapList(map, "main"), 0);
-        height = intAt(getMapList(map, "main"), 1);
-      } catch (Exception e) {
-        // ignore
+        width = intAt(main, 0);
+        height = intAt(main, 1);
       }
       String note;
       if (width > 0 && height > 0) {
@@ -495,7 +494,7 @@
           Lst<Object> setting = (Lst<Object>) mySettings.get(j);
           int uid = (id << 10) + intAt(setting, 0);
           uniqueSettings.put(Integer.valueOf(uid), setting);
-          Logger.info("PyMOL unique setting " + id + " " + setting);
+          //System.out.println("PyMOL unique setting " + id + " " + setting);
         }
       }
     }
@@ -516,7 +515,7 @@
     for (int i = colors.size(); --i >= 0;) {
       Lst<Object> c = listAt(colors, i);
       PyMOL.addColor((Integer) c.get(1), isClamped ? 
PyMOLScene.colorSettingClamped(c)
-          : PyMOLScene.colorSetting(c));
+          : PyMOLScene.getColorPt(c.get(2)));
     }
   }
 
@@ -901,13 +900,15 @@
 
     Lst<Object> coords = listAt(state, 2);
     Lst<Object> labelPositions = listAt(state, 8);
-    if (iState == 0 || !isTrajectory)
+    if (iState == 0 || !isTrajectory) {
+      pymolScene.ensureCapacity(n);
       for (int idx = 0; idx < n; idx++) {
         P3 a = addAtom(pymolAtoms, intAt(idxToAtm, idx), idx, coords, 
             labelPositions, bsAtoms, iState);
         if (a != null)
           trajectoryStep[trajectoryPtr++] = a;
       }
+    }
     addBonds(bonds);
     addMolStructures();
     atoms = asc.atoms;
@@ -942,9 +943,10 @@
    * @return list of bonds
    */
   private Lst<Bond> getBondList(Lst<Object> bonds) {
-    Lst<Bond> bondList = new Lst<Bond>();
     int asSingle = (pymolScene.booleanSetting(PyMOL.valence) ? 0 : 
JmolAdapter.ORDER_PYMOL_SINGLE);
     int n = bonds.size();
+    Lst<Bond> bondList = new Lst<Bond>();
+    bondList.ensureCapacity(n);
     for (int i = 0; i < n; i++) {
       Lst<Object> b = listAt(bonds, i);
       int order = intAt(b, 2);
@@ -1098,7 +1100,8 @@
     atom.vib = V3.new3(uniqueID, cartoonType, Float.NaN);
     if (a.size() > 46) {
       float[] data = PyMOLScene.floatsAt(a, 41, new float[8], 6);
-      asc.setAnisoBorU(atom, data, 12);
+      if (data[0] != 0)
+        asc.setAnisoBorU(atom, data, 12);
     }
     //if (uniqueID > 0)
       //pymolScene.setUnique(uniqueID, atom);

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2015-12-23 08:23:37 UTC (rev 20903)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2015-12-23 21:59:40 UTC (rev 20904)
@@ -212,10 +212,9 @@
     this.stateCount = stateCount;
   }
 
-  @SuppressWarnings("unchecked")
   PyMOLScene(PymolAtomReader reader, Viewer vwr, Lst<Object> settings,
-      Map<Integer, Lst<Object>> uniqueSettings, int pymolVersion, 
-      boolean haveScenes, int baseAtomIndex, int baseModelIndex, 
+      Map<Integer, Lst<Object>> uniqueSettings, int pymolVersion,
+      boolean haveScenes, int baseAtomIndex, int baseModelIndex,
       boolean doCache, String filePath) {
     this.reader = reader;
     this.vwr = vwr;
@@ -229,11 +228,33 @@
     this.surfaceInfoName = filePath + "##JmolSurfaceInfo##";
     setVersionSettings();
     settings.trimToSize();
-    bgRgb = colorSetting(listAt(settings, PyMOL.bg_rgb));
-    pointAt((Lst<Object>) listAt(settings, PyMOL.label_position).get(2),
-        0, labelPosition0);
+    bgRgb = colorSetting(PyMOL.bg_rgb);
+    labelPosition0 = pointSetting(PyMOL.label_position);
   }
 
+  @SuppressWarnings("unchecked")
+  private int colorSetting(int i) {
+    Lst<Object> pos = listAt(settings, i);
+    Object o = (pos == null || pos.size() != 3 ? null : pos.get(2));
+    if (o == null)
+      return (int) PyMOL.getDefaultSetting(i, pymolVersion);
+    return (o instanceof Integer ? ((Integer) o).intValue() : CU
+        .colorPtToFFRGB(pointAt((Lst<Object>) o, 0, ptTemp)));
+  }
+  
+  @SuppressWarnings("unchecked")
+  private P3 pointSetting(int i) {
+    P3 pt = new P3();
+    Lst<Object> pos = listAt(settings, i);
+    if (pos != null && pos.size() == 3) 
+      return pointAt((Lst<Object>) pos.get(2), 0, pt);
+    return PyMOL.getDefaultSettingPt(i, pymolVersion, pt); 
+  }
+
+  void ensureCapacity(int n) {
+    atomColorList.ensureCapacity(atomColorList.size() + n);
+  }
+
   void setReaderObjectInfo(String name, int type, String groupName, boolean 
isHidden,
                      Lst<Object> listObjSettings,
                      Lst<Object> listStateSettings, String ext) {
@@ -634,7 +655,7 @@
 
   @SuppressWarnings("unchecked")
   static int getColorPt(Object o) {
-    return (o instanceof Integer ? ((Integer) o).intValue() : CU
+    return (o == null ? 0 : o instanceof Integer ? ((Integer) o).intValue() : 
CU
         .colorPtToFFRGB(pointAt((Lst<Object>) o, 0, ptTemp)));
   }
 
@@ -642,10 +663,6 @@
     return ((Number) list.get(i)).intValue();
   }
 
-  static int colorSetting(Lst<Object> c) {
-    return getColorPt(c.get(2));
-  }
-
   void setReaderObjects() {
     clearReaderData();
     finalizeObjects();
@@ -723,7 +740,7 @@
     for (int j = 0; j < 8; j++)
       pymolView[pt++] = floatAt(view, i++);
 
-    boolean isOrtho = booleanSetting(PyMOL.ortho); // 23
+    boolean isOrtho = booleanSetting(PyMOL.orthoscopic); // 23
     float fov = floatSetting(PyMOL.field_of_view); // 152
 
     pymolView[pt++] = (isOrtho ? fov : -fov);
@@ -735,12 +752,10 @@
 
   @SuppressWarnings("unchecked")
   float globalSetting(int i) {
-    try {
-      Lst<Object> setting = (Lst<Object>) settings.get(i);
+    Lst<Object> setting = (Lst<Object>) settings.get(i);
+    if (setting != null && setting.size() == 3)
       return ((Number) setting.get(2)).floatValue();
-    } catch (Exception e) {
-      return PyMOL.getDefaultSetting(i, pymolVersion);
-    }
+    return PyMOL.getDefaultSetting(i, pymolVersion);
   }
 
   /**
@@ -947,21 +962,17 @@
   }
 
   float floatSetting(int i) {
-    try {
-      Lst<Object> setting = getSetting(i);
+    Lst<Object> setting = getSetting(i);
+    if (setting != null && setting.size() == 3)
       return ((Number) setting.get(2)).floatValue();
-    } catch (Exception e) {
-      return PyMOL.getDefaultSetting(i, pymolVersion);
-    }
+    return PyMOL.getDefaultSetting(i, pymolVersion);
   }
 
   String stringSetting(int i) {
-    try {
       Lst<Object> setting = getSetting(i);
-      return setting.get(2).toString();
-    } catch (Exception e) {
-      return null;
-    }
+      if (setting != null && setting.size() == 3)
+        return setting.get(2).toString();
+      return PyMOL.getDefaultSettingS(i, pymolVersion);
   }
 
   @SuppressWarnings("unchecked")
@@ -1105,8 +1116,7 @@
   }
 
   static int colorSettingClamped(Lst<Object> c) {
-    return (c.size() < 6 || intAt(c, 4) == 0 ? colorSetting(c) : getColorPt(c
-        .get(5)));
+    return getColorPt(c.get(c.size() < 6 || intAt(c, 4) == 0 ? 2 : 5));
   }
 
   void setAtomColor(int atomColor) {
@@ -1685,11 +1695,11 @@
     return defs;
   }
 
-  public boolean needSelections() {
+  boolean needSelections() {
     return haveScenes || !htCarveSets.isEmpty();
   }
 
-  public void setUniqueBonds(BS bsBonds, boolean isSticks) {
+  void setUniqueBonds(BS bsBonds, boolean isSticks) {
     if (isSticks) {
       bsStickBonds.or(bsBonds);
       bsStickBonds.andNot(bsLineBonds);
@@ -1734,7 +1744,7 @@
    * @param argb
    * @param trans
    */
-  public void setBondParameters(Bond b, int modelIndex, float rad, float 
pymolValence,
+  void setBondParameters(Bond b, int modelIndex, float rad, float pymolValence,
                              int argb, float trans) {
     if (modelIndex >= 0 && b.atom1.mi != modelIndex)
       return; 
@@ -1755,7 +1765,7 @@
   }
 
 
-  public void addMesh(int tok, Lst<Object> obj, String objName, boolean isMep) 
{
+  void addMesh(int tok, Lst<Object> obj, String objName, boolean isMep) {
     JmolObject jo = addJmolObject(tok, null, obj);
     setSceneObject(objName, -1);
     int meshColor = (int) floatSetting(PyMOL.mesh_color);
@@ -1769,7 +1779,7 @@
     jo.cacheID = surfaceInfoName;
   }
 
-  public JmolObject addIsosurface(String objectName) {
+  JmolObject addIsosurface(String objectName) {
     JmolObject jo = addJmolObject(T.isosurface, null, objectName);
     jo.cacheID = surfaceInfoName;
     return jo;

Modified: trunk/Jmol/src/org/jmol/modelset/AtomCollection.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/AtomCollection.java        2015-12-23 
08:23:37 UTC (rev 20903)
+++ trunk/Jmol/src/org/jmol/modelset/AtomCollection.java        2015-12-23 
21:59:40 UTC (rev 20904)
@@ -2570,6 +2570,12 @@
       atomTensors.remove(toDelete.get(i));
   }
 
+  
+  private int atomCapacity;
+  void setCapacity(int nAtoms) {
+    atomCapacity += nAtoms;
+  }
+
   public void setAtomTensors(int atomIndex, Lst<Object> list) {
     if (list == null || list.size() == 0)
       return;
@@ -2590,6 +2596,16 @@
     }
   }
 
+  public void addTensor(Tensor t, String type) {
+    type = type.toLowerCase();
+    Lst<Object> tensors = atomTensors.get(type);
+    if (tensors == null) {
+      atomTensors.put(type, tensors = new Lst<Object>());
+      tensors.ensureCapacity(atomCapacity);
+    }
+    tensors.addLast(t);
+  }
+
   private static Object[] getTensorList(Lst<Object> list) {
     int pt = -1;
     boolean haveTLS = false;
@@ -2637,14 +2653,6 @@
     return null;
   }
 
-  public void addTensor(Tensor t, String type) {
-    type = type.toLowerCase();
-    Lst<Object> tensors = atomTensors.get(type);
-    if (tensors == null)
-      atomTensors.put(type, tensors = new Lst<Object>()); 
-    tensors.addLast(t);
-  }
-
   public Lst<Object> getAllAtomTensors(String type) {
     if (atomTensors == null)
       return null;

Modified: trunk/Jmol/src/org/jmol/modelset/ModelLoader.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/ModelLoader.java   2015-12-23 08:23:37 UTC 
(rev 20903)
+++ trunk/Jmol/src/org/jmol/modelset/ModelLoader.java   2015-12-23 21:59:40 UTC 
(rev 20904)
@@ -771,6 +771,7 @@
     boolean addH = false;
     boolean isLegacyHAddition = false;//vwr.getBoolean(T.legacyhaddition);
     JmolAdapterAtomIterator iterAtom = adapter.getAtomIterator(asc);
+    ms.setCapacity(adapter.getAtomCount(asc));
     int nRead = 0;
     Model[] models = ms.am;
     if (ms.mc > 0)

Modified: trunk/Jmol/src/org/jmol/modelset/ModelSet.java
===================================================================
--- trunk/Jmol/src/org/jmol/modelset/ModelSet.java      2015-12-23 08:23:37 UTC 
(rev 20903)
+++ trunk/Jmol/src/org/jmol/modelset/ModelSet.java      2015-12-23 21:59:40 UTC 
(rev 20904)
@@ -4057,5 +4057,6 @@
     }
     return (asMap ? map : lst);
   }
+
 }
 

Modified: trunk/Jmol/src/org/jmol/script/ScriptManager.java
===================================================================
--- trunk/Jmol/src/org/jmol/script/ScriptManager.java   2015-12-23 08:23:37 UTC 
(rev 20903)
+++ trunk/Jmol/src/org/jmol/script/ScriptManager.java   2015-12-23 21:59:40 UTC 
(rev 20904)
@@ -540,7 +540,7 @@
     try {
       if (fileName.endsWith(".pse")) {
         cmd = (isCached ? "" : "zap;") + "load SYNC " + PT.esc(fileName)
-            + " filter 'DORESIZE'";
+            + (vwr.isApplet ? "" : " filter 'DORESIZE'");
         return;
       }
       if (fileName.endsWith("jvxl")) {

Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-12-23 08:23:37 UTC 
(rev 20903)
+++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties      2015-12-23 21:59:40 UTC 
(rev 20904)
@@ -62,8 +62,21 @@
 
 TODO: consider if models with no atoms will cause issues in relation to 
model.firstAtomIndex
 
-Jmol.___JmolVersion="14.5.1_2015.12.23"
+Jmol.___JmolVersion="14.5.1_2015.12.23b"
 
+bug fix: JavaScript error reporting uses alert() instead of just setting the 
error message
+
+code: more efficient loading of PyMOL .pse session files
+
+Jmol.___JmolVersion="14.5.1_2015.12.23b"
+
+bug fix: JavaScript error reporting uses alert() instead of just setting the 
error message
+bug fix: PyMOL 1.8 PSE files cannot be read because of missing settings
+
+code: more efficient loading of PyMOL .pse session files
+
+JmolVersion="14.5.1_2015.12.23"
+
 bug fix: PyMOL 1.8 PSE files cannot be read
 bug fix: dots broken when colored none
 bug fix: color cartoons red blue not saved in state

Modified: trunk/Jmol/src/org/jmol/viewer/Viewer.java
===================================================================
--- trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-12-23 08:23:37 UTC (rev 
20903)
+++ trunk/Jmol/src/org/jmol/viewer/Viewer.java  2015-12-23 21:59:40 UTC (rev 
20904)
@@ -99,7 +99,6 @@
 import org.jmol.modelset.Atom;
 import org.jmol.modelset.AtomCollection;
 import org.jmol.modelset.Bond;
-import org.jmol.modelset.Group;
 import org.jmol.modelset.LabelToken;
 import org.jmol.modelset.Measurement;
 import org.jmol.modelset.MeasurementData;

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to