From: <ha...@us...> - 2013-02-02 17:30:21
|
Revision: 17898 http://jmol.svn.sourceforge.net/jmol/?rev=17898&view=rev Author: hansonr Date: 2013-02-02 17:30:10 +0000 (Sat, 02 Feb 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-02-02 17:20:20 UTC (rev 17897) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-02-02 17:30:10 UTC (rev 17898) @@ -34,7 +34,7 @@ import org.jmol.adapter.smarter.Bond; import org.jmol.api.JmolDocument; import org.jmol.util.BoxInfo; -import org.jmol.util.Escape; +//import org.jmol.util.Escape; import org.jmol.util.Point3f; import org.jmol.util.StringXBuilder; @@ -50,49 +50,50 @@ final private static byte APPEND = 97; /* a */ final private static byte APPENDS = 101; /* e */ final private static byte BINFLOAT = 71; /* G */ - final private static byte BINGET = 104; /* h */ final private static byte BININT = 74; /* J */ final private static byte BININT1 = 75; /* K */ final private static byte BININT2 = 77; /* M */ - final private static byte BINPERSID = 81; /* Q */ final private static byte BINPUT = 113; /* q */ final private static byte BINSTRING = 84; /* T */ final private static byte BINUNICODE = 87; /* X */ final private static byte BUILD = 98; /* b */ - final private static byte DICT = 100; /* d */ - final private static byte DUP = 50; /* 2 */ final private static byte EMPTY_DICT = 125; /* } */ final private static byte EMPTY_LIST = 93; /* ] */ - final private static byte EMPTY_TUPLE = 41; /* ) */ - final private static byte FLOAT = 70; /* F */ - final private static byte GET = 103; /* g */ final private static byte GLOBAL = 99; /* c */ - final private static byte INST = 105; /* i */ - final private static byte INT = 73; /* I */ - final private static byte LIST = 108; /* l */ - final private static byte LONG = 76; /* L */ - final private static byte LONG_BINGET = 106; /* j */ final private static byte LONG_BINPUT = 114; /* r */ final private static byte MARK = 40; /* ( */ final private static byte NONE = 78; /* N */ final private static byte OBJ = 111; /* o */ - final private static byte PERSID = 80; /* P */ - final private static byte POP = 48; /* 0 */ - final private static byte POP_MARK = 49; /* 1 */ - final private static byte PUT = 112; /* p */ - final private static byte REDUCE = 82; /* R */ final private static byte SETITEM = 115; /* s */ final private static byte SETITEMS = 117; /* u */ final private static byte SHORT_BINSTRING = 85; /* U */ final private static byte STOP = 46; /* . */ - final private static byte STRING = 83; /* S */ - final private static byte TUPLE = 116; /* t */ - final private static byte UNICODE = 86; /* V */ +// final private static byte BINGET = 104; /* h */ +// final private static byte BINPERSID = 81; /* Q */ +// final private static byte DICT = 100; /* d */ +// final private static byte DUP = 50; /* 2 */ +// final private static byte EMPTY_TUPLE = 41; /* ) */ +// final private static byte FLOAT = 70; /* F */ +// final private static byte GET = 103; /* g */ +// final private static byte INST = 105; /* i */ +// final private static byte INT = 73; /* I */ +// final private static byte LIST = 108; /* l */ +// final private static byte LONG = 76; /* L */ +// final private static byte LONG_BINGET = 106; /* j */ +// final private static byte PERSID = 80; /* P */ +// final private static byte POP = 48; /* 0 */ +// final private static byte POP_MARK = 49; /* 1 */ +// final private static byte PUT = 112; /* p */ +// final private static byte REDUCE = 82; /* R */ +// final private static byte STRING = 83; /* S */ +// final private static byte TUPLE = 116; /* t */ +// final private static byte UNICODE = 86; /* V */ - private static final int MARK_BONDS = 40; - private static final int MARK_COORDS = 39; - private static final int MARK_ATOMS = 41; + + //private static final int MARK_BONDS = 40; + //private static final int MARK_COORDS = 39; + //private static final int MARK_ATOMS = 41; private static final int SET_FOV = 152; private JmolDocument binaryDoc; @@ -102,17 +103,20 @@ super.initializeReader(); } - private Map<Object, Object> temp = new Hashtable<Object, Object>(); +// private Map<Object, Object> temp = new Hashtable<Object, Object>(); private List<Object> list = new ArrayList<Object>(); private List<Integer> marks = new ArrayList<Integer>(); private List<Object> build = new ArrayList<Object>(); private int nextMark; - private List<Object> thisList; - private List<Object> coords; - private List<Object> bonds; +// private List<Object> thisList; +// private List<Object> coords; +// private List<Object> bonds; private Point3f xyzMin = Point3f.new3(1e6f, 1e6f, 1e6f); private Point3f xyzMax = Point3f.new3(-1e6f, -1e6f, -1e6f); + private int nModels; + private float thisBfactor; + private float thisOcc; @SuppressWarnings("unchecked") @Override @@ -143,20 +147,20 @@ case APPENDS: l = getObjects(getMark()); ((List<Object>) peek()).addAll(l); - System.out.println("appends " + l.size() + " to " + list.size() + " nextMark = " + nextMark); - switch (nextMark) { - case MARK_ATOMS: - addAtom(l); - break; - case MARK_COORDS: - if (coords == null) - coords = ((List<Object>) peek()); - break; - case MARK_BONDS: - if (bonds == null && l.size() == 7) - bonds = ((List<Object>) list.get(nextMark - 1)); - break; - } + //System.out.println("appends " + l.size() + " to " + list.size() + " nextMark = " + nextMark); +// switch (nextMark) { +// case MARK_ATOMS: +// addAtom(l); +// break; +// case MARK_COORDS: +// if (coords == null) +// coords = ((List<Object>) peek()); +// break; +// case MARK_BONDS: +// if (bonds == null && l.size() == 7) +// bonds = ((List<Object>) list.get(nextMark - 1)); +// break; +// } break; case BINFLOAT: d = binaryDoc.readDouble(); @@ -233,7 +237,7 @@ case SETITEM: o = pop(); s = (String) pop(); - System.out.println("setItem ." + s + " to " + list.size()); + //System.out.println("setItem ." + s + " to " + list.size()); ((Map<String, Object>) peek()).put(s, o); break; case SETITEMS: @@ -244,7 +248,7 @@ for (i = l.size(); --i >= 0;) { o = l.get(i); s = (String) l.get(--i); - System.out.println(" " + (mark + i) + " ." + s); + // System.out.println(" " + (mark + i) + " ." + s); map.put(s, o); } break; @@ -254,249 +258,333 @@ default: // not used? - System.out.println("PyMOL reader: " + b + " " + binaryDoc.getPosition()); + System.out.println("PyMOL reader error: " + b + " " + binaryDoc.getPosition()); - switch (b) { - case BINGET: - i = binaryDoc.readByte(); - push(temp.remove(Integer.valueOf(i))); - break; - case BINPERSID: - s = (String) pop(); - push(new Object[] { "persid", s }); // for now - break; - case DICT: - map = new Hashtable<String, Object>(); - mark = getMark(); - for (i = list.size(); i >= mark;) { - o = list.remove(--i); - s = (String) list.remove(--i); - map.put(s, o); - } - push(map); - break; - case DUP: - push(peek()); - break; - case EMPTY_TUPLE: - push(new Point3f()); - break; - case FLOAT: - s = readString(); - push(Double.valueOf(s)); - break; - case GET: - s = readString(); - o = temp.remove(s); - push(o); - break; - case INST: - l = getObjects(getMark()); - module = readString(); - name = readString(); - push(new Object[] { "inst", module, name, l }); - break; - case INT: - s = readString(); - try { - push(Integer.valueOf(Integer.parseInt(s))); - } catch (Exception e) { - System.out.println("INT too large: " + s + " @ " + binaryDoc.getPosition()); - push(Integer.valueOf(Integer.MAX_VALUE)); - } - break; - case LIST: - push(getObjects(getMark())); - break; - case LONG: - i = (int) binaryDoc.readLong(); - push(Long.valueOf(i)); - break; - case LONG_BINGET: - i = binaryDoc.readInt(); - push(temp.remove(Integer.valueOf(i))); - break; - case PERSID: - s = readString(); - push(new Object[] { "persid", s }); - break; - case POP: - pop(); - break; - case POP_MARK: - getObjects(getMark()); - break; - case PUT: - s = readString(); - temp.put(s, peek()); - break; - case REDUCE: - push(new Object[] { "reduce", pop(), pop() }); - break; - case STRING: - s = readString(); - push(Escape.unescapeUnicode(s)); - break; - case TUPLE: - l = getObjects(getMark()); - Point3f pt = new Point3f(); - pt.x = ((Double) l.get(0)).floatValue(); - pt.y = ((Double) l.get(1)).floatValue(); - pt.z = ((Double) l.get(2)).floatValue(); - break; - case UNICODE: - a = readLineBytes(); - s = new String(a, "UTF-8"); - push(s); - break; - } +// switch (b) { +// case BINGET: +// i = binaryDoc.readByte(); +// push(temp.remove(Integer.valueOf(i))); +// break; +// case BINPERSID: +// s = (String) pop(); +// push(new Object[] { "persid", s }); // for now +// break; +// case DICT: +// map = new Hashtable<String, Object>(); +// mark = getMark(); +// for (i = list.size(); i >= mark;) { +// o = list.remove(--i); +// s = (String) list.remove(--i); +// map.put(s, o); +// } +// push(map); +// break; +// case DUP: +// push(peek()); +// break; +// case EMPTY_TUPLE: +// push(new Point3f()); +// break; +// case FLOAT: +// s = readString(); +// push(Double.valueOf(s)); +// break; +// case GET: +// s = readString(); +// o = temp.remove(s); +// push(o); +// break; +// case INST: +// l = getObjects(getMark()); +// module = readString(); +// name = readString(); +// push(new Object[] { "inst", module, name, l }); +// break; +// case INT: +// s = readString(); +// try { +// push(Integer.valueOf(Integer.parseInt(s))); +// } catch (Exception e) { +// System.out.println("INT too large: " + s + " @ " + binaryDoc.getPosition()); +// push(Integer.valueOf(Integer.MAX_VALUE)); +// } +// break; +// case LIST: +// push(getObjects(getMark())); +// break; +// case LONG: +// i = (int) binaryDoc.readLong(); +// push(Long.valueOf(i)); +// break; +// case LONG_BINGET: +// i = binaryDoc.readInt(); +// push(temp.remove(Integer.valueOf(i))); +// break; +// case PERSID: +// s = readString(); +// push(new Object[] { "persid", s }); +// break; +// case POP: +// pop(); +// break; +// case POP_MARK: +// getObjects(getMark()); +// break; +// case PUT: +// s = readString(); +// temp.put(s, peek()); +// break; +// case REDUCE: +// push(new Object[] { "reduce", pop(), pop() }); +// break; +// case STRING: +// s = readString(); +// push(Escape.unescapeUnicode(s)); +// break; +// case TUPLE: +// l = getObjects(getMark()); +// Point3f pt = new Point3f(); +// pt.x = ((Double) l.get(0)).floatValue(); +// pt.y = ((Double) l.get(1)).floatValue(); +// pt.z = ((Double) l.get(2)).floatValue(); +// break; +// case UNICODE: +// a = readLineBytes(); +// s = new String(a, "UTF-8"); +// push(s); +// break; +// } } } process((Map<String, Object>) list.remove(0)); } -// chain => 1, # chain ID -// ac => 2, # alternate conformation indicator -// segid => 4, # segment ID -// -// resix => 0, # without insertion code, unlike "resno" -// resno => 3, # using this and not the sequence number (resix) to deal with boundary case of insertion code... untested -// residue => 5, # 3-letter identifier -// -// atomno => 22, # original PDB atom number -// atom => 6, # (e.g. CB, NZ) -// symbol => 7, # (e.g. C, N) -// type => 13, # internal index number of "atom name" -// mol2 => 8, # MOL2 atom type (i.e. N.am) -// charge => 18, # atom charge -// -// bf => 14, # temperature factor -// occ => 15, # occupany -// vdw => 16, # van der Waals radius -// -// color => 21, # color code index -// label => 9, # label text -// -// reps => 20, # representation flags -// ss => 10, # s.s. assignment, S/H/L/"" -// -// cartoon => 23, # cartoon type modifier -// -// ### UNMAPPED: 11, 12, 17, 19 - - @SuppressWarnings("unchecked") - private void addAtom(List<Object> list) { - if (list.size() != 47) { - System.out.println(list); - return; - } - thisList = list; - - int seqNo = getInt(0); - String chainID = getString(1); - String altLoc = getString(2); - String insCode = " "; //? - String group3 = getString(5); - if (group3.equals(" ")) - return; - String name = getString(6); - String sym = getString(7); - if (sym.equals(" ")) - sym = getString(7); - List<Object> list2 = (List<Object>) list.get(20); - boolean isHetero = ((Integer) list2.get(0)).intValue() == 1; - Atom atom = processAtom(name, altLoc.charAt(0), - group3, chainID.charAt(0), seqNo, insCode.charAt(0), - isHetero, sym); - if (!filterPDBAtom(atom, fileAtomIndex++)) - return; - int serNo = getInt(22); - int pt = getInt(36) * 3; - float x = getCoord(pt); - float y = getCoord(++pt); - float z = getCoord(++pt); - BoxInfo.addPointXYZ(x, y, z, xyzMin, xyzMax, 0); - //System.out.println(chainID + " " + fileAtomIndex + " " + serNo + " " + x + " " + y + " " + z); - int charge = 0; //? - processAtom2(atom, serNo, x, y, z, charge); + private static String getString(List<Object> list, int i) { + String s = (String) list.get(i); + return (s.length() == 0 ? " " : s); } - - private float getCoord(int pt) { - return ((Double) coords.get(pt)).floatValue(); - } - @Override - protected void setAdditionalAtomParameters(Atom atom) { - atom.bfactor = getFloat(14); - atom.occupancy = (int) (getFloat(15) * 100); + private static int getInt(List<Object> list, int i) { + return ((Integer) list.get(i)).intValue(); } - private String getString(int i) { - String s = (String) thisList.get(i); - return (s.length() == 0 ? " " : s); + private static float getFloat(List<Object> list, int i) { + return ((Double) list.get(i)).floatValue(); } - private int getInt(int i) { - return ((Integer) thisList.get(i)).intValue(); + @SuppressWarnings("unchecked") + private static List<Object> getList(List<Object> list, int i) { + if (list == null || list.size() <= i) + return null; + Object o = list.get(i); + return (o instanceof List<?> ? (List<Object>)o : null); } - private float getFloat(int i) { - return ((Double) thisList.get(i)).floatValue(); + @SuppressWarnings("unchecked") + private static List<Object> getMapList(Map<String, Object> map, String key) { + return (List<Object>) map.get(key); } - @SuppressWarnings("unchecked") private void process(Map<String, Object> map) { - connect(); - List<Object> view = (List<Object>) map.get("view"); - List<Object> settings = (List<Object>) map.get("settings"); + List<Object> view = getMapList(map, "view"); + List<Object> settings = getMapList(map, "settings"); + List<Object> names = getMapList(map, "names"); + for (int i = 1; i < names.size(); i++) { + processBranch(getList(names, i)); +// List<Object> item = getList(names, i); +// if (item == null) +// continue; +// System.out.println(i + " " + item.get(0) + " " +// + getList(getList(item, 5), 0)); + } +// System.out.println("--"); setView(view, settings); - List<Object> names = (List<Object>) map.get("names"); - for (int i = 0; i < names.size(); i++) { - List<Object> item = getList(names, i); - if (item == null) - continue; - //System.out.println(i + " " + item.get(0) + " " - // + getList(getList(item, 5), 0)); + } + + private final static int BRANCH_MOLECULE = 1; + private final static int BRANCH_MAPSURFACE = 2; + private final static int BRANCH_MAPMESH = 3; + private final static int BRANCH_MEASURE = 4; + private final static int BRANCH_CGO = 6; // compiled graphics object + private final static int BRANCH_SURFACE = 7; + private final static int BRANCH_GROUP = 12; + +// #cf. \pymol\layer1\PyMOLObject.h +// #define cObjectCallback 5 +// #define cObjectGadget 8 +// #define cObjectCalculator 9 +// #define cObjectSlice 10 +// #define cObjectAlignment 11 + + + private void processBranch(List<Object> branch) { + String name = (String) branch.get(0); + if (name.indexOf("_") == 0 || getInt(branch, 1) != 0) // otherwise, it's just a selection + return; + boolean isHidden = (getInt(branch, 2) != 1); + System.out.println("Branch " + name + " isHidden = " + isHidden); + int type = getInt(branch, 4); + List<Object> deepBranch = getList(branch, 5); + switch (type) { + case BRANCH_MOLECULE: + processModels(deepBranch); + break; + case BRANCH_MAPSURFACE: + break; + case BRANCH_MAPMESH: + break; + case BRANCH_MEASURE: + break; + case BRANCH_CGO: + break; + case BRANCH_SURFACE: + break; + case BRANCH_GROUP: + break; } - System.out.println("--"); + } + + private int atomCount; + private int[] atomMap; + private void processModels(List<Object> deepBranch) { + processCryst(getList(deepBranch, 10)); + atomCount = atomSetCollection.getAtomCount(); + atomMap = new int[getInt(deepBranch, 3)]; + List<Object> coordBranches = getList(deepBranch, 4); + List<Object> bonds = getList(deepBranch, 6); + List<Object> pymolAtoms = getList(deepBranch, 7); + System.out.println("PyMOL model count = " + coordBranches.size()); + int lastEnd = -1; + for (int i = 0; i < coordBranches.size(); i++) { + + List<Object> coordBranch = getList(coordBranches, i); + int thisCount = getInt(coordBranch, 0); + int thisEnd = getInt(coordBranch, 1); + if (thisEnd != lastEnd) { + model(++nModels); + lastEnd = thisEnd; + } + //if (nModels < 9) + //continue; + List<Object> coords = getList(coordBranch, 2); + List<Object> pointers = getList(coordBranch, 3); + int n = pointers.size(); + for (int j = 0; j < n; j++) { + int pt = getInt(pointers, j); + atomMap[pt] = atomCount++; + addAtom(pymolAtoms, pt, coords); + } + } + processBonds(bonds); } - @SuppressWarnings("unchecked") - private void connect() { - if (bonds == null) { - System.out.println("bonds not found"); - return; - } +//chain => 1, # chain ID +//ac => 2, # alternate conformation indicator +//segid => 4, # segment ID +// +//resix => 0, # without insertion code, unlike "resno" +//resno => 3, # using this and not the sequence number (resix) to deal with boundary case of insertion code... untested +//residue => 5, # 3-letter identifier +// +//atomno => 22, # original PDB atom number +//atom => 6, # (e.g. CB, NZ) +//symbol => 7, # (e.g. C, N) +//type => 13, # internal index number of "atom name" +//mol2 => 8, # MOL2 atom type (i.e. N.am) +//charge => 18, # atom charge +// +//bf => 14, # temperature factor +//occ => 15, # occupany +//vdw => 16, # van der Waals radius +// +//color => 21, # color code index +//label => 9, # label text +// +//reps => 20, # representation flags +//ss => 10, # s.s. assignment, S/H/L/"" +// +//cartoon => 23, # cartoon type modifier +// +//### UNMAPPED: 11, 12, 17, 19 + +private void addAtom(List<Object> pymolAtoms, int pt, List<Object> coords) { + List<Object> a = getList(pymolAtoms, pt); + int seqNo = getInt(a, 0); + String chainID = getString(a, 1); + String altLoc = getString(a, 2); + String insCode = " "; //? + String group3 = getString(a, 5); + if (group3.length() > 3) + group3 = group3.substring(0, 3); + if (group3.equals(" ")) + group3 = "UNK"; + String name = getString(a, 6); + String sym = getString(a, 7); + if (sym.equals(" ")) + sym = getString(a, 7); + List<Object> list2 = getList(a, 20); + boolean isHetero = (getInt(list2, 0) == 1); + Atom atom = processAtom(name, altLoc.charAt(0), + group3, chainID.charAt(0), seqNo, insCode.charAt(0), + isHetero, sym); + if (!filterPDBAtom(atom, fileAtomIndex++)) + return; + int serNo = getInt(a, 22); + int cpt = getInt(a, 36) * 3; + float x = getFloat(coords, cpt); + float y = getFloat(coords, ++cpt); + float z = getFloat(coords, ++cpt); + BoxInfo.addPointXYZ(x, y, z, xyzMin, xyzMax, 0); + //System.out.println(chainID + " " + fileAtomIndex + " " + serNo + " " + x + " " + y + " " + z); + int charge = 0; //? + thisBfactor = getFloat(a, 14); + thisOcc = getFloat(a, 15); + processAtom2(atom, serNo, x, y, z, charge); +} + +@Override +protected void setAdditionalAtomParameters(Atom atom) { + atom.bfactor = thisBfactor; + atom.occupancy = (int) (thisOcc * 100); +} + + + private void processBonds(List<Object> bonds) { for (int i = 0; i < bonds.size(); i++) { - thisList = (List<Object>) bonds.get(i); - int order = getInt(2); + List<Object> b = getList(bonds, i); + int order = getInt(b, 2); if (order < 1 || order > 3) - order = 1; + order = 1; // TODO: hydrogen bonds? - //System.out.println(thisList); - try { - atomSetCollection.addBond(new Bond(getInt(0), getInt(1), order)); - } catch (Exception e) { - // ignore - some sort of phantom atom - } + int ia = atomMap[getInt(b, 0)]; + int ib = atomMap[getInt(b, 1)]; + if (ia == 2198 && ib==2157) + System.out.println("bond " + i + " " + getInt(b, 0) + " " + getInt(b, 1) + " / " + ia + " " + ib); + atomSetCollection.addBond(new Bond(ia, ib, order)); } } - @SuppressWarnings("unchecked") + private void processCryst(List<Object> cryst) { + if (cryst == null || cryst.size() == 0) + return; + List<Object> l = getList(cryst, 0); + List<Object> a = getList(cryst, 1); + setUnitCell(getFloat(l, 0), getFloat(l, 1), getFloat(l, 2), + getFloat(a, 0), getFloat(a, 1), getFloat(a, 2)); + setSpaceGroupName(getString(cryst, 2)); + } + private void setView(List<Object> view, List<Object> settings) { - thisList = (List<Object>) settings.get(SET_FOV); - float fov = getFloat(2); - - thisList = view; + float fov = getFloat(getList(settings, SET_FOV), 2); StringXBuilder sb = new StringXBuilder(); float d = Math.abs(xyzMax.x-xyzMin.x); d = Math.max(d, Math.abs(xyzMax.y-xyzMin.y)); d = Math.max(d, Math.abs(xyzMax.z-xyzMin.z)); d /= 2; //float fov = getFloat(24); - float f = Math.abs(getFloat(18) - getFloat(21)); - System.out.println("fov, range: " + fov + " " + getFloat(18) + " " + getFloat(21) + " " + f); + float f = Math.abs(getFloat(view, 18) - getFloat(view, 21)); + System.out.println("fov, range: " + fov + " " + getFloat(view, 18) + " " + getFloat(view, 21) + " " + f); sb.append("{ p2j_ar = (_width+0.0) / (_height+0.0); p2j_fov = ").appendF(fov) .append(";if( p2j_ar < 1) { p2j_fov*=p2j_ar};") .append("zoom @{(").appendF(d).append(" / (").appendF(f) @@ -504,18 +592,18 @@ sb.append("center {") - .appendF(getFloat(19)).append(" ") - .appendF(getFloat(20)).append(" ") - .appendF(getFloat(21)).append("};"); + .appendF(getFloat(view, 19)).append(" ") + .appendF(getFloat(view, 20)).append(" ") + .appendF(getFloat(view, 21)).append("};"); sb.append("rotate @{quaternion({") // only the first two rows are needed - .appendF(getFloat(0)).append(" ") - .appendF(getFloat(1)).append(" ") - .appendF(getFloat(2)).append("}{") - .appendF(getFloat(4)).append(" ") - .appendF(getFloat(5)).append(" ") - .appendF(getFloat(6)).append("})};"); - sb.append("translate X ").appendF(getFloat(16)).append(" angstroms;"); - sb.append("translate Y ").appendF(-getFloat(17)).append(" angstroms;"); + .appendF(getFloat(view, 0)).append(" ") + .appendF(getFloat(view, 1)).append(" ") + .appendF(getFloat(view, 2)).append("}{") + .appendF(getFloat(view, 4)).append(" ") + .appendF(getFloat(view, 5)).append(" ") + .appendF(getFloat(view, 6)).append("})};"); + sb.append("translate X ").appendF(getFloat(view, 16)).append(" angstroms;"); + sb.append("translate Y ").appendF(-getFloat(view, 17)).append(" angstroms;"); @@ -524,14 +612,6 @@ } - @SuppressWarnings("unchecked") - private static List<Object> getList(List<Object> list, int i) { - if (list == null || list.size() <= i) - return null; - Object o = list.get(i); - return (o instanceof List<?> ? (List<Object>)o : null); - } - private List<Object> getObjects(int mark) { int n = list.size() - mark; List<Object> args = new ArrayList<Object>(); @@ -542,10 +622,10 @@ return args; } - private byte[] readLineBytes() throws Exception { - String s = readString(); - return s.getBytes(); - } +// private byte[] readLineBytes() throws Exception { +// String s = readString(); +// return s.getBytes(); +// } private String readString() throws Exception { StringXBuilder sb = new StringXBuilder(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-02-04 22:22:54
|
Revision: 17900 http://jmol.svn.sourceforge.net/jmol/?rev=17900&view=rev Author: hansonr Date: 2013-02-04 22:22:45 +0000 (Mon, 04 Feb 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-02-04 21:56:52 UTC (rev 17899) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-02-04 22:22:45 UTC (rev 17900) @@ -44,7 +44,6 @@ import org.jmol.util.Colix; import org.jmol.util.Escape; import org.jmol.util.Logger; -import org.jmol.util.Matrix4f; import org.jmol.util.Point3f; import org.jmol.util.StringXBuilder; import org.jmol.viewer.JmolConstants; @@ -465,7 +464,6 @@ case REP_NONBONDED: f = getFloatSetting(PyMOL.nonbonded_size); ss = new ShapeSettings(JmolConstants.SHAPE_BALLS, bs, null); - System.out.println(shapeID + " " + f + " @" + bs.nextSetBit(0)); ss.setRadiusData(new RadiusData(null, f, RadiusData.EnumType.FACTOR, EnumVdw.AUTO)); ss.setColors(colixes, 0); shapes.add(ss); @@ -474,7 +472,6 @@ case REP_SPHERES: f = (shapeID == REP_NBSPHERES ? 1 : getFloatSetting(PyMOL.sphere_scale)); ss = new ShapeSettings(JmolConstants.SHAPE_BALLS, bs, null); - System.out.println(shapeID + " " + f + " @" + bs.nextSetBit(0)); ss.setRadiusData(new RadiusData(null, f, RadiusData.EnumType.FACTOR, EnumVdw.AUTO)); ss.setColors(colixes, 0); shapes.add(ss); @@ -507,13 +504,11 @@ bs.and(reps[REP_CARTOON]); if (bs.isEmpty()) return; - System.out.println(key + " " + bs); ShapeSettings ss = new ShapeSettings(JmolConstants.SHAPE_CARTOON, bs, null); ss.setColors(colixes, getFloatSetting(PyMOL.cartoon_transparency)); ss.setSize(getFloatSetting(sizeID) * factor); shapes.add(ss); } - private float getRotationRadius() { Point3f center = Point3f.new3( @@ -536,13 +531,11 @@ } private void setView(StringXBuilder sb, List<Object> view) { + sb.append("set navigationMode off; set zoomLarge false;"); float modelWidth = 2 * getRotationRadius(); - //Math.max(Math.max(Math.abs(xyzMax.x - xyzMin.x), Math - // .abs(xyzMax.y - xyzMin.y)), Math.abs(xyzMax.z - xyzMin.z)); - // calculate Jmol camera position, which is in screen widths, // and is from the front of the screen, not the center. @@ -566,11 +559,6 @@ Point3f center = Point3f.new3(getFloat(view, 19), getFloat(view, 20), getFloat(view, 21)); - // sb.append("{ p2j_ar = (_width+0.0) / (_height+0.0); p2j_fov = ").appendF( - // fov).append(";if( p2j_ar < 1) { p2j_fov*=p2j_ar};").append("zoom @{(") - // .appendF(d).append(" / (").appendF(f).append( - // " * ( sin(p2j_fov/2.0) / cos(p2j_fov/2.0) ) ) * 100 )} };"); - sb.append("center ").append(Escape.escapePt(center)).append(";"); sb.append("rotate @{quaternion({") // only the first two rows are needed @@ -584,7 +572,6 @@ boolean depthCue = getBooleanSetting(PyMOL.depth_cue); // 84 sb.append("set zShade " + depthCue + ";"); - if (depthCue) { float fog_start = getFloatSetting(PyMOL.fog_start); // 192 sb.append("set zshadePower 2;set zslab " + (fog_start * 100) + "; set zdepth 0;"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-02-04 23:41:52
|
Revision: 17901 http://jmol.svn.sourceforge.net/jmol/?rev=17901&view=rev Author: hansonr Date: 2013-02-04 23:41:42 +0000 (Mon, 04 Feb 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-02-04 22:22:45 UTC (rev 17900) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-02-04 23:41:42 UTC (rev 17901) @@ -73,6 +73,8 @@ private short[] colixes; private boolean isStateScript; + private boolean valence; + @Override protected void initializeReader() throws Exception { isBinary = true; @@ -97,11 +99,14 @@ } private BitSet[] reps = new BitSet[17]; + private float cartoonTranslucency; private void process(Map<String, Object> map) { for (int i = 0; i < 17; i++) reps[i] = BitSet.newN(1000); settings = getMapList(map, "settings"); + valence = getBooleanSetting(PyMOL.valence); + cartoonTranslucency = getFloatSetting(PyMOL.cartoon_transparency); List<Object> names = getMapList(map, "names"); for (int i = 1; i < names.size(); i++) { processBranch(getList(names, i)); @@ -200,16 +205,12 @@ processBranchModels(deepBranch); break; case BRANCH_MAPSURFACE: - break; case BRANCH_MAPMESH: - break; case BRANCH_MEASURE: - break; case BRANCH_CGO: - break; case BRANCH_SURFACE: - break; case BRANCH_GROUP: + System.out.println("Unprocessed branch type " + type); break; } } @@ -237,6 +238,7 @@ for (int idx = 0; idx < n; idx++) addAtom(pymolAtoms, getInt(idxToAtm, idx), idx, coords); } + System.out.println( " " + (atomCount - atomCount0) + " atoms"); processStructures(); processBonds(bonds); } @@ -376,7 +378,6 @@ } private void processBonds(List<Object> bonds) { - boolean valence = getBooleanSetting(PyMOL.valence); bsBonded.clear(atomCount); // sets length for (int i = 0; i < bonds.size(); i++) { List<Object> b = getList(bonds, i); @@ -493,7 +494,14 @@ setCartoon("S", PyMOL.cartoon_rect_length, 2); setCartoon("L", PyMOL.cartoon_loop_radius, 2); break; + case REP_SURFACE: // = 2; + case REP_LABELS: // = 3; + case REP_BACKBONE: // = 6; + case REP_MESH: // = 8; + case REP_DOTS: // = 9; + case REP_DASHES: // = 10; default: + System.out.println("Unprocessed representation type " + shapeID); } } @@ -505,7 +513,7 @@ if (bs.isEmpty()) return; ShapeSettings ss = new ShapeSettings(JmolConstants.SHAPE_CARTOON, bs, null); - ss.setColors(colixes, getFloatSetting(PyMOL.cartoon_transparency)); + ss.setColors(colixes, cartoonTranslucency); ss.setSize(getFloatSetting(sizeID) * factor); shapes.add(ss); } @@ -532,7 +540,7 @@ private void setView(StringXBuilder sb, List<Object> view) { - sb.append("set navigationMode off; set zoomLarge false;"); + sb.append("set navigationMode off; set zoomLarge false;set measurementUnits ANGSTROMS;color measures NONE;"); float modelWidth = 2 * getRotationRadius(); @@ -577,9 +585,14 @@ sb.append("set zshadePower 2;set zslab " + (fog_start * 100) + "; set zdepth 0;"); } - boolean orthographic = getBooleanSetting(PyMOL.orthoscopic); - sb.append("set perspectiveDepth " + !orthographic + ";"); - + sb.append("set perspectiveDepth " + (!getBooleanSetting(PyMOL.orthoscopic)) + ";"); + sb.append("set measurements " + ((int) (getFloatSetting(PyMOL.dash_width) + 0.5)) + ";"); + sb.append("set traceAlpha " + getBooleanSetting(PyMOL.cartoon_round_helices) + ";"); + sb.append("set cartoonRockets " + getBooleanSetting(PyMOL.cartoon_cylindrical_helices) + ";"); + sb.append("set ribbonBorder " + getBooleanSetting(PyMOL.cartoon_fancy_helices) + ";"); + //{ command => 'set hermiteLevel -4', comment => 'so that SS reps have some thickness' }, + //{ command => 'set ribbonAspectRatio 8', comment => 'degree of W/H ratio, but somehow not tied directly to actual width parameter...' }, + sb.append("background " + getList(settings, PyMOL.bg_rgb).get(2) + ";"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-03-02 18:04:29
|
Revision: 17959 http://jmol.svn.sourceforge.net/jmol/?rev=17959&view=rev Author: hansonr Date: 2013-03-02 18:04:21 +0000 (Sat, 02 Mar 2013) Log Message: ----------- PyMOL reader enhancements Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-03-02 17:23:01 UTC (rev 17958) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-03-02 18:04:21 UTC (rev 17959) @@ -542,7 +542,8 @@ BS bs = ssMapSeq.get(ss); if (bs == null) ssMapSeq.put(ss, bs = new BS()); - if (seqNo >= MIN_RESNO) + if (seqNo >= MIN_RESNO + && (!ss.equals(" ") || name.equals("CA"))) bs.set(seqNo - MIN_RESNO); if (ssMapAtom.get(ss) == null) ssMapAtom.put(ss, new BS()); @@ -589,10 +590,12 @@ processSS(ssMapSeq.get("H"), ssMapAtom.get("H"), EnumStructure.HELIX, 0); processSS(ssMapSeq.get("S"), ssMapAtom.get("S"), EnumStructure.SHEET, 1); processSS(ssMapSeq.get("L"), ssMapAtom.get("L"), EnumStructure.TURN, 0); + processSS(ssMapSeq.get(" "), ssMapAtom.get(" "), EnumStructure.NONE, 0); ssMapSeq = new Hashtable<String, BS>(); } - private void processSS(BS bsSeq, BS bsAtom, EnumStructure type, int strandCount) { + private void processSS(BS bsSeq, BS bsAtom, EnumStructure type, + int strandCount) { if (bsSeq == null) return; int istart = -1; @@ -621,14 +624,16 @@ } else { inew = -1; } - Structure structure = new Structure(imodel, type, type, type.toString(), - ++strucNo, strandCount); - Atom a = atoms[istart]; - Atom b = atoms[iend]; + if (type != EnumStructure.NONE) { + Structure structure = new Structure(imodel, type, type, + type.toString(), ++strucNo, strandCount); + Atom a = atoms[istart]; + Atom b = atoms[iend]; + structure.set(a.chainID, a.sequenceNumber, a.insertionCode, b.chainID, + b.sequenceNumber, b.insertionCode); + atomSetCollection.addStructure(structure); + } bsAtom.setBits(istart, iend + 1); - structure.set(a.chainID, a.sequenceNumber, a.insertionCode, b.chainID, - b.sequenceNumber, b.insertionCode); - atomSetCollection.addStructure(structure); istart = iend = inew; } } @@ -794,6 +799,7 @@ setCartoon("H", PyMOL.cartoon_oval_length, 2); setCartoon("S", PyMOL.cartoon_rect_length, 2); setCartoon("L", PyMOL.cartoon_loop_radius, 2); + setCartoon(" ", PyMOL.cartoon_loop_radius, 2); break; case REP_SURFACE: // = 2; // must be done for each model This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-04-02 14:52:45
|
Revision: 18062 http://sourceforge.net/p/jmol/code/18062 Author: hansonr Date: 2013-04-02 14:52:39 +0000 (Tue, 02 Apr 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-02 13:45:56 UTC (rev 18061) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-02 14:52:39 UTC (rev 18062) @@ -120,7 +120,7 @@ private Map<String, Object> pymol = new Hashtable<String, Object>(); private JmolList<BS> lstStates = new JmolList<BS>(); - private Map<String, Object> names = new Hashtable<String, Object>(); + private Map<String, Object> htNames = new Hashtable<String, Object>(); private JmolList<P3[]> lstTrajectories = new JmolList<P3[]>(); private int currentFrame = -1; private boolean allStates; @@ -183,8 +183,8 @@ } private void setDefinitions() { - modelSettings.addLast(new ModelSettings(T.define, null, names)); - appendLoadNote(viewer.getAtomDefs(names)); + modelSettings.addLast(new ModelSettings(T.define, null, htNames)); + appendLoadNote(viewer.getAtomDefs(htNames)); } private int getTotalAtomCount(JmolList<Object> names) { @@ -385,7 +385,7 @@ allStates = true; BS bsState = null; BS bsAtoms = BS.newN(atomCount0 + pymolAtoms.size()); - names.put(branchName.toLowerCase(), bsAtoms); + addName(branchName, bsAtoms); if (isMovie) { // we create only one model and put all atoms into it. if (nModels == 0) @@ -449,7 +449,7 @@ bsState = lstStates.get(i); } else { bsAtoms = BS.newN(atomCount0 + pymolAtoms.size()); - names.put(name, bsAtoms); + addName(name, bsAtoms); } processStructures(); setSurface(); @@ -466,6 +466,14 @@ processBonds(bonds); } + private void addName(String name, BS bs) { + char[] chars = name.toLowerCase().toCharArray(); + for (int i = chars.length; --i >= 0;) + if (!Character.isLetterOrDigit(chars[i])) + chars[i] = '_'; + htNames.put(String.valueOf(chars), bs); + } + private static int getBranchType(JmolList<Object> branch) { return getInt(branch, 4); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-04-12 07:00:32
|
Revision: 18103 http://sourceforge.net/p/jmol/code/18103 Author: hansonr Date: 2013-04-12 07:00:28 +0000 (Fri, 12 Apr 2013) Log Message: ----------- ___JmolVersion="13.1.15_dev_2013.04.12a" TODO: PyMOL simple scripted movies; some movies broken code: PyMOL unique_settings for atoms and bonds Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-12 06:47:24 UTC (rev 18102) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-12 07:00:28 UTC (rev 18103) @@ -723,8 +723,10 @@ int id = getInt(atomSettings, 0); JmolList<Object> mySettings = (JmolList<Object>) atomSettings.get(1); for (int j = mySettings.size(); --j >= 0;) { - JmolList<Object> setting = (JmolList<Object>) mySettings.get(j); - uniqueSettings.put(Integer.valueOf(id * 1000 + getInt(setting, 0)), setting); + JmolList<Object> setting = (JmolList<Object>) mySettings.get(j); + int uid = id * 1000 + getInt(setting, 0); + uniqueSettings.put(Integer.valueOf(uid), setting); + System.out.println("PyMOL unique setting " + id + " " + setting); } } } @@ -873,7 +875,7 @@ atom.cartoonType = getInt(a, 23); atom.flags = getInt(a, 24); atom.bonded = getInt(a, 25) != 0; - if (getInt(a, 40) == 1) + if (a.size() > 40 && getInt(a, 40) == 1) atom.uniqueID = getInt(a, 32); if ((atom.flags & PyMOL.FLAG_NOSURFACE) != 0) { //System.out.println(atom.atomName + " " + atom.group3 + " " + Integer.toHexString(atom.flags)); @@ -988,7 +990,7 @@ bsBondedPyMOL.set(ib); Bond bond = new Bond(ia, ib, order); bondList.addLast(bond); - boolean hasID = (getInt(b, 6) != 0); + boolean hasID = (b.size() > 6 && getInt(b, 6) != 0); if (hasID) { int id = getInt(b, 5); bond.radius = getUniqueFloat(id, PyMOL.stick_radius, 0) / 2; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-04-17 12:37:54
|
Revision: 18120 http://sourceforge.net/p/jmol/code/18120 Author: hansonr Date: 2013-04-17 12:37:50 +0000 (Wed, 17 Apr 2013) Log Message: ----------- PyMOL nucleic cartoons fix Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-17 11:56:07 UTC (rev 18119) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-17 12:37:50 UTC (rev 18120) @@ -850,9 +850,6 @@ group3 = group3.substring(0, 3); if (group3.equals(" ")) group3 = "UNK"; - boolean isNucleic = (nucleic.indexOf(group3) >= 0); - if (isNucleic) - bsNucleic.set(atomCount); String sym = getString(a, 7); if (sym.equals("A")) sym = "C"; @@ -862,9 +859,12 @@ isHetero, sym); if (!filterPDBAtom(atom, fileAtomIndex++)) return false; + boolean isNucleic = (nucleic.indexOf(group3) >= 0); + if (isNucleic) + bsNucleic.set(atomCount); atom.label = getString(a, 9); String ss = getString(a, 10); - if (seqNo >= MIN_RESNO && (!ss.equals(" ") || name.equals("CA"))) { + if (seqNo >= MIN_RESNO && (!ss.equals(" ") || name.equals("CA") || isNucleic)) { if (ssMapAtom.get(ss) == null) ssMapAtom.put(ss, new BS()); BS bs = ssMapSeq.get(ss); @@ -1347,6 +1347,7 @@ ModelSettings ss = new ModelSettings(JC.SHAPE_CARTOON, bs, null); ss.setColors(colixes, cartoonTranslucency); ss.setSize(getFloatSetting(sizeID) * factor); + System.out.println(key + " " + sizeID + " " + factor + " " + cartoonTranslucency + " " + bs); modelSettings.addLast(ss); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-04-21 17:18:46
|
Revision: 18138 http://sourceforge.net/p/jmol/code/18138 Author: hansonr Date: 2013-04-21 17:18:43 +0000 (Sun, 21 Apr 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-21 17:16:24 UTC (rev 18137) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-21 17:18:43 UTC (rev 18138) @@ -793,8 +793,12 @@ float factor = 1f; switch (fontID) { default: - // Jmol doesn't support sansserif mono -- just using sans here - face = "sans"; + case 11: + case 12: + case 13: + case 14: + // 11-14: Jmol doesn't support sansserif mono -- just using SansSerif here + face = "SansSerif"; break; case 0: case 1: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-04-22 00:14:27
|
Revision: 18142 http://sourceforge.net/p/jmol/code/18142 Author: hansonr Date: 2013-04-22 00:14:20 +0000 (Mon, 22 Apr 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-21 20:43:26 UTC (rev 18141) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-04-22 00:14:20 UTC (rev 18142) @@ -178,6 +178,10 @@ @SuppressWarnings("unchecked") private void process(Map<String, Object> map) { + pymolVersion = ((Integer) map.get("version")).intValue(); + String s = "PyMOL version: " + pymolVersion; + Logger.info(s); + appendLoadNote(s); logging = (viewer.getLogFile().length() > 0); JmolList<Object> names = getMapList(map, "names"); for (Map.Entry<String, Object> e : map.entrySet()) { @@ -213,8 +217,6 @@ } addColors(getMapList(map, "colors")); settings = getMapList(map, "settings"); - pymolVersion = ((Integer) map.get("version")).intValue(); - appendLoadNote("PyMOL version: " + pymolVersion); setVersionSettings(); atomSetCollection.setAtomSetCollectionAuxiliaryInfo("settings", settings); setUniqueSettings(getMapList(map, "unique_settings")); @@ -257,7 +259,7 @@ note = "PyMOL dimensions?"; } appendLoadNote(note); - System.out.println(note); + Logger.info(note); } totalAtomCount = getTotalAtomCount(names); Logger.info("PyMOL total atom count = " + totalAtomCount); @@ -396,7 +398,7 @@ v = ((Number) setting.get(2)).floatValue(); Logger.info("Pymol setting " + i + " = " + v); } catch (Exception e) { - System.out.println("PyMOL version " + pymolVersion + Logger.info("PyMOL " + pymolVersion + " does not have setting " + i); } return v; @@ -436,7 +438,7 @@ case BRANCH_CGO: // 6 case BRANCH_SURFACE: // 7 case BRANCH_GROUP: //12 - System.out.println("Unprocessed branch type " + type); + Logger.error("Unprocessed branch type " + type); break; } } @@ -578,7 +580,7 @@ pymolAtoms = getBranchAtoms(deepBranch); int ns = states.size(); if (ns > 1) - System.out.println(ns + " PyMOL states"); + Logger.info(ns + " PyMOL states"); if (ns == 1) allStates = true; BS bsState = null; @@ -605,7 +607,7 @@ JmolList<Object> state = getList(states, i); JmolList<Object> idxToAtm = getList(state, 3); if (idxToAtm == null) { - System.out.println("movie error: no idxToAtm"); + Logger.error("movie error: no idxToAtm"); continue; } for (int j = idxToAtm.size(); --j >= 0;) @@ -876,7 +878,6 @@ private void setUniqueSettings(JmolList<Object> list) { uniqueSettings = new Hashtable<Integer, JmolList<Object>>(); if (list != null && list.size() != 0) { - //Logger.info(list.toString()); for (int i = list.size(); --i >= 0;) { JmolList<Object> atomSettings = (JmolList<Object>) list.get(i); int id = getInt(atomSettings, 0); @@ -885,7 +886,7 @@ JmolList<Object> setting = (JmolList<Object>) mySettings.get(j); int uid = id * 1000 + getInt(setting, 0); uniqueSettings.put(Integer.valueOf(uid), setting); - System.out.println("PyMOL unique setting " + id + " " + setting); + Logger.info("PyMOL unique setting " + id + " " + setting); } } } @@ -1380,7 +1381,7 @@ break; default: if (shapeID < REP_JMOL_MIN) - System.out.println("Unprocessed representation type " + shapeID); + Logger.error("Unprocessed representation type " + shapeID); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-05-23 23:47:34
|
Revision: 18246 http://sourceforge.net/p/jmol/code/18246 Author: hansonr Date: 2013-05-23 23:47:30 +0000 (Thu, 23 May 2013) Log Message: ----------- ___JmolVersion="13.1.16_dev_2013.05.23a" PyMOL: measurement font/offsets enabled -- adds measure ID "xxx" FONT scale face style -- adds measure ID "xxx" OFFSET [mode, sx, sy, sz, ax, ay, az] -- adds measure ID "xxx" OFFSET {sx, sy, sz} code: Text.java, Object2d.java moved from shapes to modelset Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-23 23:45:04 UTC (rev 18245) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-23 23:47:30 UTC (rev 18246) @@ -1866,7 +1866,7 @@ @SuppressWarnings("unchecked") private void processScenes(Map<String, Object> map) { JmolList<Object> order = getMapList(map, "scene_order"); - if (order.size() == 0) + if (order == null || order.size() == 0) return; Map<String, Object> scenes = (Map<String, Object>) map.get("scene_dict"); //JmolList<Object> names = getMapList(map, "names"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-05-24 02:51:03
|
Revision: 18247 http://sourceforge.net/p/jmol/code/18247 Author: hansonr Date: 2013-05-24 02:50:58 +0000 (Fri, 24 May 2013) Log Message: ----------- ___JmolVersion="13.1.16_dev_2013.05.23a" PyMOL: measurement font/offsets enabled -- adds measure ID "xxx" FONT scale face style -- adds measure ID "xxx" OFFSET [mode, sx, sy, sz, ax, ay, az] -- adds measure ID "xxx" OFFSET {sx, sy, sz} code: Text.java, Object2d.java moved from shapes to modelset Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-23 23:47:30 UTC (rev 18246) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-24 02:50:58 UTC (rev 18247) @@ -1569,26 +1569,29 @@ */ private static void cleanSingletons(Atom[] atoms, BS bs) { BS bsr = new BS(); - for (int pass = 0; pass < 2; pass++) { + int n = bs.length(); + int pass = 0; + while (true) { int offset = 1; int iPrev = Integer.MIN_VALUE; int iSeqLast = Integer.MIN_VALUE; int iSeq = Integer.MIN_VALUE; - for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1)) { - if (!isSequential(atoms, i, iPrev)) + for (int i = 0; i < n; i++) { + if (nextChain(atoms, i, iPrev)) offset++; iSeq = atoms[i].sequenceNumber; if (iSeq != iSeqLast) { iSeqLast = iSeq; offset++; } - if (pass == 0) - bsr.set(offset); - else if (!bsr.get(offset)) + if (pass == 0) { + if (bs.get(i)) + bsr.set(offset); + } else if (!bsr.get(offset)) bs.clear(i); iPrev = i; } - if (pass == 1) + if (++pass == 2) break; BS bsnot = new BS(); for (int i = bsr.nextSetBit(0); i >= 0; i = bsr.nextSetBit(i + 1)) @@ -1598,12 +1601,12 @@ } } - private static boolean isSequential(Atom[] atoms, int i, int iPrev) { + private static boolean nextChain(Atom[] atoms, int i, int iPrev) { if (i == 0 || iPrev < 0) - return false; + return true; Atom a = atoms[iPrev]; Atom b = atoms[i]; - return a.chainID == b.chainID && a.atomSetIndex == b.atomSetIndex; + return a.chainID != b.chainID; } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-05-24 02:59:43
|
Revision: 18248 http://sourceforge.net/p/jmol/code/18248 Author: hansonr Date: 2013-05-24 02:59:39 +0000 (Fri, 24 May 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-24 02:50:58 UTC (rev 18247) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-24 02:59:39 UTC (rev 18248) @@ -1563,6 +1563,9 @@ /** * PyMOL does not display cartoons or traces for single-residue runs. + * This two-pass routine first sets bits in a residue bitset, + * then it clears out all singletons, and in a second pass + * all atom bits for not-represented residues are cleared. * * @param atoms * @param bs @@ -1572,12 +1575,11 @@ int n = bs.length(); int pass = 0; while (true) { - int offset = 1; - int iPrev = Integer.MIN_VALUE; - int iSeqLast = Integer.MIN_VALUE; - int iSeq = Integer.MIN_VALUE; - for (int i = 0; i < n; i++) { - if (nextChain(atoms, i, iPrev)) + for (int i = 0, offset = 0, + iPrev = Integer.MIN_VALUE, + iSeqLast = Integer.MIN_VALUE, + iSeq = Integer.MIN_VALUE; i < n; i++) { + if (iPrev < 0 || atoms[iPrev].chainID != atoms[i].chainID) offset++; iSeq = atoms[i].sequenceNumber; if (iSeq != iSeqLast) { @@ -1601,14 +1603,6 @@ } } - private static boolean nextChain(Atom[] atoms, int i, int iPrev) { - if (i == 0 || iPrev < 0) - return true; - Atom a = atoms[iPrev]; - Atom b = atoms[i]; - return a.chainID != b.chainID; - } - /** * Create JmolObjects for each shape. * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2013-05-26 22:24:35
|
Revision: 18252 http://sourceforge.net/p/jmol/code/18252 Author: hansonr Date: 2013-05-26 22:24:32 +0000 (Sun, 26 May 2013) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-26 12:54:17 UTC (rev 18251) +++ trunk/Jmol/src/org/jmol/adapter/readers/pymol/PyMOLReader.java 2013-05-26 22:24:32 UTC (rev 18252) @@ -169,6 +169,7 @@ private boolean cartoonRockets; private int surfaceMode; private int surfaceColor; + private int bgRgb; private int labelFontId; private boolean isMovie; @@ -778,6 +779,7 @@ //solventAsSpheres = getBooleanSetting(PyMOL.sphere_solvent); - this is for SA-Surfaces surfaceMode = (int) floatSetting(PyMOL.surface_mode); surfaceColor = (int) floatSetting(PyMOL.surface_color); + bgRgb = colorSetting(listAt(settings, PyMOL.bg_rgb)); labelPosition = new P3(); try { JmolList<Object> setting = localSettings.get(Integer @@ -1294,10 +1296,10 @@ if (reps[PyMOL.REP_LABELS].get(iAtom)) { int icolor = (int) getUniqueFloat(atom.uniqueID, PyMOL.label_color, labelColor); - if (icolor == PyMOL.COLOR_BACK || icolor == PyMOL.COLOR_FRONT) - icolor = PyMOL.COLOR_BLACK; - else if (icolor < 0) + if (icolor == PyMOL.COLOR_BACK || icolor == PyMOL.COLOR_FRONT) { + } else if (icolor < 0) { icolor = atomColor; + } float[] labelPos = new float[7]; JmolList<Object> labelOffset = listAt(labelPositions, apt); if (labelOffset == null) { @@ -1987,8 +1989,7 @@ + booleanSetting(PyMOL.cartoon_fancy_helices)); sb.append(";set cartoonFancy " + !booleanSetting(PyMOL.cartoon_fancy_helices)); - JmolList<Object> bg = listAt(settings, PyMOL.bg_rgb); - String s = "000000" + Integer.toHexString(colorSetting(bg)); + String s = "000000" + Integer.toHexString(bgRgb); s = "[x" + s.substring(s.length() - 6) + "]"; sb.append(";background " + s); sb.append(";moveto 0 PyMOL " + Escape.eAF(pymolView)); @@ -2096,11 +2097,16 @@ } // generally useful static methods - - private static short getColix(int colorIndex, float translucency) { - return C.getColixTranslucent3(C.getColixO(Integer.valueOf(PyMOL - .getRGB(colorIndex))), translucency > 0, translucency); + private short getColix(int colorIndex, float translucency) { + short colix = ( + colorIndex == PyMOL.COLOR_BACK ? + (ColorUtil.getBgContrast(bgRgb) == C.WHITE ? C.BLACK : C.WHITE) + : colorIndex == PyMOL.COLOR_FRONT ? + ColorUtil.getBgContrast(bgRgb) + : C.getColixO(Integer.valueOf(PyMOL.getRGB(colorIndex)))); + + return C.getColixTranslucent3(colix, translucency > 0, translucency); } private static int colorSettingClamped(JmolList<Object> c) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |