Revision: 20281 http://sourceforge.net/p/jmol/code/20281 Author: hansonr Date: 2015-02-11 12:48:31 +0000 (Wed, 11 Feb 2015) Log Message: ----------- Jmol.___JmolVersion="14.3.12_2015.02.11"
bug fix: "USER MOD" not accepted at beginning of PDB file (MolProbity breaking PDB format here) bug fix: 02.10 may break loading ligand files Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java trunk/Jmol/src/org/jmol/modelset/ModelLoader.java trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java trunk/Jmol/src/org/jmol/viewer/Jmol.properties Modified: trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-02-11 12:00:50 UTC (rev 20280) +++ trunk/Jmol/src/org/jmol/adapter/readers/cif/CifReader.java 2015-02-11 12:48:31 UTC (rev 20281) @@ -1308,7 +1308,7 @@ atom.vib = V3.new3(siteMult, 0, Float.NaN); } asc.setCurrentModelInfo("isCIF", Boolean.TRUE); - if (isMMCIF && !isLigand) + if (isMMCIF) setModelPDB(true); if (isMMCIF && skipping) skipping = false; Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2015-02-11 12:00:50 UTC (rev 20280) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2015-02-11 12:48:31 UTC (rev 20281) @@ -606,7 +606,7 @@ "DBREF ", "SEQADV", "SEQRES", "MODRES", "HELIX ", "SHEET ", "TURN ", "CRYST1", "ORIGX1", "ORIGX2", "ORIGX3", "SCALE1", "SCALE2", "SCALE3", - "ATOM ", "HETATM", "MODEL ", "LINK ", + "ATOM ", "HETATM", "MODEL ", "LINK ", "USER MOD ", }; private final static String[] cgdLineStartRecords = Modified: trunk/Jmol/src/org/jmol/modelset/ModelLoader.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/ModelLoader.java 2015-02-11 12:00:50 UTC (rev 20280) +++ trunk/Jmol/src/org/jmol/modelset/ModelLoader.java 2015-02-11 12:48:31 UTC (rev 20281) @@ -81,7 +81,7 @@ private Viewer vwr; public ModelSet ms; - private ModelSet mergeModelSet; + private ModelSet modelSet0; private boolean merging; private boolean appendNew; @@ -92,13 +92,13 @@ public int[] specialAtomIndexes; public ModelLoader(Viewer vwr, String modelSetName, - SB loadScript, Object asc, ModelSet mergeModelSet, + SB loadScript, Object asc, ModelSet modelSet0, BS bsNew) { this.vwr = vwr; ms = new ModelSet(vwr, modelSetName); JmolAdapter adapter = vwr.getModelAdapter(); - this.mergeModelSet = mergeModelSet; - merging = (this.mergeModelSet != null && this.mergeModelSet.ac > 0); + this.modelSet0 = modelSet0; + merging = (modelSet0 != null && modelSet0.ac > 0); if (merging) { ms.canSkipLoad = false; } else { @@ -207,15 +207,15 @@ ms.someModelsHaveFractionalCoordinates = ms .getMSInfoB("someModelsHaveFractionalCoordinates"); if (merging) { - ms.haveBioModels |= mergeModelSet.haveBioModels; - ms.bioModelset = mergeModelSet.bioModelset; - ms.someModelsHaveSymmetry |= mergeModelSet + ms.haveBioModels |= modelSet0.haveBioModels; + ms.bioModelset = modelSet0.bioModelset; + ms.someModelsHaveSymmetry |= modelSet0 .getMSInfoB("someModelsHaveSymmetry"); - someModelsHaveUnitcells |= mergeModelSet + someModelsHaveUnitcells |= modelSet0 .getMSInfoB("someModelsHaveUnitcells"); - ms.someModelsHaveFractionalCoordinates |= mergeModelSet + ms.someModelsHaveFractionalCoordinates |= modelSet0 .getMSInfoB("someModelsHaveFractionalCoordinates"); - ms.someModelsHaveAromaticBonds |= mergeModelSet.someModelsHaveAromaticBonds; + ms.someModelsHaveAromaticBonds |= modelSet0.someModelsHaveAromaticBonds; ms.msInfo.put("someModelsHaveSymmetry", Boolean.valueOf(ms.someModelsHaveSymmetry)); ms.msInfo.put("someModelsHaveUnitcells", @@ -299,7 +299,7 @@ iModel = -1; model = null; if (merging) - mergeTrajAndVib(mergeModelSet, ms); + mergeTrajAndVib(modelSet0, ms); initializeAtomBondModelCounts(nAtoms); if (bsNew != null && (doMinimize || is2D)) { bsNew.setBits(baseAtomIndex, baseAtomIndex + nAtoms); @@ -371,10 +371,10 @@ setAtomProperties(); if (adapter != null) adapter.finish(asc); - if (mergeModelSet != null) { - mergeModelSet.releaseModelSet(); + if (modelSet0 != null) { + modelSet0.releaseModelSet(); } - mergeModelSet = null; + modelSet0 = null; } private void mergeTrajAndVib(ModelSet oldSet, ModelSet newSet) { @@ -475,11 +475,11 @@ baseModelIndex = baseModelCount - 1; ms.mc = baseModelCount; } - ms.ac = baseAtomIndex = mergeModelSet.ac; - ms.bondCount = mergeModelSet.bondCount; - mergeGroups = mergeModelSet.getGroups(); + ms.ac = baseAtomIndex = modelSet0.ac; + ms.bondCount = modelSet0.bondCount; + mergeGroups = modelSet0.getGroups(); groupCount = baseGroupIndex = mergeGroups.length; - ms.mergeModelArrays(mergeModelSet); + ms.mergeModelArrays(modelSet0); ms.growAtomArrays(ms.ac + nAtoms); } else { ms.mc = adapterModelCount; @@ -499,12 +499,12 @@ ms.modelNames = AU.arrayCopyS(ms.modelNames, ms.mc); ms.frameTitles = AU.arrayCopyS(ms.frameTitles, ms.mc); if (merging) - for (int i = 0; i < mergeModelSet.mc; i++) - (ms.am[i] = mergeModelSet.am[i]).ms = ms; + for (int i = 0; i < modelSet0.mc; i++) + (ms.am[i] = modelSet0.am[i]).ms = ms; } private void mergeGroups() { - Map<String, Object> info = mergeModelSet.getAuxiliaryInfo(null); + Map<String, Object> info = modelSet0.getAuxiliaryInfo(null); String[] mergeGroup3Lists = (String[]) info.get("group3Lists"); int[][] mergeGroup3Counts = (int[][]) info.get("group3Counts"); if (mergeGroup3Lists != null) { @@ -518,7 +518,7 @@ } //if merging PDB data into an already-present model, and the //structure is defined, consider the current structures in that - //model to be undefined. Not guarantee to work. + //model to be undefined. Not guaranteed to work. if (!appendNew && ms.haveBioModels) structuresDefinedInFile.clear(baseModelIndex); } @@ -551,11 +551,9 @@ modelName = (jmolData != null && jmolData.indexOf(";") > 2 ? jmolData.substring(jmolData .indexOf(":") + 2, jmolData.indexOf(";")) : appendNew ? "" + (modelNumber % 1000000): ""); - boolean isPDBModel = setModelNameNumberProperties(ipt, iTrajectory, + setModelNameNumberProperties(ipt, iTrajectory, modelName, modelNumber, modelProperties, modelAuxiliaryInfo, jmolData); - if (isPDBModel) - jbr.setGroupLists(ipt); if (ms.getInfo(ipt, "periodicOriginXyz") != null) ms.someModelsHaveSymmetry = true; } @@ -591,29 +589,29 @@ finalizeModels(baseModelCount); } - private boolean setModelNameNumberProperties( - int modelIndex, - int trajectoryBaseIndex, - String modelName, - int modelNumber, - Properties modelProperties, - Map<String, Object> modelAuxiliaryInfo, - String jmolData) { - boolean modelIsPDB = (modelAuxiliaryInfo != null - && Boolean.TRUE == modelAuxiliaryInfo.get("isPDB")); + private void setModelNameNumberProperties(int modelIndex, + int trajectoryBaseIndex, + String modelName, + int modelNumber, + Properties modelProperties, + Map<String, Object> modelAuxiliaryInfo, + String jmolData) { if (appendNew) { - ms.am[modelIndex] = (modelIsPDB ? - jbr.getBioModel(modelIndex, trajectoryBaseIndex, - jmolData, modelProperties, modelAuxiliaryInfo) - : new Model().set(ms, modelIndex, trajectoryBaseIndex, - jmolData, modelProperties, modelAuxiliaryInfo)); + boolean modelIsPDB = (modelAuxiliaryInfo != null && Boolean.TRUE == modelAuxiliaryInfo + .get("isPDB")); + ms.am[modelIndex] = (modelIsPDB ? jbr.getBioModel(modelIndex, + trajectoryBaseIndex, jmolData, modelProperties, modelAuxiliaryInfo) + : new Model().set(ms, modelIndex, trajectoryBaseIndex, jmolData, + modelProperties, modelAuxiliaryInfo)); ms.modelNumbers[modelIndex] = modelNumber; ms.modelNames[modelIndex] = modelName; + if (modelIsPDB) + jbr.setGroupLists(modelIndex); } else { - // set appendNew false - Object atomInfo = modelAuxiliaryInfo.get("PDB_CONECT_firstAtom_count_max"); + Object atomInfo = modelAuxiliaryInfo + .get("PDB_CONECT_firstAtom_count_max"); if (atomInfo != null) - ms.setInfo(modelIndex, "PDB_CONECT_firstAtom_count_max", atomInfo); + ms.setInfo(modelIndex, "PDB_CONECT_firstAtom_count_max", atomInfo); } // this next sets the bitset length to avoid // unnecessary calls to System.arrayCopy @@ -633,10 +631,9 @@ models[modelIndex].insertionCount = (codes == null ? 0 : codes.length()); boolean isModelKit = (ms.modelSetName != null && ms.modelSetName.startsWith("Jmol Model Kit") - || modelName.startsWith("Jmol Model Kit") || "Jme" - .equals(ms.getInfo(modelIndex, "fileType"))); + || modelName.startsWith("Jmol Model Kit") || "Jme".equals(ms.getInfo( + modelIndex, "fileType"))); models[modelIndex].isModelKit = isModelKit; - return modelIsPDB; } /** @@ -1032,10 +1029,10 @@ if (someModelsHaveUnitcells) { ms.unitCells = new SymmetryInterface[ms.mc]; ms.haveUnitCells = true; - boolean haveMergeCells = (mergeModelSet != null && mergeModelSet.unitCells != null); + boolean haveMergeCells = (modelSet0 != null && modelSet0.unitCells != null); for (int i = 0, pt = 0; i < ms.mc; i++) { if (haveMergeCells && i < baseModelCount) { - ms.unitCells[i] = mergeModelSet.unitCells[i]; + ms.unitCells[i] = modelSet0.unitCells[i]; } else { ms.unitCells[i] = Interface.getSymmetry(vwr, "file"); float[] notionalCell = null; @@ -1288,7 +1285,7 @@ bondsCache[j] = null; } - ms.setAtomNamesAndNumbers(0, baseAtomIndex, mergeModelSet); + ms.setAtomNamesAndNumbers(0, baseAtomIndex, modelSet0); // find elements for the popup menus Modified: trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java 2015-02-11 12:00:50 UTC (rev 20280) +++ trunk/Jmol/src/org/jmol/modelsetbio/AminoMonomer.java 2015-02-11 12:48:31 UTC (rev 20281) @@ -195,12 +195,11 @@ return nitrogenHydrogenPoint; } - public P3 getExplicitNH() { + public Atom getExplicitNH() { Atom nitrogen = getNitrogenAtom(); Atom h = null; Bond[] bonds = nitrogen.bonds; - if (bonds == null) - return null; + if (bonds != null) for (int i = 0; i < bonds.length; i++) if ((h = bonds[i].getOtherAtom(nitrogen)).getElementNumber() == 1) return h; Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-02-11 12:00:50 UTC (rev 20280) +++ trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-02-11 12:48:31 UTC (rev 20281) @@ -804,6 +804,7 @@ int ac = ms.ac; BS bsRes0 = new BS(); res0.setAtomBits(bsRes0); + Atom[] backbone = getBackbone(res0, null); int r = g.getResno(); // just use a script -- it is much easier! @@ -830,12 +831,21 @@ + " var c = {!res0 & connected(res0)}\n" + " var N2 = {*.N & c}\n" + " var C0 = {*.C & c}\n" + + " var angleH = ({*.H and res0} ? angle({*.C and res0},{*.CA and res0},{*.N and res0},{*.H and res0}) : 1000)\n" + " delete res0\n" + " if (N2) {\n" - + " delete *.OXT and res1\n" + + " delete (*.OXT,*.HXT) and res1\n" + " connect {N2} {keyatoms & *.C}\n" + " }\n" - + " if (C0) {\n" + + " if (C0) {\n" // not terminal + + " if ({res1 and _H & connected(*.N)} == 1) {\n" // proline or proline-like + + " delete *.H and res1\n" + + " } else {\n" + + " var x = angle({*.C and res1},{*.CA and res1},{*.N and res1},{*.H and res1})\n" + + " rotate branch {*.CA and res1} {*.N and res1} @{angleH-x}\n" + + " delete *.H2 and res1\n" + + " delete *.H3 and res1\n" + + " }\n" + " connect {C0} {keyatoms & *.N}\n" + " }\n" + " }\n" @@ -859,9 +869,13 @@ return false; } AminoMonomer res1 = (AminoMonomer) g; - + + // fix h position as same as previous group + getBackbone(res1, backbone); // must get new group into old chain + // note that the terminal N if replacing the N-terminus will only have two H atoms + Group[] groups = res0.chain.groups; for (int i = groups.length; --i >= 0;) if (groups[i] == res0) { @@ -889,6 +903,34 @@ ///////////////////////////////////////////////////////////////////////// + /** + * @param res1 + * @param backbone + * @return [C O CA N H] + */ + private Atom[] getBackbone(AminoMonomer res1, Atom[] backbone) { + Atom[] b = new Atom[] {res1.getCarbonylCarbonAtom(), res1.getCarbonylOxygenAtom(), + res1.getLeadAtom(), res1.getNitrogenAtom(), res1.getExplicitNH() }; + if (backbone == null) { + // don't place H if there is more than one covalent H on res0.N + if (b[3].getCovalentHydrogenCount() > 1) + b[4] = null; + } else { + for (int i = 0; i < 5; i++) { + Atom a0 = backbone[i]; + Atom a1 = b[i]; + if (a0 != null && a1 != null) + a1.setT(a0); + } + } + return b; + + + + // TODO + + } + BioModel(ModelSet modelSet, int modelIndex, int trajectoryBaseIndex, String jmolData, Properties properties, Map<String, Object> auxiliaryInfo) { vwr = modelSet.vwr; Modified: trunk/Jmol/src/org/jmol/viewer/Jmol.properties =================================================================== --- trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-02-11 12:00:50 UTC (rev 20280) +++ trunk/Jmol/src/org/jmol/viewer/Jmol.properties 2015-02-11 12:48:31 UTC (rev 20281) @@ -15,8 +15,13 @@ TODO: remove HTML5 dependency on synchronous file loading (check SCRIPT command for problems) TODO: add 2D graphics panel for Ramachandran and NBO-style 2D graphics -- send to browser as data uri? -Jmol.___JmolVersion="14.3.12_2015.02.10" +Jmol.___JmolVersion="14.3.12_2015.02.11" +bug fix: "USER MOD" not accepted at beginning of PDB file (MolProbity breaking PDB format here) +bug fix: 02.10 may break loading ligand files + +JmolVersion="14.3.12_2015.02.10" + bug fix: color $contact1 "roygb" range -0.5 1.0; broken (in state after using CONTACT) bug fix: mmCIF reader does not flag first model of a multimodel set as type PDB This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Dive into the World of Parallel Programming. The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net/ _______________________________________________ Jmol-commits mailing list Jmol-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-commits