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