From: <ha...@us...> - 2009-06-01 16:08:17
|
Revision: 10932 http://jmol.svn.sourceforge.net/jmol/?rev=10932&view=rev Author: hansonr Date: 2009-06-01 16:08:09 +0000 (Mon, 01 Jun 2009) Log Message: ----------- version=11.7.39 # bug fix: biomolecules for new PDB format Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2009-06-01 16:07:20 UTC (rev 10931) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2009-06-01 16:08:09 UTC (rev 10932) @@ -201,7 +201,7 @@ continue; case 17: //if (line.startsWith("REMARK")) { - if (line.startsWith("REMARK 350 GENERATING THE BIOMOLECULE")) { + if (line.startsWith("REMARK 350")) { remark350(); continue; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-01-23 23:37:30
|
Revision: 12195 http://jmol.svn.sourceforge.net/jmol/?rev=12195&view=rev Author: hansonr Date: 2010-01-23 23:37:24 +0000 (Sat, 23 Jan 2010) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2010-01-23 23:12:16 UTC (rev 12194) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2010-01-23 23:37:24 UTC (rev 12195) @@ -226,7 +226,7 @@ } checkNotPDB(); atomSetCollection.connectAll(maxSerial); - if (biomolecules != null && biomolecules.size() > 0) { + if (biomolecules != null && biomolecules.size() > 0 && atomSetCollection.getAtomCount() > 0) { atomSetCollection.setAtomSetAuxiliaryInfo("biomolecules", biomolecules); setBiomoleculeAtomCounts(); if (biomts != null && filter != null This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-06-14 12:38:30
|
Revision: 15583 http://jmol.svn.sourceforge.net/jmol/?rev=15583&view=rev Author: hansonr Date: 2011-06-14 12:38:24 +0000 (Tue, 14 Jun 2011) Log Message: ----------- version=12.1.50_dev # bug fix: PQR reader mistaking " HD3" as deuterium Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-06-14 11:59:00 UTC (rev 15582) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-06-14 12:38:24 UTC (rev 15583) @@ -691,7 +691,11 @@ htElementsInCurrentGroup.get(line.substring(12, 14)) != null) && Atom.isValidElementSymbolNoCaseSecondChar(ch12, ch13)) return (isHetero || ch12 != 'H' ? "" + ch12 + ch13 : "H"); - if (!Character.isLetter(ch12) && (htElementsInCurrentGroup == null || + // not a known two-letter code + if (ch12 == 'H') // added check for PQR files " HD3" for example + return "H"; + // check for " NH2" for example + if ((htElementsInCurrentGroup == null || htElementsInCurrentGroup.get("" + ch13) != null) && Atom.isValidElementSymbol(ch13)) return "" + ch13; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-06-18 23:57:43
|
Revision: 15624 http://jmol.svn.sourceforge.net/jmol/?rev=15624&view=rev Author: hansonr Date: 2011-06-18 23:57:36 +0000 (Sat, 18 Jun 2011) Log Message: ----------- hack for QMMMM files not reading metal ions correctly. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-06-18 21:36:17 UTC (rev 15623) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-06-18 23:57:36 UTC (rev 15624) @@ -675,7 +675,29 @@ atom.bfactor = parseFloat(line, 60, 66); } - + + /** + * The problem here stems from the fact that developers have not fully + * understood the PDB specifications -- and that those have changed. + * The actual rules are as follows (using 1-based numbering: + * + * 1) Chemical symbols may be in columns 77 and 78 for total disambiguity. + * 2) Only valid chemical symbols should be in columns 13 and 14 + * These are the first two characters of a four-character field. + * 3) Four-character atom names for hydrogen necessarily start in + * column 13, so when that is the case, if the four-letter + * name starts with "H" then it is hydrogen regardless of what + * letter comes next. For example, "HG3 " is mercury (and should + * be in a HETATM record, not an ATOM record, anyway), but "HG33" + * is hydrogen, presumably. + * + * This leave open the ambiguity of a four-letter H name in a + * heteroatom set where the symbol is really H, not Hg or Ha, or Ho or Hf, etc. + * + * + * @param isHetero + * @return an atom symbol + */ private String deduceElementSymbol(boolean isHetero) { if (lineLength >= 78) { char ch76 = line.charAt(76); @@ -706,6 +728,15 @@ htElementsInCurrentGroup.get("" + ch12) != null) && Atom.isValidElementSymbol(ch12)) return "" + ch12; + // probably a bad file. But we will make ONE MORE ATTEMPT + // and read columns 14/15 instead of 12/13. What the heck! + char ch14 = line.charAt(14); + if ((htElementsInCurrentGroup == null || + htElementsInCurrentGroup.get(line.substring(13, 15)) != null) && + Atom.isValidElementSymbolNoCaseSecondChar(ch13, ch14)) + return "" + ch13 + ch14; + + return "Xx"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-06-18 23:59:31
|
Revision: 15625 http://jmol.svn.sourceforge.net/jmol/?rev=15625&view=rev Author: hansonr Date: 2011-06-18 23:59:25 +0000 (Sat, 18 Jun 2011) Log Message: ----------- hack for QMMMM files not reading metal ions correctly. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-06-18 23:57:36 UTC (rev 15624) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-06-18 23:59:25 UTC (rev 15625) @@ -731,7 +731,7 @@ // probably a bad file. But we will make ONE MORE ATTEMPT // and read columns 14/15 instead of 12/13. What the heck! char ch14 = line.charAt(14); - if ((htElementsInCurrentGroup == null || + if (ch12 == ' ' && (htElementsInCurrentGroup == null || htElementsInCurrentGroup.get(line.substring(13, 15)) != null) && Atom.isValidElementSymbolNoCaseSecondChar(ch13, ch14)) return "" + ch13 + ch14; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-04 12:11:37
|
Revision: 16247 http://jmol.svn.sourceforge.net/jmol/?rev=16247&view=rev Author: hansonr Date: 2011-10-04 12:11:28 +0000 (Tue, 04 Oct 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-04 12:11:03 UTC (rev 16246) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-04 12:11:28 UTC (rev 16247) @@ -771,11 +771,11 @@ offsetEnd) : -1); if (targetSerial < 0) continue; - int i1; boolean isDoubleBond = (sourceSerial == sourceSerialLast && targetSerial == targetSerialLast); sourceSerialLast = sourceSerial; targetSerialLast = targetSerial; boolean isSwapped = (targetSerial < sourceSerial); + int i1; if (isSwapped) { i1 = targetSerial; targetSerial = sourceSerial; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 12:21:43
|
Revision: 16410 http://jmol.svn.sourceforge.net/jmol/?rev=16410&view=rev Author: hansonr Date: 2011-10-28 12:21:36 +0000 (Fri, 28 Oct 2011) Log Message: ----------- first shot at TLS parser for PDBReader. Not fully tested. Use getProperty auxiliaryInfo to inspect. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 05:15:23 UTC (rev 16409) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 12:21:36 UTC (rev 16410) @@ -39,6 +39,7 @@ import java.util.Map; import javax.vecmath.Matrix4f; +import javax.vecmath.Point3f; /** * PDB file reader. @@ -216,6 +217,9 @@ remark290(); return false; } + if (line.indexOf("TLS") > 0) { + return remarkTls(); + } checkLineForScript(); return true; case 18: @@ -239,6 +243,8 @@ protected void finalizeReader() throws Exception { checkNotPDB(); atomSetCollection.connectAll(maxSerial); + if (tlsGroups != null) + atomSetCollection.setAtomSetAuxiliaryInfo("tlsGroups", tlsGroups); if (biomolecules != null && biomolecules.size() > 0 && atomSetCollection.getAtomCount() > 0) { atomSetCollection.setAtomSetAuxiliaryInfo("biomolecules", biomolecules); @@ -569,7 +575,6 @@ atom.elementSymbol = deduceElementSymbol(atom.isHetero); if (!filterAtom(atom, iAtom++)) return; - atom.atomSerial = serial; if (serial > maxSerial) maxSerial = serial; @@ -1157,5 +1162,158 @@ htSite.put("groups", groups); } } + + private List<Map<String, Object>> tlsGroups = null; + + /* + REMARK 3 TLS DETAILS + REMARK 3 NUMBER OF TLS GROUPS : NULL + or + REMARK 3 TLS DETAILS + REMARK 3 NUMBER OF TLS GROUPS : 20 + REMARK 3 + REMARK 3 TLS GROUP : 1 + REMARK 3 NUMBER OF COMPONENTS GROUP : 1 + REMARK 3 COMPONENTS C SSSEQI TO C SSSEQI + REMARK 3 RESIDUE RANGE : A 2 A 8 + REMARK 3 ORIGIN FOR THE GROUP (A): 17.3300 62.7550 29.2560 + REMARK 3 T TENSOR + REMARK 3 T11: 0.0798 T22: 0.0357 + REMARK 3 T33: 0.0678 T12: 0.0530 + REMARK 3 T13: -0.0070 T23: 0.0011 + REMARK 3 L TENSOR + REMARK 3 L11: 13.1074 L22: 7.9735 + REMARK 3 L33: 2.5703 L12: -6.5507 + REMARK 3 L13: -1.5297 L23: 4.1172 + REMARK 3 S TENSOR + REMARK 3 S11: -0.4246 S12: -0.4216 S13: 0.1672 + REMARK 3 S21: 0.5307 S22: 0.3071 S23: 0.0385 + REMARK 3 S31: 0.0200 S32: -0.2454 S33: 0.1174 + REMARK 3 + REMARK 3 TLS GROUP : 2 + ... + */ + private boolean remarkTls() throws Exception { + int nGroups = 0; + int iGroup = 0; + String components = null; + boolean flushRemark3 = false; + boolean isOK = true; + Map<String, Object> tlsGroup = null; + List<Map<String, Object>> ranges = null; + Map<String, Object> range = null; + while (readLine() != null && line.startsWith("REMARK 3")) { + if (flushRemark3) + continue; + try { + String[] tokens = getTokens(line.substring(10).replace(':', ' ')); + if (tokens.length < 2) + continue; + System.out.println(line); + if (tokens[0].equalsIgnoreCase("number")) { + nGroups = parseInt(tokens[tokens.length - 1]); + if (nGroups < 1) { + flushRemark3 = true; + isOK = false; + continue; + } + tlsGroups = new ArrayList<Map<String, Object>>(); + } else if (tokens[1].equalsIgnoreCase("GROUP")) { + tlsGroup = new Hashtable<String, Object>(); + tlsGroups.add(tlsGroup); + int groupID = parseInt(tokens[tokens.length - 1]); + tlsGroup.put("id", Integer.valueOf(groupID)); + ranges = null; + } else if (tokens[0].equalsIgnoreCase("NUMBER")) { + ranges = new ArrayList<Map<String, Object>>(); + tlsGroup.put("ranges", ranges); + } else if (tokens[0].equalsIgnoreCase("COMPONENTS")) { + components = line; + tlsGroup.put("components", components); + } else if (tokens[0].equalsIgnoreCase("RESIDUE")) { + /* + REMARK 3 RESIDUE RANGE : A 2 A 8 + token 0 1 2 3 4 5 6 7 8 + */ + range = new Hashtable<String, Object>(); + if (tokens.length == 6) { + range.put("chains", "" + tokens[2].charAt(0) + tokens[4].charAt(0)); + range.put("residues", new int[] { parseInt(tokens[3]), + parseInt(tokens[5]) }); + } else { + int toC = components.indexOf(" C "); + int fromC = components.indexOf(" C ", toC + 4); + range.put("chains", "" + line.charAt(fromC) + line.charAt(toC)); + range.put("residues", new int[] { + parseInt(line.substring(fromC + 1, toC)), + parseInt(line.substring(toC + 1)) }); + } + } else if (tokens[0].equalsIgnoreCase("SELECTION")) { + /* + * REMARK 3 SELECTION: RESID 513:544 OR RESID 568:634 OR RESID + */ + if (ranges == null) + ranges = new ArrayList<Map<String, Object>>(); + for (int i = 2; i < tokens.length; i++) { + int resno = parseInt(tokens[i]); + if (resno == Integer.MIN_VALUE) + continue; + range = new Hashtable<String, Object>(); + range.put("residues", new int[] { resno, parseInt(tokens[++i]) }); + ranges.add(range); + } + } else if (tokens[0].equalsIgnoreCase("ORIGIN")) { + /* + REMARK 3 ORIGIN FOR THE GROUP (A): 17.3300 62.7550 29.2560 + */ + /* + * Parse tightly packed numbers e.g. -999.1234-999.1234-999.1234 + * assuming there are 4 places to the right of each decimal point + */ + Point3f origin = new Point3f(); + tlsGroup.put("origin", origin); + if (tokens.length == 7) { + origin.set(parseFloat(tokens[4]), parseFloat(tokens[5]), + parseFloat(tokens[6])); + } else { + int n = line.length(); + origin.set(parseFloat(line.substring(n - 27, n - 18)), + parseFloat(line.substring(n - 18, n - 9)), parseFloat(line + .substring(n - 9, n))); + } + } else if (tokens[1].equalsIgnoreCase("TENSOR")) { + /* + * REMARK 3 T TENSOR + * REMARK 3 T11: 0.0798 T22: 0.0357 + * REMARK 3 T33: 0.0678 T12: 0.0530 + * REMARK 3 T13: -0.0070 T23: 0.0011 + */ + char tensorType = tokens[0].charAt(0); + tokens = getTokens((readLine().substring(10) + + readLine().substring(10) + readLine().substring(10)).replace( + tensorType, ' ').replace(':', ' ')); + float[][] tensor = new float[3][3]; + tlsGroup.put("t" + tensorType, tensor); + for (int i = 0; i < tokens.length; i++) { + int ti = tokens[i].charAt(0) - '1'; + int tj = tokens[i].charAt(1) - '1'; + tensor[ti][tj] = parseFloat(tokens[++i]); + if (ti < tj) + tensor[tj][ti] = tensor[ti][tj]; + } + if (tensorType == 'S' && ++iGroup == nGroups) + flushRemark3 = true; + } + } catch (Exception e) { + Logger.error(line + "\nError in TLS parser: "); + e.printStackTrace(); + flushRemark3 = true; + } + } + if (!isOK) + tlsGroups = null; + return false; + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 14:00:35
|
Revision: 16411 http://jmol.svn.sourceforge.net/jmol/?rev=16411&view=rev Author: hansonr Date: 2011-10-28 14:00:28 +0000 (Fri, 28 Oct 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 12:21:36 UTC (rev 16410) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:00:28 UTC (rev 16411) @@ -1308,6 +1308,7 @@ Logger.error(line + "\nError in TLS parser: "); e.printStackTrace(); flushRemark3 = true; + isOK = false; } } if (!isOK) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 14:15:03
|
Revision: 16412 http://jmol.svn.sourceforge.net/jmol/?rev=16412&view=rev Author: hansonr Date: 2011-10-28 14:14:57 +0000 (Fri, 28 Oct 2011) Log Message: ----------- first shot at TLS parser for PDBReader. Not fully tested. Use getProperty auxiliaryInfo to inspect. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:00:28 UTC (rev 16411) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:14:57 UTC (rev 16412) @@ -107,6 +107,7 @@ private StringBuffer pdbHeader; private int configurationPtr = Integer.MIN_VALUE; private boolean applySymmetry; +private boolean tlsSeen; @Override protected void initializeReader() throws Exception { @@ -217,7 +218,7 @@ remark290(); return false; } - if (line.indexOf("TLS") > 0) { + if (!tlsSeen && line.indexOf("TLS") > 0) { return remarkTls(); } checkLineForScript(); @@ -1197,36 +1198,32 @@ int nGroups = 0; int iGroup = 0; String components = null; - boolean flushRemark3 = false; - boolean isOK = true; Map<String, Object> tlsGroup = null; List<Map<String, Object>> ranges = null; Map<String, Object> range = null; + tlsSeen = true; while (readLine() != null && line.startsWith("REMARK 3")) { - if (flushRemark3) - continue; try { String[] tokens = getTokens(line.substring(10).replace(':', ' ')); if (tokens.length < 2) continue; System.out.println(line); - if (tokens[0].equalsIgnoreCase("number")) { - nGroups = parseInt(tokens[tokens.length - 1]); - if (nGroups < 1) { - flushRemark3 = true; - isOK = false; - continue; + if (tokens[0].equalsIgnoreCase("NUMBER")) { + if (tokens[2].equalsIgnoreCase("COMPONENTS")) { + ranges = new ArrayList<Map<String, Object>>(); + tlsGroup.put("ranges", ranges); + } else { + nGroups = parseInt(tokens[tokens.length - 1]); + if (nGroups < 1) + break; + tlsGroups = new ArrayList<Map<String, Object>>(); } - tlsGroups = new ArrayList<Map<String, Object>>(); } else if (tokens[1].equalsIgnoreCase("GROUP")) { tlsGroup = new Hashtable<String, Object>(); tlsGroups.add(tlsGroup); int groupID = parseInt(tokens[tokens.length - 1]); tlsGroup.put("id", Integer.valueOf(groupID)); ranges = null; - } else if (tokens[0].equalsIgnoreCase("NUMBER")) { - ranges = new ArrayList<Map<String, Object>>(); - tlsGroup.put("ranges", ranges); } else if (tokens[0].equalsIgnoreCase("COMPONENTS")) { components = line; tlsGroup.put("components", components); @@ -1301,18 +1298,18 @@ if (ti < tj) tensor[tj][ti] = tensor[ti][tj]; } - if (tensorType == 'S' && ++iGroup == nGroups) - flushRemark3 = true; + if (tensorType == 'S' && ++iGroup == nGroups) { + Logger.info(nGroups + " TLS groups read"); + break; + } } } catch (Exception e) { Logger.error(line + "\nError in TLS parser: "); e.printStackTrace(); - flushRemark3 = true; - isOK = false; + tlsGroups = null; + break; } } - if (!isOK) - tlsGroups = null; return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 14:17:35
|
Revision: 16413 http://jmol.svn.sourceforge.net/jmol/?rev=16413&view=rev Author: hansonr Date: 2011-10-28 14:17:25 +0000 (Fri, 28 Oct 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:14:57 UTC (rev 16412) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:17:25 UTC (rev 16413) @@ -1226,7 +1226,6 @@ ranges = null; } else if (tokens[0].equalsIgnoreCase("COMPONENTS")) { components = line; - tlsGroup.put("components", components); } else if (tokens[0].equalsIgnoreCase("RESIDUE")) { /* REMARK 3 RESIDUE RANGE : A 2 A 8 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 14:22:40
|
Revision: 16414 http://jmol.svn.sourceforge.net/jmol/?rev=16414&view=rev Author: hansonr Date: 2011-10-28 14:22:34 +0000 (Fri, 28 Oct 2011) Log Message: ----------- first shot at TLS parser for PDBReader. more fully tested. Use getProperty auxiliaryInfo.models[1].tlsGroups to inspect. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:17:25 UTC (rev 16413) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:22:34 UTC (rev 16414) @@ -1232,6 +1232,7 @@ token 0 1 2 3 4 5 6 7 8 */ range = new Hashtable<String, Object>(); + ranges.add(range); if (tokens.length == 6) { range.put("chains", "" + tokens[2].charAt(0) + tokens[4].charAt(0)); range.put("residues", new int[] { parseInt(tokens[3]), @@ -1268,9 +1269,9 @@ */ Point3f origin = new Point3f(); tlsGroup.put("origin", origin); - if (tokens.length == 7) { - origin.set(parseFloat(tokens[4]), parseFloat(tokens[5]), - parseFloat(tokens[6])); + if (tokens.length == 8) { + origin.set(parseFloat(tokens[5]), parseFloat(tokens[6]), + parseFloat(tokens[7])); } else { int n = line.length(); origin.set(parseFloat(line.substring(n - 27, n - 18)), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 14:31:28
|
Revision: 16415 http://jmol.svn.sourceforge.net/jmol/?rev=16415&view=rev Author: hansonr Date: 2011-10-28 14:31:17 +0000 (Fri, 28 Oct 2011) Log Message: ----------- first shot at TLS parser for PDBReader. more fully tested. Adds REMARK 7 support (1zyg) Use getProperty auxiliaryInfo.models[1].tlsGroups to inspect. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:22:34 UTC (rev 16414) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:31:17 UTC (rev 16415) @@ -218,7 +218,7 @@ remark290(); return false; } - if (!tlsSeen && line.indexOf("TLS") > 0) { + if (!tlsSeen && line.indexOf("TLS DETAILS") > 0) { return remarkTls(); } checkLineForScript(); @@ -1193,6 +1193,12 @@ REMARK 3 REMARK 3 TLS GROUP : 2 ... + or (1zy8) + REMARK 7 + REMARK 7 TLS DEFINITIONS USED IN A FEW FINAL ROUNDS + REMARK 7 OF REFINEMENT: + REMARK 7 TLS DETAILS + */ private boolean remarkTls() throws Exception { int nGroups = 0; @@ -1202,7 +1208,8 @@ List<Map<String, Object>> ranges = null; Map<String, Object> range = null; tlsSeen = true; - while (readLine() != null && line.startsWith("REMARK 3")) { + String remark = line.substring(0, 11); + while (readLine() != null && line.startsWith(remark)) { try { String[] tokens = getTokens(line.substring(10).replace(':', ' ')); if (tokens.length < 2) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 15:13:36
|
Revision: 16417 http://jmol.svn.sourceforge.net/jmol/?rev=16417&view=rev Author: hansonr Date: 2011-10-28 15:13:29 +0000 (Fri, 28 Oct 2011) Log Message: ----------- second shot at TLS parser for PDBReader. more fully tested. Adds REMARK 7 support (1zyg) Use getProperty auxiliaryInfo.models[1].tlsGroups to inspect. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 14:33:02 UTC (rev 16416) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 15:13:29 UTC (rev 16417) @@ -145,8 +145,10 @@ // PDB is different -- targets actual model number int modelNo = (isNewModel ? modelNumber + 1 : getModelNumber()); modelNumber = (bsModels == null ? modelNo : modelNumber + 1); - if (!doGetModel(modelNumber)) + if (!doGetModel(modelNumber)) { + handleTlsMissingModels(); return checkLastModel(); + } atomSetCollection.connectAll(maxSerial); if (atomCount > 0) applySymmetryAndSetTrajectory(); @@ -244,16 +246,29 @@ protected void finalizeReader() throws Exception { checkNotPDB(); atomSetCollection.connectAll(maxSerial); - if (tlsGroups != null) - atomSetCollection.setAtomSetAuxiliaryInfo("tlsGroups", tlsGroups); if (biomolecules != null && biomolecules.size() > 0 && atomSetCollection.getAtomCount() > 0) { atomSetCollection.setAtomSetAuxiliaryInfo("biomolecules", biomolecules); setBiomoleculeAtomCounts(); if (biomts != null && applySymmetry) { atomSetCollection.applySymmetry(biomts, notionalUnitCell, applySymmetryToBonds, filter); + tlsModels = null; // for now, no TLS groups for biomolecules } } + if (tlsModels != null) { + int n = atomSetCollection.getAtomSetCount(); + if (n == tlsModels.size()) { + for (int i = n; --i >= 0;) + atomSetCollection.setAtomSetAuxiliaryInfo("TLS", tlsModels.get(i), i); + } else { + Logger.info(n + " models but " + tlsModels.size() + " TLS descriptions"); + if (tlsModels.size() == 1) { + Logger.info(" -- assuming all models have the same TLS description -- check REMARK 3 for details."); + for (int i = n; --i >= 0;) + atomSetCollection.setAtomSetAuxiliaryInfo("TLS", tlsModels.get(0), i); + } + } + } super.finalizeReader(); if (vCompnds != null) atomSetCollection.setAtomSetCollectionAuxiliaryInfo("compoundSource", vCompnds); @@ -1164,7 +1179,7 @@ } } - private List<Map<String, Object>> tlsGroups = null; + private List<Map<String, Object>> tlsModels = null; /* REMARK 3 TLS DETAILS @@ -1204,6 +1219,7 @@ int nGroups = 0; int iGroup = 0; String components = null; + List<Map<String, Object>> tlsGroups = null; Map<String, Object> tlsGroup = null; List<Map<String, Object>> ranges = null; Map<String, Object> range = null; @@ -1223,6 +1239,8 @@ nGroups = parseInt(tokens[tokens.length - 1]); if (nGroups < 1) break; + if (tlsModels == null) + tlsModels = new ArrayList<Map<String, Object>>(); tlsGroups = new ArrayList<Map<String, Object>>(); } } else if (tokens[1].equalsIgnoreCase("GROUP")) { @@ -1317,8 +1335,22 @@ break; } } + if (tlsGroups != null) { + Hashtable<String, Object> groups = new Hashtable<String, Object>(); + groups.put("groupCount", Integer.valueOf(nGroups)); + groups.put("groups", tlsGroups); + tlsModels.add(groups); + } return false; } - + + /** + * for now, we just ignore TLS details if user has selected a specific model + */ + private void handleTlsMissingModels() { + tlsModels = null; + } + + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-10-28 15:18:03
|
Revision: 16418 http://jmol.svn.sourceforge.net/jmol/?rev=16418&view=rev Author: hansonr Date: 2011-10-28 15:17:56 +0000 (Fri, 28 Oct 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 15:13:29 UTC (rev 16417) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-10-28 15:17:56 UTC (rev 16418) @@ -107,7 +107,6 @@ private StringBuffer pdbHeader; private int configurationPtr = Integer.MIN_VALUE; private boolean applySymmetry; -private boolean tlsSeen; @Override protected void initializeReader() throws Exception { @@ -220,7 +219,7 @@ remark290(); return false; } - if (!tlsSeen && line.indexOf("TLS DETAILS") > 0) { + if (line.indexOf("TLS DETAILS") > 0) { return remarkTls(); } checkLineForScript(); @@ -1223,7 +1222,6 @@ Map<String, Object> tlsGroup = null; List<Map<String, Object>> ranges = null; Map<String, Object> range = null; - tlsSeen = true; String remark = line.substring(0, 11); while (readLine() != null && line.startsWith(remark)) { try { @@ -1341,7 +1339,7 @@ groups.put("groups", tlsGroups); tlsModels.add(groups); } - return false; + return (nGroups < 1); } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-11-02 18:12:34
|
Revision: 16441 http://jmol.svn.sourceforge.net/jmol/?rev=16441&view=rev Author: hansonr Date: 2011-11-02 18:12:28 +0000 (Wed, 02 Nov 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-02 18:11:59 UTC (rev 16440) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-02 18:12:28 UTC (rev 16441) @@ -1440,7 +1440,7 @@ } if (isTrue) { Logger.warn("PdbReader findAtom chain=" + chain + " resno=" + resno + " not found"); - tlsAddError("atom not found: chain=" + chain + " resno=" + resno + " not found"); + tlsAddError("atom not found: chain=" + chain + " resno=" + resno); } return (isTrue ? -1 : atom2); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-11-02 18:31:54
|
Revision: 16442 http://jmol.svn.sourceforge.net/jmol/?rev=16442&view=rev Author: hansonr Date: 2011-11-02 18:31:48 +0000 (Wed, 02 Nov 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-02 18:12:28 UTC (rev 16441) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-02 18:31:48 UTC (rev 16442) @@ -1399,21 +1399,26 @@ for (int j = ranges.size(); --j >= 0;) { String chains = (String) ranges.get(j).get("chains"); int[] residues = (int[]) ranges.get(j).get("residues"); - int index1 = findAtomForRange(index0, indexMax, chains.charAt(0), - residues[0], false); - int index2 = (index1 >= 0 ? findAtomForRange(index1, indexMax, chains - .charAt(1), residues[1], true) : -1); + char chain0 = chains.charAt(0); + char chain1 = chains.charAt(1); + int res0 = residues[0]; + int res1 = residues[1]; + int index1 = findAtomForRange(index0, indexMax, chain0, res0, false); + int index2 = (index1 >= 0 ? findAtomForRange(index1, indexMax, chain1, + res1, false) : -1); if (index2 < 0) { Logger.info("TLS processing terminated"); return; } - Logger.info("TLS ID=" + tlsGroupID + " model atom index range " + index1 - + "-" + index2); - index1 -= index0; - index2 -= index0; - for (int iAtom = index1; iAtom < index2; iAtom++) { - data[iAtom] = tlsGroupID; - setTlsEllipsoid(atoms[iAtom], group); + Logger.info("TLS ID=" + tlsGroupID + " model atom index range " + + index1 + "-" + index2); + for (int iAtom = index0; iAtom < indexMax; iAtom++) { + Atom atom = atoms[iAtom]; + if (atom.chainID >= chain0 && atom.chainID <= chain1 + && atom.sequenceNumber >= res0 && atom.sequenceNumber <= res1) { + data[iAtom - index0] = tlsGroupID; + setTlsEllipsoid(atom, group); + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-11-02 18:54:26
|
Revision: 16443 http://jmol.svn.sourceforge.net/jmol/?rev=16443&view=rev Author: hansonr Date: 2011-11-02 18:54:20 +0000 (Wed, 02 Nov 2011) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-02 18:31:48 UTC (rev 16442) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-02 18:54:20 UTC (rev 16443) @@ -1412,13 +1412,17 @@ } Logger.info("TLS ID=" + tlsGroupID + " model atom index range " + index1 + "-" + index2); + boolean isSameChain = (chain0 == chain1); for (int iAtom = index0; iAtom < indexMax; iAtom++) { Atom atom = atoms[iAtom]; - if (atom.chainID >= chain0 && atom.chainID <= chain1 - && atom.sequenceNumber >= res0 && atom.sequenceNumber <= res1) { - data[iAtom - index0] = tlsGroupID; - setTlsEllipsoid(atom, group); - } + if (isSameChain ? atom.sequenceNumber >= res0 && atom.sequenceNumber <= res1 + : atom.chainID > chain0 && atom.chainID < chain1 + || atom.chainID == chain0 && atom.sequenceNumber >= res0 + || atom.chainID == chain1 && atom.sequenceNumber <= res1 + ) { + data[iAtom - index0] = tlsGroupID; + setTlsEllipsoid(atom, group); + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-11-03 17:35:21
|
Revision: 16448 http://jmol.svn.sourceforge.net/jmol/?rev=16448&view=rev Author: hansonr Date: 2011-11-03 17:35:14 +0000 (Thu, 03 Nov 2011) Log Message: ----------- PDB/TLS work Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-03 14:41:54 UTC (rev 16447) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-03 17:35:14 UTC (rev 16448) @@ -1262,19 +1262,32 @@ token 0 1 2 3 4 5 6 7 8 */ range = new Hashtable<String, Object>(); - ranges.add(range); + char chain1, chain2; + int res1, res2; if (tokens.length == 6) { - range.put("chains", "" + tokens[2].charAt(0) + tokens[4].charAt(0)); - range.put("residues", new int[] { parseInt(tokens[3]), - parseInt(tokens[5]) }); + chain1 = tokens[2].charAt(0); + chain2 = tokens[4].charAt(0); + res1 = parseInt(tokens[3]); + res2 = parseInt(tokens[5]); } else { int toC = components.indexOf(" C "); int fromC = components.indexOf(" C ", toC + 4); - range.put("chains", "" + line.charAt(fromC) + line.charAt(toC)); - range.put("residues", new int[] { - parseInt(line.substring(fromC + 1, toC)), - parseInt(line.substring(toC + 1)) }); + chain1 = line.charAt(fromC); + chain2 = line.charAt(toC); + res1 = parseInt(line.substring(fromC + 1, toC)); + res2 = parseInt(line.substring(toC + 1)); } + if (chain1 == chain2) { + range.put("chains", "" + chain1 + chain2); + if (res1 <= res2) { + range.put("residues", new int[] { res1, res2 }); + ranges.add(range); + } else { + tlsAddError(" TLS group residues are not in order (range ignored)"); + } + } else { + tlsAddError(" TLS group chains are different (range ignored)"); + } } else if (tokens[0].equalsIgnoreCase("SELECTION")) { /* * REMARK 3 SELECTION: RESID 513:544 OR RESID 568:634 OR RESID This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2011-11-03 21:18:02
|
Revision: 16449 http://jmol.svn.sourceforge.net/jmol/?rev=16449&view=rev Author: hansonr Date: 2011-11-03 21:17:56 +0000 (Thu, 03 Nov 2011) Log Message: ----------- PDB/TLS requiring single-chain ranges only, still not requiring contiguous sections. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-03 17:35:14 UTC (rev 16448) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2011-11-03 21:17:56 UTC (rev 16449) @@ -1425,7 +1425,8 @@ } Logger.info("TLS ID=" + tlsGroupID + " model atom index range " + index1 + "-" + index2); - boolean isSameChain = (chain0 == chain1); + boolean isSameChain = (chain0 == chain1); // will be true + // could demand a contiguous section here for each range. for (int iAtom = index0; iAtom < indexMax; iAtom++) { Atom atom = atoms[iAtom]; if (isSameChain ? atom.sequenceNumber >= res0 && atom.sequenceNumber <= res1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-02-18 02:24:21
|
Revision: 16809 http://jmol.svn.sourceforge.net/jmol/?rev=16809&view=rev Author: hansonr Date: 2012-02-18 02:24:14 +0000 (Sat, 18 Feb 2012) Log Message: ----------- PDB reader: TLS + REFMAC Bfactor residuals Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-17 06:51:51 UTC (rev 16808) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-18 02:24:14 UTC (rev 16809) @@ -114,6 +114,8 @@ private int lastSourceSerial = Integer.MIN_VALUE; private int lastTargetSerial = Integer.MIN_VALUE; private int tlsGroupID; + + private boolean isRefMac; final private static String lineOptions = "ATOM " + //0 @@ -258,8 +260,11 @@ remark290(); return false; } - if (getTlsGroups && line.indexOf("TLS DETAILS") > 0) { - return remarkTls(); + if (getTlsGroups) { + if (line.startsWith("REMARK 3") && line.indexOf("REFMAC") >= 0) + isRefMac = true; + if (line.indexOf("TLS DETAILS") > 0) + return remarkTls(); } checkLineForScript(); return true; @@ -1501,6 +1506,7 @@ private final float[] dataT = new float[8]; private static final float RAD_PER_DEG = (float) (Math.PI / 180); + private static final float _8PI2_ = (float) (8 * Math.PI * Math.PI); private void setTlsEllipsoid(Atom atom, Map<String, Object> group) { Point3f origin = (Point3f) group.get("origin"); @@ -1542,12 +1548,21 @@ dataT[5] = T[1][2]; dataT[6] = 8; // ORTEP type 8 + boolean isResidualB = isRefMac; + + float bresidual = atom.bfactor; // not guaranteed to be correct + if (isResidualB) { + bresidual /= _8PI2_; + }else { + + } + dataS[0] /*u11*/= dataT[0] + L[1][1] * zz + L[2][2] * yy - 2 * L[1][2] - * yz + 2 * S[1][0] * z - 2 * S[2][0] * y; + * yz + 2 * S[1][0] * z - 2 * S[2][0] * y + bresidual; dataS[1] /*u22*/= dataT[1] + L[0][0] * zz + L[2][2] * xx - 2 * L[2][0] - * xz - 2 * S[0][1] * z + 2 * S[2][1] * x; + * xz - 2 * S[0][1] * z + 2 * S[2][1] * x + bresidual; dataS[2] /*u33*/= dataT[2] + L[0][0] * yy + L[1][1] * xx - 2 * L[0][1] - * xy - 2 * S[1][2] * x + 2 * S[0][2] * y; + * xy - 2 * S[1][2] * x + 2 * S[0][2] * y + bresidual; dataS[3] /*u12*/= dataT[3] - L[2][2] * xy + L[1][2] * xz + L[2][0] * yz - L[0][1] * zz - S[0][0] * z + S[1][1] * z + S[2][0] * x - S[2][1] * y; dataS[4] /*u13*/= dataT[4] - L[1][1] * xz + L[1][2] * xy - L[2][0] * yy This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-02-21 04:50:23
|
Revision: 16815 http://jmol.svn.sourceforge.net/jmol/?rev=16815&view=rev Author: hansonr Date: 2012-02-21 04:50:17 +0000 (Tue, 21 Feb 2012) Log Message: ----------- got it! residual anisotropy TLS check Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 03:08:45 UTC (rev 16814) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 04:50:17 UTC (rev 16815) @@ -115,8 +115,6 @@ private int lastTargetSerial = Integer.MIN_VALUE; private int tlsGroupID; - private boolean isRefMac; - final private static String lineOptions = "ATOM " + //0 "HETATM " + //1 @@ -261,8 +259,6 @@ return false; } if (getTlsGroups) { - if (line.startsWith("REMARK 3") && line.indexOf("REFMAC") >= 0) - isRefMac = true; if (line.indexOf("TLS DETAILS") > 0) return remarkTls(); } @@ -310,6 +306,7 @@ setTlsGroups(0, i); } } + checkForResidualBFactors(); } if (sbTlsErrors != null) { atomSetCollection.setAtomSetCollectionAuxiliaryInfo("tlsErrors", sbTlsErrors.toString()); @@ -331,6 +328,35 @@ } } + private void checkForResidualBFactors() { + Atom[] atoms = atomSetCollection.getAtoms(); + boolean isResidual = false; + for (int i = atomSetCollection.getAtomCount(); --i >= 0;) { + Atom atom = atoms[i]; + float[] anisou = tlsU.get(atom); + if (anisou == null) + continue; + float resid = anisou[7] - (anisou[0] + anisou[1] + anisou[2])/3f; + if (resid < 0 || Float.isNaN(resid)) { + isResidual = true; // can't be total + break; + } + } + for (Map.Entry<Atom, float[]> entry : tlsU.entrySet()) { + Atom atom = entry.getKey(); + float[] anisou = entry.getValue(); + float resid = anisou[7]; + if (resid == 0) + continue; + if (!isResidual) + resid -= (anisou[0] + anisou[1] + anisou[2])/3f; + anisou[0] += resid; + anisou[1] += resid; + anisou[2] += resid; + atom.ellipsoid[1] = symmetry.getEllipsoid(anisou); + } + } + private void header() { if (lineLength < 8) return; @@ -1505,17 +1531,17 @@ return (isTrue ? -1 : atom2); } - private final float[] anisou = new float[8]; private final float[] dataT = new float[8]; private static final float RAD_PER_DEG = (float) (Math.PI / 180); private static final float _8PI2_ = (float) (8 * Math.PI * Math.PI); + private Map<Atom, float[]>tlsU; private void setTlsEllipsoid(Atom atom, Map<String, Object> group) { Point3f origin = (Point3f) group.get("origin"); if (Float.isNaN(origin.x)) return; - + float[][] T = (float[][]) group.get("tT"); float[][] L = (float[][]) group.get("tL"); float[][] S = (float[][]) group.get("tS"); @@ -1551,21 +1577,16 @@ dataT[5] = T[1][2]; dataT[6] = 12; // (non)ORTEP type 12 -- macromolecular Cartesian - boolean isResidualB = isRefMac; // not adequate - - float bresidual = atom.bfactor; // not guaranteed to be correct - if (isResidualB) { - bresidual /= _8PI2_; - }else { - - } - + float[] anisou = new float[8]; + + float bresidual = (Float.isNaN(atom.bfactor) ? 0 : atom.bfactor / _8PI2_); + anisou[0] /*u11*/= dataT[0] + L[1][1] * zz + L[2][2] * yy - 2 * L[1][2] - * yz + 2 * S[1][0] * z - 2 * S[2][0] * y + bresidual; + * yz + 2 * S[1][0] * z - 2 * S[2][0] * y; anisou[1] /*u22*/= dataT[1] + L[0][0] * zz + L[2][2] * xx - 2 * L[2][0] - * xz - 2 * S[0][1] * z + 2 * S[2][1] * x + bresidual; + * xz - 2 * S[0][1] * z + 2 * S[2][1] * x; anisou[2] /*u33*/= dataT[2] + L[0][0] * yy + L[1][1] * xx - 2 * L[0][1] - * xy - 2 * S[1][2] * x + 2 * S[0][2] * y + bresidual; + * xy - 2 * S[1][2] * x + 2 * S[0][2] * y; anisou[3] /*u12*/= dataT[3] - L[2][2] * xy + L[1][2] * xz + L[2][0] * yz - L[0][1] * zz - S[0][0] * z + S[1][1] * z + S[2][0] * x - S[2][1] * y; anisou[4] /*u13*/= dataT[4] - L[1][1] * xz + L[1][2] * xy - L[2][0] * yy @@ -1573,11 +1594,15 @@ anisou[5] /*u23*/= dataT[5] - L[0][0] * yz - L[1][2] * xx + L[2][0] * xy + L[0][1] * xz - S[1][1] * x + S[2][2] * x + S[0][1] * y - S[0][2] * z; anisou[6] = 12; // macromolecular Cartesian + anisou[7] = bresidual; + + if (tlsU == null) + tlsU = new Hashtable<Atom, float[]>(); + tlsU.put(atom, anisou); // symmetry is set to [1 1 1 90 90 90] -- Cartesians, not actual unit cell - atom.ellipsoid = new Quadric[] { null, symmetry.getEllipsoid(anisou), - symmetry.getEllipsoid(dataT) }; + atom.ellipsoid = new Quadric[] { null, null, symmetry.getEllipsoid(dataT) }; //if (atom.atomIndex == 0) //System.out.println("pdbreader ellip 0 = " + atom.ellipsoid[1]); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-02-21 04:54:59
|
Revision: 16816 http://jmol.svn.sourceforge.net/jmol/?rev=16816&view=rev Author: hansonr Date: 2012-02-21 04:54:53 +0000 (Tue, 21 Feb 2012) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 04:50:17 UTC (rev 16815) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 04:54:53 UTC (rev 16816) @@ -355,6 +355,7 @@ anisou[2] += resid; atom.ellipsoid[1] = symmetry.getEllipsoid(anisou); } + tlsU = null; } private void header() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-02-21 04:56:16
|
Revision: 16817 http://jmol.svn.sourceforge.net/jmol/?rev=16817&view=rev Author: hansonr Date: 2012-02-21 04:56:10 +0000 (Tue, 21 Feb 2012) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 04:54:53 UTC (rev 16816) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 04:56:10 UTC (rev 16817) @@ -342,6 +342,9 @@ break; } } + + Logger.info("TLS analysis suggests Bfactors are " + (isResidual ? "" : "NOT") + " residuals"); + for (Map.Entry<Atom, float[]> entry : tlsU.entrySet()) { Atom atom = entry.getKey(); float[] anisou = entry.getValue(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-02-21 04:59:26
|
Revision: 16818 http://jmol.svn.sourceforge.net/jmol/?rev=16818&view=rev Author: hansonr Date: 2012-02-21 04:59:20 +0000 (Tue, 21 Feb 2012) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 04:56:10 UTC (rev 16817) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 04:59:20 UTC (rev 16818) @@ -332,8 +332,7 @@ Atom[] atoms = atomSetCollection.getAtoms(); boolean isResidual = false; for (int i = atomSetCollection.getAtomCount(); --i >= 0;) { - Atom atom = atoms[i]; - float[] anisou = tlsU.get(atom); + float[] anisou = tlsU.get(atoms[i]); if (anisou == null) continue; float resid = anisou[7] - (anisou[0] + anisou[1] + anisou[2])/3f; @@ -346,7 +345,6 @@ Logger.info("TLS analysis suggests Bfactors are " + (isResidual ? "" : "NOT") + " residuals"); for (Map.Entry<Atom, float[]> entry : tlsU.entrySet()) { - Atom atom = entry.getKey(); float[] anisou = entry.getValue(); float resid = anisou[7]; if (resid == 0) @@ -356,7 +354,7 @@ anisou[0] += resid; anisou[1] += resid; anisou[2] += resid; - atom.ellipsoid[1] = symmetry.getEllipsoid(anisou); + entry.getKey().ellipsoid[1] = symmetry.getEllipsoid(anisou); } tlsU = null; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-02-21 05:16:22
|
Revision: 16820 http://jmol.svn.sourceforge.net/jmol/?rev=16820&view=rev Author: hansonr Date: 2012-02-21 05:16:16 +0000 (Tue, 21 Feb 2012) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 05:01:32 UTC (rev 16819) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2012-02-21 05:16:16 UTC (rev 16820) @@ -354,7 +354,12 @@ anisou[0] += resid; anisou[1] += resid; anisou[2] += resid; - entry.getKey().ellipsoid[1] = symmetry.getEllipsoid(anisou); + entry.getKey().ellipsoid[1] = symmetry.getEllipsoid(anisou); + System.out.println("TLS-U: " + Escape.escape(anisou)); + anisou = (entry.getKey().anisoBorU); + if (anisou != null) + System.out.println("ANISOU: " + Escape.escape(anisou)); + } tlsU = null; } @@ -1597,6 +1602,8 @@ + L[0][1] * xz - S[1][1] * x + S[2][2] * x + S[0][1] * y - S[0][2] * z; anisou[6] = 12; // macromolecular Cartesian anisou[7] = bresidual; + if (Float.isNaN(bresidual)) + System.out.println("hmm"); if (tlsU == null) tlsU = new Hashtable<Atom, float[]>(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |