Revision: 21201
          http://sourceforge.net/p/jmol/code/21201
Author:   hansonr
Date:     2016-08-10 12:57:12 +0000 (Wed, 10 Aug 2016)
Log Message:
-----------
PyMOL reader upgrade

Modified Paths:
--------------
    branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
    branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
    branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
    trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java

Modified: branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
===================================================================
--- branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java      
2016-08-10 07:00:36 UTC (rev 21200)
+++ branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java      
2016-08-10 12:57:12 UTC (rev 21201)
@@ -315,8 +315,8 @@
       Lst<Object> mep = (Lst<Object>) info;
       sID = mep.get(mep.size() - 2).toString();
       String mapID = mep.get(mep.size() - 1).toString();
-      float min = PyMOLScene.floatAt(PyMOLScene.listAt(mep, 3), 0);
-      float max = PyMOLScene.floatAt(PyMOLScene.listAt(mep, 3), 2);
+      float min = PyMOLReader.floatAt(PyMOLReader.listAt(mep, 3), 0);
+      float max = PyMOLReader.floatAt(PyMOLReader.listAt(mep, 3), 2);
       sb = new SB();
       sb.append(";isosurface ID ").append(PT.esc(sID)).append(" map 
").append(PT.esc(cacheID)).append(" ")
           .append(PT.esc(mapID)).append(
@@ -336,15 +336,15 @@
           .append(m.getModelNumberDotted(modelIndex))
           .append(" color ").append(Escape.escapeColor(argb)).append("  
").append(PT.esc(cacheID)).append(" ")
           .append(PT.esc(sID)).append(" mesh nofill frontonly");
-      float within = PyMOLScene.floatAt(PyMOLScene.listAt(PyMOLScene.listAt(
+      float within = PyMOLReader.floatAt(PyMOLReader.listAt(PyMOLReader.listAt(
           mesh, 2), 0), 11);
-      Lst<Object> list = PyMOLScene.listAt(PyMOLScene.listAt(PyMOLScene
+      Lst<Object> list = PyMOLReader.listAt(PyMOLReader.listAt(PyMOLReader
           .listAt(mesh, 2), 0), 12);
       if (within > 0) {
         P3 pt = new P3();
         sb.append(";isosurface slab within ").appendF(within).append(" [ ");
         for (int j = list.size() - 3; j >= 0; j -= 3) {
-          PyMOLScene.pointAt(list, j, pt);
+          PyMOLReader.pointAt(list, j, pt);
           sb.append(Escape.eP(pt));
         }
         sb.append(" ]");

Modified: 
branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
===================================================================
--- branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java     
2016-08-10 07:00:36 UTC (rev 21200)
+++ branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java     
2016-08-10 12:57:12 UTC (rev 21201)
@@ -45,6 +45,7 @@
 
 import javajs.util.AU;
 import javajs.util.BC;
+import javajs.util.CU;
 import javajs.util.P3;
 import javajs.util.PT;
 import javajs.util.V3;
@@ -515,6 +516,8 @@
     return max;
   }
 
+  private final P3 ptTemp = new P3();
+
   /**
    * Add new colors from the main "colors" map object.
    * Not 100% clear how color clamping works.
@@ -528,8 +531,8 @@
     // note, we are ignoring lookup-table colors
     for (int i = colors.size(); --i >= 0;) {
       Lst<Object> c = listAt(colors, i);
-      PyMOL.addColor((Integer) c.get(1), isClamped ? 
PyMOLScene.colorSettingClamped(c)
-          : PyMOLScene.getColorPt(c.get(2)));
+      PyMOL.addColor((Integer) c.get(1), isClamped ? colorSettingClamped(c, 
ptTemp)
+          : getColorPt(c.get(2), ptTemp));
     }
   }
 
@@ -1326,11 +1329,16 @@
    *        list of atom details
    * @param apt
    *        array pointer into pymolAtoms
+   * @param atomArray 
+   * @param vArray 
+   * @param lexStr 
    * @param icoord
    *        array pointer into coords (/3)
    * @param coords
    *        coordinates array
+   * @param coordArray 
    * @param labelPositions
+   * @param labelArray 
    * @param bsState
    *        this state -- Jmol atomIndex
    * @param iState
@@ -1409,7 +1417,7 @@
       bonded = (intAt(a, 25) != 0);
       uniqueID = (a.size() > 40 && intAt(a, 40) == 1 ? intAt(a, 32) : -1);
       if (a.size() > 46)
-        anisou = PyMOLScene.floatsAt(a, 41, new float[8], 6);
+        anisou = floatsAt(a, 41, new float[8], 6);
     }
 
     String insCode = (resi.length() > 3 ? resi.substring(3) : " ");
@@ -1686,13 +1694,12 @@
   private void processSelectionsAndScenes(Map<String, Object> map) {
     if (!pymolScene.needSelections())
       return;
-    Map<String, Lst<Object>> htObjNames = PyMOLScene.listToMap(getMapList(
+    Map<String, Lst<Object>> htObjNames = listToMap(getMapList(
         map, "names"));
     if (haveScenes) {
       Map<String, Object> scenes = (Map<String, Object>) map.get("scene_dict");
       finalizeSceneData();
-      Map<String, Lst<Object>> htSecrets = PyMOLScene
-          .listToMap(getMapList(map, "selector_secrets"));
+      Map<String, Lst<Object>> htSecrets = listToMap(getMapList(map, 
"selector_secrets"));
       for (int i = 0; i < sceneOrder.size(); i++) {
         String name = stringAt(sceneOrder, i);
         Lst<Object> thisScene = getMapList(scenes, name);
@@ -1737,12 +1744,53 @@
 
   // generally useful static methods
 
-  private static int intAt(Lst<Object> list, int i) {
+  static int intAt(Lst<Object> list, int i) {
     // PyMOL 1.7.5 may simply have a null list for a setting
     return (list == null ? -1 : ((Number) list.get(i)).intValue());
   }
 
-  private static String stringAt(Lst<Object> list, int i) {
+  static P3 pointAt(Lst<Object> list, int i, P3 pt) {
+    pt.set(floatAt(list, i++), floatAt(list, i++), floatAt(list, i));
+    return pt;
+  }
+
+  static float[] floatsAt(Lst<Object> a, int pt, float[] data, int len) {
+    if (a == null)
+      return null;
+    for (int i = 0; i < len; i++)
+      data[i] = floatAt(a, pt++);
+    return data;
+  }
+
+  static float floatAt(Lst<Object> list, int i) {
+    return (list == null ? 0 : ((Number) list.get(i)).floatValue());
+  }
+
+  @SuppressWarnings("unchecked")
+  static Lst<Object> listAt(Lst<Object> list, int i) {
+    if (list == null || i >= list.size())
+      return null;
+    Object o = list.get(i);
+    return (o instanceof Lst<?> ? (Lst<Object>) o : null);
+  }
+
+  /**
+   * return a map of lists of the type: [ [name1,...], [name2,...], ...]
+   * 
+   * @param list
+   * @return Hashtable
+   */
+  static Map<String, Lst<Object>> listToMap(Lst<Object> list) {
+    Hashtable<String, Lst<Object>> map = new Hashtable<String, Lst<Object>>();
+    for (int i = list.size(); --i >= 0;) {
+      Lst<Object> item = listAt(list, i);
+      if (item != null && item.size() > 0)
+        map.put(stringAt(item, 0), item);
+    }
+    return map;
+  }
+
+  static String stringAt(Lst<Object> list, int i) {
     if (!AU.isAB(list.get(i)))
       System.out.println("??");
     byte[] a = (byte[]) list.get(i);
@@ -1757,7 +1805,17 @@
     }
   }
 
+  static int colorSettingClamped(Lst<Object> c, P3 ptTemp) {
+    return getColorPt(c.get(c.size() < 6 || intAt(c, 4) == 0 ? 2 : 5), ptTemp);
+  }
+
   @SuppressWarnings("unchecked")
+  static int getColorPt(Object o, P3 ptTemp) {
+    return (o == null ? 0 : o instanceof Integer ? ((Integer) o).intValue() : 
CU
+        .colorPtToFFRGB(PyMOLReader.pointAt((Lst<Object>) o, 0, ptTemp)));
+  }
+
+  @SuppressWarnings("unchecked")
   private static Lst<Object> getMapList(Map<String, Object> map, String key) {
     return (Lst<Object>) map.get(key);
   }
@@ -1774,14 +1832,6 @@
     return bsReps;
   }
 
-  private float floatAt(Lst<Object> a, int i) {
-    return PyMOLScene.floatAt(a, i);
-  }
-
-  private Lst<Object> listAt(Lst<Object> list, int i) {
-    return PyMOLScene.listAt(list, i);
-  }
-
   /// PymolAtomReader interface
   
   @Override
@@ -1809,6 +1859,4 @@
     return atoms[iPrev].chainID != atoms[i].chainID;
   }
 
-
-
 }

Modified: branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
===================================================================
--- branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java      
2016-08-10 07:00:36 UTC (rev 21200)
+++ branches/v14_6/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java      
2016-08-10 12:57:12 UTC (rev 21201)
@@ -234,20 +234,20 @@
 
   @SuppressWarnings("unchecked")
   private int colorSetting(int i) {
-    Lst<Object> pos = listAt(settings, i);
+    Lst<Object> pos = PyMOLReader.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)));
+        .colorPtToFFRGB(PyMOLReader.pointAt((Lst<Object>) o, 0, ptTemp)));
   }
   
   @SuppressWarnings("unchecked")
   private P3 pointSetting(int i) {
     P3 pt = new P3();
-    Lst<Object> pos = listAt(settings, i);
+    Lst<Object> pos = PyMOLReader.listAt(settings, i);
     if (pos != null && pos.size() == 3) 
-      return pointAt((Lst<Object>) pos.get(2), 0, pt);
+      return PyMOLReader.pointAt((Lst<Object>) pos.get(2), 0, pt);
     return PyMOL.getDefaultSettingPt(i, pymolVersion, pt); 
   }
 
@@ -260,7 +260,7 @@
                      Lst<Object> listStateSettings, String ext) {
     objectName = name;
     objectHidden = isHidden;
-    objectNameID = (objectName == null ? null : PyMOLScene.fixName(objectName
+    objectNameID = (objectName == null ? null : fixName(objectName
         + ext));
     objectSettings = new Hashtable<Integer, Lst<Object>>();
     stateSettings = new Hashtable<Integer, Lst<Object>>();
@@ -285,7 +285,7 @@
   }
 
   @SuppressWarnings("unchecked")
-  private static void listToSettings(Lst<Object> list,
+  private void listToSettings(Lst<Object> list,
                               Map<Integer, Lst<Object>> objectSettings) {
     if (list != null && list.size() != 0) {
 //      if (debugging)
@@ -329,7 +329,7 @@
     labelPosition = new P3();
     try {
       Lst<Object> setting = getObjectSetting(PyMOL.label_position);
-      pointAt(listAt(setting, 2), 0, labelPosition);
+      PyMOLReader.pointAt(PyMOLReader.listAt(setting, 2), 0, labelPosition);
     } catch (Exception e) {
       // no problem.
     }
@@ -404,7 +404,7 @@
     smap.put("pymolFrame", frame);
     smap.put("generator", this);
     smap.put("name", name);
-    Lst<Object> view = listAt(thisScene, 0);
+    Lst<Object> view = PyMOLReader.listAt(thisScene, 0);
     if (view != null)
       smap.put("pymolView", getPymolView(view, false));
 
@@ -421,23 +421,23 @@
     Object[] reps = new Object[PyMOL.REP_LIST.length];
     for (int j = PyMOL.REP_LIST.length; --j >= 0;) {
       Lst<Object> list = htObjNames.get(sname + PyMOL.REP_LIST[j]);
-      Lst<Object> data = listAt(list, 5);
+      Lst<Object> data = PyMOLReader.listAt(list, 5);
       if (data != null && data.size() > 0)
-        reps[j] = listToMap(data);
+        reps[j] = PyMOLReader.listToMap(data);
     }
     smap.put("moleculeReps", reps);
 
     // there's no real point in getting 
     // get all colors from selector_secrets
     sname = "_!c_" + name + "_";
-    Lst<Object> colorection = listAt(thisScene, 3);
+    Lst<Object> colorection = PyMOLReader.listAt(thisScene, 3);
     int n = colorection.size();
     // [color/selEntry,color/selEntry,color/selEntry.....]
     // [3, 262,        0, 263,        4, 264,       .....]
     // see layer3/Selector.c SelectorColorectionApply
     Object[] colors = new Object[n / 2];
     for (int j = 0, i = 0; j < n; j += 2) {
-      int color = intAt(colorection, j);
+      int color = PyMOLReader.intAt(colorection, j);
       Lst<Object> c = htSecrets.get(sname + color);
       if (c != null && c.size() > 1)
         colors[i++] = new Object[] { Integer.valueOf(color), c.get(1) };
@@ -512,7 +512,7 @@
     String id = selection.get(0).toString();
     id = "_" + (id.equals("sele") ? id : "sele_" + id); 
     PyMOLGroup g = getGroup(id);
-    getSelectionAtoms(listAt(selection, 5), 0, g.bsAtoms);
+    getSelectionAtoms(PyMOLReader.listAt(selection, 5), 0, g.bsAtoms);
   }
 
   /**
@@ -526,7 +526,7 @@
   private BS getSelectionAtoms(Lst<Object> molecules, int istate, BS bs) {
     if (molecules != null)
       for (int j = molecules.size(); --j >= 0;)
-        selectAllAtoms(listAt(molecules, j), istate, bs);
+        selectAllAtoms(PyMOLReader.listAt(molecules, j), istate, bs);
     return bs;
   }
 
@@ -538,9 +538,9 @@
    * @param bs
    */
   private void selectAllAtoms(Lst<Object> obj, int istate, BS bs) {
-    String name = (String) obj.get(0);
+    String name = PyMOLReader.stringAt(obj, 0);
     setSceneObject(name, istate);
-    Lst<Object> atomList = listAt(obj, 1);
+    Lst<Object> atomList = PyMOLReader.listAt(obj, 1);
     int k0 = (istate == 0 ? 1 : istate);
     int k1 = (istate == 0 ? stateCount : istate);
     for (int k = k0; k <= k1; k++) {
@@ -570,7 +570,7 @@
       if (name.equals("all"))
         continue;
       Lst<Object> list = (Lst<Object>) e.getValue();
-      int tok = (intAt(list, 0) == 1 ? T.display : T.hide);
+      int tok = (PyMOLReader.intAt(list, 0) == 1 ? T.display : T.hide);
       if (tok == T.hide)
         htHiddenObjects.put(name, Boolean.TRUE);
       switch (getObjectType(name)) {
@@ -607,7 +607,7 @@
           MeasurementData[] mdList = htMeasures.get(name);
           if (mdList != null)
             addMeasurements(mdList, mdList[0].points.size(), null,
-                getBS(listAt(list, 2)), intAt(list, 3), null, true);
+                getBS(PyMOLReader.listAt(list, 2)), PyMOLReader.intAt(list, 
3), null, true);
         }
         info += "_*";
         break;
@@ -654,27 +654,17 @@
   private BS getBS(Lst<Object> list) {
     BS bs = new BS();
     for (int i = list.size(); --i >= 0;)
-      bs.set(intAt(list, i));
+      bs.set(PyMOLReader.intAt(list, i));
     return bs;
   }
 
   private void getBsAtoms(Lst<Object> list, int[] atomMap, BS bs) {
     for (int i = list.size(); --i >= 0;)
-      bs.set(atomMap[intAt(list, i)]);
+      bs.set(atomMap[PyMOLReader.intAt(list, i)]);
   }
 
-  private final static P3 ptTemp = new P3();
+  private final P3 ptTemp = new P3();
 
-  @SuppressWarnings("unchecked")
-  static int getColorPt(Object o) {
-    return (o == null ? 0 : o instanceof Integer ? ((Integer) o).intValue() : 
CU
-        .colorPtToFFRGB(pointAt((Lst<Object>) o, 0, ptTemp)));
-  }
-
-  static int intAt(Lst<Object> list, int i) {
-    return ((Number) list.get(i)).intValue();
-  }
-
   void setReaderObjects() {
     clearReaderData();
     finalizeObjects();
@@ -735,22 +725,22 @@
     int i = 0;
     // x-axis
     for (int j = 0; j < 3; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
     if (isViewObj)
       i++;
     // y-axis
     for (int j = 0; j < 3; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
     if (isViewObj)
       i++;
     // z-axis (not used)
     for (int j = 0; j < 3; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
     if (isViewObj)
       i += 5;
     // xTrans, yTrans, -distanceToCenter, center(x,y,z), distanceToSlab, 
distanceToDepth
     for (int j = 0; j < 8; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
 
     boolean isOrtho = booleanSetting(PyMOL.orthoscopic); // 23
     float fov = floatSetting(PyMOL.field_of_view); // 152
@@ -829,7 +819,7 @@
     if (htCarveSets.isEmpty())
       return;
     for (Entry<String, BS> e: htCarveSets.entrySet())
-      getSelectionAtoms(listAt(htObjNames.get(e.getKey()), 5), 0, 
e.getValue());
+      getSelectionAtoms(PyMOLReader.listAt(htObjNames.get(e.getKey()), 5), 0, 
e.getValue());
   }
 
   private void setGroupVisibilities() {
@@ -851,7 +841,7 @@
     htDefinedAtoms.put(getJmolName(name), bs);
   }
 
-  private static String getJmolName(String name) {
+  private String getJmolName(String name) {
     return "__" + fixName(name);
   }
 
@@ -958,7 +948,7 @@
         || (setting = uniqueSettings.get(Integer.valueOf((id << 10) + key))) 
== null)
       return pt;
     pt = new P3();
-    pointAt((Lst<Object>) setting.get(2), 0, pt);
+    PyMOLReader.pointAt((Lst<Object>) setting.get(2), 0, pt);
     Logger.info("Pymol unique setting for " + id + ": " + key + " = " + pt);
     return pt;
   }
@@ -998,32 +988,7 @@
     return setting;
   }
 
-  static P3 pointAt(Lst<Object> list, int i, P3 pt) {
-    pt.set(floatAt(list, i++), floatAt(list, i++), floatAt(list, i));
-    return pt;
-  }
-
-  static float floatAt(Lst<Object> list, int i) {
-    return (list == null ? 0 : ((Number) list.get(i)).floatValue());
-  }
-
-  static float[] floatsAt(Lst<Object> a, int pt, float[] data, int len) {
-    if (a == null)
-      return null;
-    for (int i = 0; i < len; i++)
-      data[i] = floatAt(a, pt++);
-    return data;
-  }
-
-  @SuppressWarnings("unchecked")
-  static Lst<Object> listAt(Lst<Object> list, int i) {
-    if (list == null || i >= list.size())
-      return null;
-    Object o = list.get(i);
-    return (o instanceof Lst<?> ? (Lst<Object>) o : null);
-  }
-
-  static float[] setLabelPosition(P3 offset, float[] labelPos) {
+  float[] setLabelPosition(P3 offset, float[] labelPos) {
     labelPos[0] = 1;
     labelPos[1] = offset.x;
     labelPos[2] = offset.y;
@@ -1069,8 +1034,8 @@
       if (isNew) {
         Lst<Object> points = new Lst<Object>();
         for (int i = 0; i < nCoord; i++, p += 3)
-          points.addLast(pointAt(list, p, new Point3fi()));
-        offset = floatsAt(listAt(offsets, index), 0, new float[7], 7);
+          points.addLast(PyMOLReader.pointAt(list, p, new Point3fi()));
+        offset = PyMOLReader.floatsAt(PyMOLReader.listAt(offsets, index), 0, 
new float[7], 7);
         if (offset == null)
           offset = setLabelPosition(labelPosition, new float[7]);
         md = mdList[index] = vwr.newMeasurementData(objectNameID + "_"
@@ -1126,10 +1091,6 @@
     return C.getColixTranslucent3(colix, translucency > 0, translucency);
   }
 
-  static int colorSettingClamped(Lst<Object> c) {
-    return getColorPt(c.get(c.size() < 6 || intAt(c, 4) == 0 ? 2 : 5));
-  }
-
   void setAtomColor(int atomColor) {
     atomColorList.addLast(Integer.valueOf(getColix(atomColor, 0)));
   }
@@ -1145,7 +1106,7 @@
     frameObj = null;
   }
 
-  private static String fixName(String name) {
+  private String fixName(String name) {
     char[] chars = name.toLowerCase().toCharArray();
     for (int i = chars.length; --i >= 0;)
       if (!PT.isLetterOrDigit(chars[i]))
@@ -1678,22 +1639,6 @@
     return bs;
   }
 
-  /**
-   * return a map of lists of the type: [ [name1,...], [name2,...], ...]
-   * 
-   * @param list
-   * @return Hashtable
-   */
-  static Map<String, Lst<Object>> listToMap(Lst<Object> list) {
-    Hashtable<String, Lst<Object>> map = new Hashtable<String, Lst<Object>>();
-    for (int i = list.size(); --i >= 0;) {
-      Lst<Object> item = PyMOLScene.listAt(list, i);
-      if (item != null && item.size() > 0)
-        map.put(PyMOLReader.bytesToString(item.get(0)), item);
-    }
-    return map;
-  }
-  
   Map<String, Object> setAtomDefs() {
     setGroupVisibilities();
     Map<String, Object> defs = new Hashtable<String, Object>();
@@ -1781,7 +1726,7 @@
     setSceneObject(objName, -1);
     int meshColor = (int) floatSetting(PyMOL.mesh_color);
     if (meshColor < 0)
-      meshColor = intAt(listAt(obj, 0), 2);
+      meshColor = PyMOLReader.intAt(PyMOLReader.listAt(obj, 0), 2);
     if (!isMep) {
       jo.setSize(meshWidth);
       jo.argb = PyMOL.getRGB(meshColor);

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java       
2016-08-10 07:00:36 UTC (rev 21200)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/JmolObject.java       
2016-08-10 12:57:12 UTC (rev 21201)
@@ -315,8 +315,8 @@
       Lst<Object> mep = (Lst<Object>) info;
       sID = mep.get(mep.size() - 2).toString();
       String mapID = mep.get(mep.size() - 1).toString();
-      float min = PyMOLScene.floatAt(PyMOLScene.listAt(mep, 3), 0);
-      float max = PyMOLScene.floatAt(PyMOLScene.listAt(mep, 3), 2);
+      float min = PyMOLReader.floatAt(PyMOLReader.listAt(mep, 3), 0);
+      float max = PyMOLReader.floatAt(PyMOLReader.listAt(mep, 3), 2);
       sb = new SB();
       sb.append(";isosurface ID ").append(PT.esc(sID)).append(" map 
").append(PT.esc(cacheID)).append(" ")
           .append(PT.esc(mapID)).append(
@@ -336,15 +336,15 @@
           .append(m.getModelNumberDotted(modelIndex))
           .append(" color ").append(Escape.escapeColor(argb)).append("  
").append(PT.esc(cacheID)).append(" ")
           .append(PT.esc(sID)).append(" mesh nofill frontonly");
-      float within = PyMOLScene.floatAt(PyMOLScene.listAt(PyMOLScene.listAt(
+      float within = PyMOLReader.floatAt(PyMOLReader.listAt(PyMOLReader.listAt(
           mesh, 2), 0), 11);
-      Lst<Object> list = PyMOLScene.listAt(PyMOLScene.listAt(PyMOLScene
+      Lst<Object> list = PyMOLReader.listAt(PyMOLReader.listAt(PyMOLReader
           .listAt(mesh, 2), 0), 12);
       if (within > 0) {
         P3 pt = new P3();
         sb.append(";isosurface slab within ").appendF(within).append(" [ ");
         for (int j = list.size() - 3; j >= 0; j -= 3) {
-          PyMOLScene.pointAt(list, j, pt);
+          PyMOLReader.pointAt(list, j, pt);
           sb.append(Escape.eP(pt));
         }
         sb.append(" ]");

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2016-08-10 07:00:36 UTC (rev 21200)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java      
2016-08-10 12:57:12 UTC (rev 21201)
@@ -45,6 +45,7 @@
 
 import javajs.util.AU;
 import javajs.util.BC;
+import javajs.util.CU;
 import javajs.util.P3;
 import javajs.util.PT;
 import javajs.util.V3;
@@ -515,6 +516,8 @@
     return max;
   }
 
+  private final P3 ptTemp = new P3();
+
   /**
    * Add new colors from the main "colors" map object.
    * Not 100% clear how color clamping works.
@@ -528,8 +531,8 @@
     // note, we are ignoring lookup-table colors
     for (int i = colors.size(); --i >= 0;) {
       Lst<Object> c = listAt(colors, i);
-      PyMOL.addColor((Integer) c.get(1), isClamped ? 
PyMOLScene.colorSettingClamped(c)
-          : PyMOLScene.getColorPt(c.get(2)));
+      PyMOL.addColor((Integer) c.get(1), isClamped ? colorSettingClamped(c, 
ptTemp)
+          : getColorPt(c.get(2), ptTemp));
     }
   }
 
@@ -1326,11 +1329,16 @@
    *        list of atom details
    * @param apt
    *        array pointer into pymolAtoms
+   * @param atomArray 
+   * @param vArray 
+   * @param lexStr 
    * @param icoord
    *        array pointer into coords (/3)
    * @param coords
    *        coordinates array
+   * @param coordArray 
    * @param labelPositions
+   * @param labelArray 
    * @param bsState
    *        this state -- Jmol atomIndex
    * @param iState
@@ -1409,7 +1417,7 @@
       bonded = (intAt(a, 25) != 0);
       uniqueID = (a.size() > 40 && intAt(a, 40) == 1 ? intAt(a, 32) : -1);
       if (a.size() > 46)
-        anisou = PyMOLScene.floatsAt(a, 41, new float[8], 6);
+        anisou = floatsAt(a, 41, new float[8], 6);
     }
 
     String insCode = (resi.length() > 3 ? resi.substring(3) : " ");
@@ -1686,13 +1694,12 @@
   private void processSelectionsAndScenes(Map<String, Object> map) {
     if (!pymolScene.needSelections())
       return;
-    Map<String, Lst<Object>> htObjNames = PyMOLScene.listToMap(getMapList(
+    Map<String, Lst<Object>> htObjNames = listToMap(getMapList(
         map, "names"));
     if (haveScenes) {
       Map<String, Object> scenes = (Map<String, Object>) map.get("scene_dict");
       finalizeSceneData();
-      Map<String, Lst<Object>> htSecrets = PyMOLScene
-          .listToMap(getMapList(map, "selector_secrets"));
+      Map<String, Lst<Object>> htSecrets = listToMap(getMapList(map, 
"selector_secrets"));
       for (int i = 0; i < sceneOrder.size(); i++) {
         String name = stringAt(sceneOrder, i);
         Lst<Object> thisScene = getMapList(scenes, name);
@@ -1737,12 +1744,53 @@
 
   // generally useful static methods
 
-  private static int intAt(Lst<Object> list, int i) {
+  static int intAt(Lst<Object> list, int i) {
     // PyMOL 1.7.5 may simply have a null list for a setting
     return (list == null ? -1 : ((Number) list.get(i)).intValue());
   }
 
-  private static String stringAt(Lst<Object> list, int i) {
+  static P3 pointAt(Lst<Object> list, int i, P3 pt) {
+    pt.set(floatAt(list, i++), floatAt(list, i++), floatAt(list, i));
+    return pt;
+  }
+
+  static float[] floatsAt(Lst<Object> a, int pt, float[] data, int len) {
+    if (a == null)
+      return null;
+    for (int i = 0; i < len; i++)
+      data[i] = floatAt(a, pt++);
+    return data;
+  }
+
+  static float floatAt(Lst<Object> list, int i) {
+    return (list == null ? 0 : ((Number) list.get(i)).floatValue());
+  }
+
+  @SuppressWarnings("unchecked")
+  static Lst<Object> listAt(Lst<Object> list, int i) {
+    if (list == null || i >= list.size())
+      return null;
+    Object o = list.get(i);
+    return (o instanceof Lst<?> ? (Lst<Object>) o : null);
+  }
+
+  /**
+   * return a map of lists of the type: [ [name1,...], [name2,...], ...]
+   * 
+   * @param list
+   * @return Hashtable
+   */
+  static Map<String, Lst<Object>> listToMap(Lst<Object> list) {
+    Hashtable<String, Lst<Object>> map = new Hashtable<String, Lst<Object>>();
+    for (int i = list.size(); --i >= 0;) {
+      Lst<Object> item = listAt(list, i);
+      if (item != null && item.size() > 0)
+        map.put(stringAt(item, 0), item);
+    }
+    return map;
+  }
+
+  static String stringAt(Lst<Object> list, int i) {
     if (!AU.isAB(list.get(i)))
       System.out.println("??");
     byte[] a = (byte[]) list.get(i);
@@ -1757,7 +1805,17 @@
     }
   }
 
+  static int colorSettingClamped(Lst<Object> c, P3 ptTemp) {
+    return getColorPt(c.get(c.size() < 6 || intAt(c, 4) == 0 ? 2 : 5), ptTemp);
+  }
+
   @SuppressWarnings("unchecked")
+  static int getColorPt(Object o, P3 ptTemp) {
+    return (o == null ? 0 : o instanceof Integer ? ((Integer) o).intValue() : 
CU
+        .colorPtToFFRGB(PyMOLReader.pointAt((Lst<Object>) o, 0, ptTemp)));
+  }
+
+  @SuppressWarnings("unchecked")
   private static Lst<Object> getMapList(Map<String, Object> map, String key) {
     return (Lst<Object>) map.get(key);
   }
@@ -1774,14 +1832,6 @@
     return bsReps;
   }
 
-  private float floatAt(Lst<Object> a, int i) {
-    return PyMOLScene.floatAt(a, i);
-  }
-
-  private Lst<Object> listAt(Lst<Object> list, int i) {
-    return PyMOLScene.listAt(list, i);
-  }
-
   /// PymolAtomReader interface
   
   @Override
@@ -1809,6 +1859,4 @@
     return atoms[iPrev].chainID != atoms[i].chainID;
   }
 
-
-
 }

Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java
===================================================================
--- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2016-08-10 07:00:36 UTC (rev 21200)
+++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLScene.java       
2016-08-10 12:57:12 UTC (rev 21201)
@@ -234,20 +234,20 @@
 
   @SuppressWarnings("unchecked")
   private int colorSetting(int i) {
-    Lst<Object> pos = listAt(settings, i);
+    Lst<Object> pos = PyMOLReader.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)));
+        .colorPtToFFRGB(PyMOLReader.pointAt((Lst<Object>) o, 0, ptTemp)));
   }
   
   @SuppressWarnings("unchecked")
   private P3 pointSetting(int i) {
     P3 pt = new P3();
-    Lst<Object> pos = listAt(settings, i);
+    Lst<Object> pos = PyMOLReader.listAt(settings, i);
     if (pos != null && pos.size() == 3) 
-      return pointAt((Lst<Object>) pos.get(2), 0, pt);
+      return PyMOLReader.pointAt((Lst<Object>) pos.get(2), 0, pt);
     return PyMOL.getDefaultSettingPt(i, pymolVersion, pt); 
   }
 
@@ -260,7 +260,7 @@
                      Lst<Object> listStateSettings, String ext) {
     objectName = name;
     objectHidden = isHidden;
-    objectNameID = (objectName == null ? null : PyMOLScene.fixName(objectName
+    objectNameID = (objectName == null ? null : fixName(objectName
         + ext));
     objectSettings = new Hashtable<Integer, Lst<Object>>();
     stateSettings = new Hashtable<Integer, Lst<Object>>();
@@ -285,7 +285,7 @@
   }
 
   @SuppressWarnings("unchecked")
-  private static void listToSettings(Lst<Object> list,
+  private void listToSettings(Lst<Object> list,
                               Map<Integer, Lst<Object>> objectSettings) {
     if (list != null && list.size() != 0) {
 //      if (debugging)
@@ -329,7 +329,7 @@
     labelPosition = new P3();
     try {
       Lst<Object> setting = getObjectSetting(PyMOL.label_position);
-      pointAt(listAt(setting, 2), 0, labelPosition);
+      PyMOLReader.pointAt(PyMOLReader.listAt(setting, 2), 0, labelPosition);
     } catch (Exception e) {
       // no problem.
     }
@@ -404,7 +404,7 @@
     smap.put("pymolFrame", frame);
     smap.put("generator", this);
     smap.put("name", name);
-    Lst<Object> view = listAt(thisScene, 0);
+    Lst<Object> view = PyMOLReader.listAt(thisScene, 0);
     if (view != null)
       smap.put("pymolView", getPymolView(view, false));
 
@@ -421,23 +421,23 @@
     Object[] reps = new Object[PyMOL.REP_LIST.length];
     for (int j = PyMOL.REP_LIST.length; --j >= 0;) {
       Lst<Object> list = htObjNames.get(sname + PyMOL.REP_LIST[j]);
-      Lst<Object> data = listAt(list, 5);
+      Lst<Object> data = PyMOLReader.listAt(list, 5);
       if (data != null && data.size() > 0)
-        reps[j] = listToMap(data);
+        reps[j] = PyMOLReader.listToMap(data);
     }
     smap.put("moleculeReps", reps);
 
     // there's no real point in getting 
     // get all colors from selector_secrets
     sname = "_!c_" + name + "_";
-    Lst<Object> colorection = listAt(thisScene, 3);
+    Lst<Object> colorection = PyMOLReader.listAt(thisScene, 3);
     int n = colorection.size();
     // [color/selEntry,color/selEntry,color/selEntry.....]
     // [3, 262,        0, 263,        4, 264,       .....]
     // see layer3/Selector.c SelectorColorectionApply
     Object[] colors = new Object[n / 2];
     for (int j = 0, i = 0; j < n; j += 2) {
-      int color = intAt(colorection, j);
+      int color = PyMOLReader.intAt(colorection, j);
       Lst<Object> c = htSecrets.get(sname + color);
       if (c != null && c.size() > 1)
         colors[i++] = new Object[] { Integer.valueOf(color), c.get(1) };
@@ -512,7 +512,7 @@
     String id = selection.get(0).toString();
     id = "_" + (id.equals("sele") ? id : "sele_" + id); 
     PyMOLGroup g = getGroup(id);
-    getSelectionAtoms(listAt(selection, 5), 0, g.bsAtoms);
+    getSelectionAtoms(PyMOLReader.listAt(selection, 5), 0, g.bsAtoms);
   }
 
   /**
@@ -526,7 +526,7 @@
   private BS getSelectionAtoms(Lst<Object> molecules, int istate, BS bs) {
     if (molecules != null)
       for (int j = molecules.size(); --j >= 0;)
-        selectAllAtoms(listAt(molecules, j), istate, bs);
+        selectAllAtoms(PyMOLReader.listAt(molecules, j), istate, bs);
     return bs;
   }
 
@@ -538,9 +538,9 @@
    * @param bs
    */
   private void selectAllAtoms(Lst<Object> obj, int istate, BS bs) {
-    String name = (String) obj.get(0);
+    String name = PyMOLReader.stringAt(obj, 0);
     setSceneObject(name, istate);
-    Lst<Object> atomList = listAt(obj, 1);
+    Lst<Object> atomList = PyMOLReader.listAt(obj, 1);
     int k0 = (istate == 0 ? 1 : istate);
     int k1 = (istate == 0 ? stateCount : istate);
     for (int k = k0; k <= k1; k++) {
@@ -570,7 +570,7 @@
       if (name.equals("all"))
         continue;
       Lst<Object> list = (Lst<Object>) e.getValue();
-      int tok = (intAt(list, 0) == 1 ? T.display : T.hide);
+      int tok = (PyMOLReader.intAt(list, 0) == 1 ? T.display : T.hide);
       if (tok == T.hide)
         htHiddenObjects.put(name, Boolean.TRUE);
       switch (getObjectType(name)) {
@@ -607,7 +607,7 @@
           MeasurementData[] mdList = htMeasures.get(name);
           if (mdList != null)
             addMeasurements(mdList, mdList[0].points.size(), null,
-                getBS(listAt(list, 2)), intAt(list, 3), null, true);
+                getBS(PyMOLReader.listAt(list, 2)), PyMOLReader.intAt(list, 
3), null, true);
         }
         info += "_*";
         break;
@@ -654,27 +654,17 @@
   private BS getBS(Lst<Object> list) {
     BS bs = new BS();
     for (int i = list.size(); --i >= 0;)
-      bs.set(intAt(list, i));
+      bs.set(PyMOLReader.intAt(list, i));
     return bs;
   }
 
   private void getBsAtoms(Lst<Object> list, int[] atomMap, BS bs) {
     for (int i = list.size(); --i >= 0;)
-      bs.set(atomMap[intAt(list, i)]);
+      bs.set(atomMap[PyMOLReader.intAt(list, i)]);
   }
 
-  private final static P3 ptTemp = new P3();
+  private final P3 ptTemp = new P3();
 
-  @SuppressWarnings("unchecked")
-  static int getColorPt(Object o) {
-    return (o == null ? 0 : o instanceof Integer ? ((Integer) o).intValue() : 
CU
-        .colorPtToFFRGB(pointAt((Lst<Object>) o, 0, ptTemp)));
-  }
-
-  static int intAt(Lst<Object> list, int i) {
-    return ((Number) list.get(i)).intValue();
-  }
-
   void setReaderObjects() {
     clearReaderData();
     finalizeObjects();
@@ -735,22 +725,22 @@
     int i = 0;
     // x-axis
     for (int j = 0; j < 3; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
     if (isViewObj)
       i++;
     // y-axis
     for (int j = 0; j < 3; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
     if (isViewObj)
       i++;
     // z-axis (not used)
     for (int j = 0; j < 3; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
     if (isViewObj)
       i += 5;
     // xTrans, yTrans, -distanceToCenter, center(x,y,z), distanceToSlab, 
distanceToDepth
     for (int j = 0; j < 8; j++)
-      pymolView[pt++] = floatAt(view, i++);
+      pymolView[pt++] = PyMOLReader.floatAt(view, i++);
 
     boolean isOrtho = booleanSetting(PyMOL.orthoscopic); // 23
     float fov = floatSetting(PyMOL.field_of_view); // 152
@@ -829,7 +819,7 @@
     if (htCarveSets.isEmpty())
       return;
     for (Entry<String, BS> e: htCarveSets.entrySet())
-      getSelectionAtoms(listAt(htObjNames.get(e.getKey()), 5), 0, 
e.getValue());
+      getSelectionAtoms(PyMOLReader.listAt(htObjNames.get(e.getKey()), 5), 0, 
e.getValue());
   }
 
   private void setGroupVisibilities() {
@@ -851,7 +841,7 @@
     htDefinedAtoms.put(getJmolName(name), bs);
   }
 
-  private static String getJmolName(String name) {
+  private String getJmolName(String name) {
     return "__" + fixName(name);
   }
 
@@ -958,7 +948,7 @@
         || (setting = uniqueSettings.get(Integer.valueOf((id << 10) + key))) 
== null)
       return pt;
     pt = new P3();
-    pointAt((Lst<Object>) setting.get(2), 0, pt);
+    PyMOLReader.pointAt((Lst<Object>) setting.get(2), 0, pt);
     Logger.info("Pymol unique setting for " + id + ": " + key + " = " + pt);
     return pt;
   }
@@ -998,32 +988,7 @@
     return setting;
   }
 
-  static P3 pointAt(Lst<Object> list, int i, P3 pt) {
-    pt.set(floatAt(list, i++), floatAt(list, i++), floatAt(list, i));
-    return pt;
-  }
-
-  static float floatAt(Lst<Object> list, int i) {
-    return (list == null ? 0 : ((Number) list.get(i)).floatValue());
-  }
-
-  static float[] floatsAt(Lst<Object> a, int pt, float[] data, int len) {
-    if (a == null)
-      return null;
-    for (int i = 0; i < len; i++)
-      data[i] = floatAt(a, pt++);
-    return data;
-  }
-
-  @SuppressWarnings("unchecked")
-  static Lst<Object> listAt(Lst<Object> list, int i) {
-    if (list == null || i >= list.size())
-      return null;
-    Object o = list.get(i);
-    return (o instanceof Lst<?> ? (Lst<Object>) o : null);
-  }
-
-  static float[] setLabelPosition(P3 offset, float[] labelPos) {
+  float[] setLabelPosition(P3 offset, float[] labelPos) {
     labelPos[0] = 1;
     labelPos[1] = offset.x;
     labelPos[2] = offset.y;
@@ -1069,8 +1034,8 @@
       if (isNew) {
         Lst<Object> points = new Lst<Object>();
         for (int i = 0; i < nCoord; i++, p += 3)
-          points.addLast(pointAt(list, p, new Point3fi()));
-        offset = floatsAt(listAt(offsets, index), 0, new float[7], 7);
+          points.addLast(PyMOLReader.pointAt(list, p, new Point3fi()));
+        offset = PyMOLReader.floatsAt(PyMOLReader.listAt(offsets, index), 0, 
new float[7], 7);
         if (offset == null)
           offset = setLabelPosition(labelPosition, new float[7]);
         md = mdList[index] = vwr.newMeasurementData(objectNameID + "_"
@@ -1126,10 +1091,6 @@
     return C.getColixTranslucent3(colix, translucency > 0, translucency);
   }
 
-  static int colorSettingClamped(Lst<Object> c) {
-    return getColorPt(c.get(c.size() < 6 || intAt(c, 4) == 0 ? 2 : 5));
-  }
-
   void setAtomColor(int atomColor) {
     atomColorList.addLast(Integer.valueOf(getColix(atomColor, 0)));
   }
@@ -1145,7 +1106,7 @@
     frameObj = null;
   }
 
-  private static String fixName(String name) {
+  private String fixName(String name) {
     char[] chars = name.toLowerCase().toCharArray();
     for (int i = chars.length; --i >= 0;)
       if (!PT.isLetterOrDigit(chars[i]))
@@ -1678,22 +1639,6 @@
     return bs;
   }
 
-  /**
-   * return a map of lists of the type: [ [name1,...], [name2,...], ...]
-   * 
-   * @param list
-   * @return Hashtable
-   */
-  static Map<String, Lst<Object>> listToMap(Lst<Object> list) {
-    Hashtable<String, Lst<Object>> map = new Hashtable<String, Lst<Object>>();
-    for (int i = list.size(); --i >= 0;) {
-      Lst<Object> item = PyMOLScene.listAt(list, i);
-      if (item != null && item.size() > 0)
-        map.put(PyMOLReader.bytesToString(item.get(0)), item);
-    }
-    return map;
-  }
-  
   Map<String, Object> setAtomDefs() {
     setGroupVisibilities();
     Map<String, Object> defs = new Hashtable<String, Object>();
@@ -1781,7 +1726,7 @@
     setSceneObject(objName, -1);
     int meshColor = (int) floatSetting(PyMOL.mesh_color);
     if (meshColor < 0)
-      meshColor = intAt(listAt(obj, 0), 2);
+      meshColor = PyMOLReader.intAt(PyMOLReader.listAt(obj, 0), 2);
     if (!isMep) {
       jo.setSize(meshWidth);
       jo.argb = PyMOL.getRGB(meshColor);

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


------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. http://sdm.link/zohodev2dev
_______________________________________________
Jmol-commits mailing list
Jmol-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jmol-commits

Reply via email to