Revision: 20261 http://sourceforge.net/p/jmol/code/20261 Author: hansonr Date: 2015-01-30 15:56:30 +0000 (Fri, 30 Jan 2015) Log Message: -----------
Modified Paths: -------------- trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java trunk/Jmol/src/org/jmol/viewer/PropertyManager.java Modified: trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java =================================================================== --- trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java 2015-01-30 15:43:23 UTC (rev 20260) +++ trunk/Jmol/src/org/jmol/modelset/JmolBioModel.java 2015-01-30 15:56:30 UTC (rev 20261) @@ -60,7 +60,7 @@ public void setAllStructureList(Map<STR, float[]> structureList); - public void getAllPolymerInfo(BS bs, + public void getPolymerInfo(BS bs, Map<String, Lst<Map<String, Object>>> finalInfo, Lst<Map<String, Object>> modelVector); Modified: trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-01-30 15:43:23 UTC (rev 20260) +++ trunk/Jmol/src/org/jmol/modelsetbio/BioModel.java 2015-01-30 15:56:30 UTC (rev 20261) @@ -249,7 +249,8 @@ if (ms.am[i].isBioModel) { BioModel m = (BioModel) ms.am[i]; if (m.nAltLocs > 0) - m.setConformation(bsAtoms); + for (int j = m.bioPolymerCount; --j >= 0;) + m.bioPolymers[j].setConformation(bsAtoms); } } @@ -380,20 +381,20 @@ return bs; } - private static int selectSeqcodeRange(Group[] groups, int n, int index, int seqcodeA, int seqcodeB, + private static int selectSeqcodeRange(Group[] groups, int groupCount, int index, int seqcodeA, int seqcodeB, BS bs) { int seqcode, indexA, indexB, minDiff; boolean isInexact = false; - for (indexA = index; indexA < n + for (indexA = index; indexA < groupCount && groups[indexA].seqcode != seqcodeA; indexA++) { } - if (indexA == n) { + if (indexA == groupCount) { // didn't find A exactly -- go find the nearest that is GREATER than this value if (index > 0) return -1; isInexact = true; minDiff = Integer.MAX_VALUE; - for (int i = n; --i >= 0;) + for (int i = groupCount; --i >= 0;) if ((seqcode = groups[i].seqcode) > seqcodeA && (seqcode - seqcodeA) < minDiff) { indexA = i; @@ -403,19 +404,19 @@ return -1; } if (seqcodeB == Integer.MAX_VALUE) { - indexB = n - 1; + indexB = groupCount - 1; isInexact = true; } else { - for (indexB = indexA; indexB < n + for (indexB = indexA; indexB < groupCount && groups[indexB].seqcode != seqcodeB; indexB++) { } - if (indexB == n) { + if (indexB == groupCount) { // didn't find B exactly -- get the nearest that is LESS than this value if (index > 0) return -1; isInexact = true; minDiff = Integer.MAX_VALUE; - for (int i = indexA; i < n; i++) + for (int i = indexA; i < groupCount; i++) if ((seqcode = groups[i].seqcode) < seqcodeB && (seqcodeB - seqcode) < minDiff) { indexB = i; @@ -836,7 +837,7 @@ ///////////////////////////////////////////////////////////////////////// - + BioModel(ModelSet modelSet, int modelIndex, int trajectoryBaseIndex, String jmolData, Properties properties, Map<String, Object> auxiliaryInfo) { vwr = modelSet.vwr; @@ -846,7 +847,29 @@ clearBioPolymers(); } + private void clearBioPolymers() { + bioPolymers = new BioPolymer[8]; + bioPolymerCount = 0; + } + @Override + public int getBioPolymerCount() { + return bioPolymerCount; + } + + @Override + public void fixIndices(int modelIndex, int nAtomsDeleted, BS bsDeleted) { + fixIndicesM(modelIndex, nAtomsDeleted, bsDeleted); + recalculateLeadMidpointsAndWingVectors(); + } + + private void recalculateLeadMidpointsAndWingVectors() { + for (int ip = 0; ip < bioPolymerCount; ip++) + bioPolymers[ip].recalculateLeadMidpointsAndWingVectors(); + } + + + @Override public boolean freeze() { freezeM(); bioPolymers = (BioPolymer[])AU.arrayCopyObject(bioPolymers, bioPolymerCount); @@ -939,20 +962,11 @@ if (bsConformation.nextSetBit(0) >= 0) { bsRet.or(bsConformation); if (doSet) - setConformation(bsConformation); + for (int j = bioPolymerCount; --j >= 0;) + bioPolymers[j].setConformation(bsConformation); } } - private void setConformation(BS bsConformation) { - for (int j = bioPolymerCount; --j >= 0;) - bioPolymers[j].setConformation(bsConformation); - } - - @Override - public int getBioPolymerCount() { - return bioPolymerCount; - } - private void addBioPolymer(BioPolymer polymer) { if (bioPolymers.length == 0) clearBioPolymers(); @@ -962,55 +976,7 @@ bioPolymers[bioPolymerCount++] = polymer; } - private void clearBioPolymers() { - bioPolymers = new BioPolymer[8]; - bioPolymerCount = 0; - } - @Override - public void getDefaultLargePDBRendering(SB sb, int maxAtoms) { - BS bs = new BS(); - if (getBondCount() == 0) - bs = bsAtoms; - // all biopolymer atoms... - if (bs != bsAtoms) - for (int i = 0; i < bioPolymerCount; i++) - bioPolymers[i].getRange(bs, isMutated); - if (bs.nextSetBit(0) < 0) - return; - // ...and not connected to backbone: - BS bs2 = new BS(); - if (bs == bsAtoms) { - bs2 = bs; - } else { - for (int i = 0; i < bioPolymerCount; i++) - if (bioPolymers[i].getType() == BioPolymer.TYPE_NOBONDING) - bioPolymers[i].getRange(bs2, isMutated); - } - if (bs2.nextSetBit(0) >= 0) - sb.append("select ").append(Escape.eBS(bs2)).append(";backbone only;"); - if (ac <= maxAtoms) - return; - // ...and it's a large model, to wireframe: - sb.append("select ").append(Escape.eBS(bs)).append(" & connected; wireframe only;"); - // ... and all non-biopolymer and not connected to stars... - if (bs != bsAtoms) { - bs2.clearAll(); - bs2.or(bsAtoms); - bs2.andNot(bs); - if (bs2.nextSetBit(0) >= 0) - sb.append("select " + Escape.eBS(bs2) + " & !connected;stars 0.5;spacefill off;"); - } - } - - @Override - public void fixIndices(int modelIndex, int nAtomsDeleted, BS bsDeleted) { - fixIndicesM(modelIndex, nAtomsDeleted, bsDeleted); - for (int i = 0; i < bioPolymerCount; i++) - bioPolymers[i].recalculateLeadMidpointsAndWingVectors(); - } - - @Override public Lst<BS> getBioBranches(Lst<BS> biobranches) { // scan through biopolymers quickly -- BS bsBranch; @@ -1028,7 +994,7 @@ } @Override - public void getAllPolymerInfo( + public void getPolymerInfo( BS bs, Map<String, Lst<Map<String, Object>>> finalInfo, Lst<Map<String, Object>> modelVector) { @@ -1114,12 +1080,6 @@ pdbCONECT, bsWritten, ptTemp); } - private void recalculateLeadMidpointsAndWingVectors() { - for (int ip = 0; ip < bioPolymerCount; ip++) - bioPolymers[ip].recalculateLeadMidpointsAndWingVectors(); - } - - /** * from ModelSet.setAtomPositions * @@ -1144,5 +1104,41 @@ getRasmolHydrogenBonds(bs, bs, null, false, Integer.MAX_VALUE, false, null); } + @Override + public void getDefaultLargePDBRendering(SB sb, int maxAtoms) { + BS bs = new BS(); + if (getBondCount() == 0) + bs = bsAtoms; + // all biopolymer atoms... + if (bs != bsAtoms) + for (int i = 0; i < bioPolymerCount; i++) + bioPolymers[i].getRange(bs, isMutated); + if (bs.nextSetBit(0) < 0) + return; + // ...and not connected to backbone: + BS bs2 = new BS(); + if (bs == bsAtoms) { + bs2 = bs; + } else { + for (int i = 0; i < bioPolymerCount; i++) + if (bioPolymers[i].getType() == BioPolymer.TYPE_NOBONDING) + bioPolymers[i].getRange(bs2, isMutated); + } + if (bs2.nextSetBit(0) >= 0) + sb.append("select ").append(Escape.eBS(bs2)).append(";backbone only;"); + if (ac <= maxAtoms) + return; + // ...and it's a large model, to wireframe: + sb.append("select ").append(Escape.eBS(bs)).append(" & connected; wireframe only;"); + // ... and all non-biopolymer and not connected to stars... + if (bs != bsAtoms) { + bs2.clearAll(); + bs2.or(bsAtoms); + bs2.andNot(bs); + if (bs2.nextSetBit(0) >= 0) + sb.append("select " + Escape.eBS(bs2) + " & !connected;stars 0.5;spacefill off;"); + } + } + } Modified: trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java 2015-01-30 15:43:23 UTC (rev 20260) +++ trunk/Jmol/src/org/jmol/modelsetbio/Resolver.java 2015-01-30 15:56:30 UTC (rev 20261) @@ -1826,7 +1826,7 @@ + " load append "+fileName+"\n" + " set appendNew " + b + "\n" + " var res1 = {!atoms0};var r1 = res1[1];var r0 = res1[0]\n" - + " if ({r1 & within(group, r0)}){" + + " if ({r1 & within(group, r0)}){\n" + " var haveHs = ({_H and connected(res0)} != 0)\n" + " if (!haveHs) {delete _H and res1}\n" + " var sm = '[*.N][*.CA][*.C][*.O]'\n" Modified: trunk/Jmol/src/org/jmol/viewer/PropertyManager.java =================================================================== --- trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2015-01-30 15:43:23 UTC (rev 20260) +++ trunk/Jmol/src/org/jmol/viewer/PropertyManager.java 2015-01-30 15:56:30 UTC (rev 20261) @@ -1491,7 +1491,7 @@ Model[] models = vwr.ms.am; for (int i = 0; i < modelCount; ++i) if (models[i].isBioModel) - ((JmolBioModel) models[i]).getAllPolymerInfo(bs, finalInfo, modelVector); + ((JmolBioModel) models[i]).getPolymerInfo(bs, finalInfo, modelVector); finalInfo.put("models", modelVector); return finalInfo; } 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