From: <ha...@us...> - 2009-04-10 22:48:50
|
Revision: 10794 http://jmol.svn.sourceforge.net/jmol/?rev=10794&view=rev Author: hansonr Date: 2009-04-10 22:48:49 +0000 (Fri, 10 Apr 2009) Log Message: ----------- version=11.7.32 # bug fix: reading multiple files from a ZIP file collection, Jmol was forcing autobond # even when bonds were defined # bug fix: load MANIFEST not working properly # bug fix: V3000 reader chokes on CHG=n and does not recognize MASS=n # bug fix: Spartan SMOL file reader failure (coded & instead of && in if statement!) # new feature: CML "isotope" and CML "partial12" bond order. # new feature: GAMESS reader reads NBOs using # load "xxx.gamess" filter "!EIGEN" # to only load NBOs; by default ALL MOs are loaded. # new feature: QChem reader reads occupancy, frequencies and MOs Modified Paths: -------------- trunk/Jmol/src/org/jmol/minimize/Minimizer.java Modified: trunk/Jmol/src/org/jmol/minimize/Minimizer.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/Minimizer.java 2009-04-10 22:48:27 UTC (rev 10793) +++ trunk/Jmol/src/org/jmol/minimize/Minimizer.java 2009-04-10 22:48:49 UTC (rev 10794) @@ -189,13 +189,13 @@ if (atoms == null) { atomCountFull = viewer.getAtomCount(); atoms = viewer.getModelSet().getAtoms(); - bsAtoms = BitSetUtil.copy(bsSelected); - atomCount = BitSetUtil.cardinalityOf(bsAtoms); - if (atomCount == 0) { - Logger.error(GT._("No atoms selected -- nothing to do!")); - return false; - } } + bsAtoms = BitSetUtil.copy(bsSelected); + atomCount = BitSetUtil.cardinalityOf(bsAtoms); + if (atomCount == 0) { + Logger.error(GT._("No atoms selected -- nothing to do!")); + return false; + } if (!BitSetUtil.compareBits(bsSelected, this.bsSelected) && !setupMinimization()) { @@ -213,7 +213,7 @@ int nAtoms = aList[0] = Math.abs(aList[0]); for (int j = 1; j <= nAtoms; j++) { if (steps <= 0 || !bsAtoms.get(aList[j])) { - aList[0] = -nAtoms; //disable + aList[0] = -nAtoms; // disable break; } minList[j - 1] = atomMap[aList[j]]; @@ -222,7 +222,7 @@ } pFF.setConstraints(this); - + // minimize and store values if (steps > 0 && !viewer.useMinimizationThread()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-05-28 02:07:25
|
Revision: 13240 http://jmol.svn.sourceforge.net/jmol/?rev=13240&view=rev Author: hansonr Date: 2010-05-28 02:07:19 +0000 (Fri, 28 May 2010) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/minimize/Minimizer.java Modified: trunk/Jmol/src/org/jmol/minimize/Minimizer.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/Minimizer.java 2010-05-28 02:06:55 UTC (rev 13239) +++ trunk/Jmol/src/org/jmol/minimize/Minimizer.java 2010-05-28 02:07:19 UTC (rev 13240) @@ -397,7 +397,7 @@ private final static int TOKEN_ELEMENT_CONNECTED = 2; private final static int TOKEN_AROMATIC = 3; private final static int TOKEN_ELEMENT_SP = 4; - private final static int TOKEN_ELEMENT_SP2 = 5; + // private final static int TOKEN_ELEMENT_SP2 = 5; private final static int TOKEN_ELEMENT_ALLYLIC = 6; /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2012-05-09 16:38:29
|
Revision: 17105 http://jmol.svn.sourceforge.net/jmol/?rev=17105&view=rev Author: hansonr Date: 2012-05-09 16:38:20 +0000 (Wed, 09 May 2012) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/minimize/Minimizer.java Modified: trunk/Jmol/src/org/jmol/minimize/Minimizer.java =================================================================== --- trunk/Jmol/src/org/jmol/minimize/Minimizer.java 2012-05-09 16:38:09 UTC (rev 17104) +++ trunk/Jmol/src/org/jmol/minimize/Minimizer.java 2012-05-09 16:38:20 UTC (rev 17105) @@ -40,11 +40,9 @@ import org.jmol.modelset.Bond; import org.jmol.util.ArrayUtil; import org.jmol.util.BitSetUtil; -import org.jmol.util.Elements; import org.jmol.util.Escape; import org.jmol.util.JmolEdge; import org.jmol.util.Logger; -import org.jmol.util.Parser; import org.jmol.script.Token; import org.jmol.viewer.Viewer; @@ -67,13 +65,12 @@ private int steps = 50; private double crit = 1e-3; - private static List<String[]> atomTypes; private ForceField pFF; private String ff = "UFF"; - private BitSet bsTaint, bsSelected, bsAtoms; + private BitSet bsTaint, bsSelected; + public BitSet bsAtoms; private BitSet bsFixedDefault; private BitSet bsFixed; - private BitSet bsAromatic; public List<Object[]> constraints; @@ -153,7 +150,6 @@ setMinimizationOn(false); atomCount = 0; bondCount = 0; - bsAromatic = null; atoms = null; minAtoms = null; minBonds = null; @@ -171,7 +167,6 @@ constraints = null; constraintMap = null; pFF = null; - // viewer = null; } public boolean minimize(int steps, double crit, BitSet bsSelected, @@ -221,7 +216,7 @@ boolean sameAtoms = BitSetUtil.areEqual(bsSelected, this.bsSelected); this.bsSelected = bsSelected; if (!sameAtoms) - bsAromatic = null; + pFF.clear(); if ((!sameAtoms || !BitSetUtil.areEqual(bsFixed, this.bsFixed)) && !setupMinimization()) { clear(); @@ -286,8 +281,21 @@ } Logger.info(GT._("{0} atoms will be minimized.", "" + atomCount)); - Logger.info("minimize: creating bonds..."); + Logger.info("minimize: getting bonds..."); + getBonds(); + Logger.info("minimize: getting angles..."); + getAngles(); + Logger.info("minimize: getting torsions..."); + getTorsions(); + if (!pFF.setModel(this, bsElements, elemnoMax)) { + Logger.error(GT._("could not setup force field {0}", ff)); + return false; + } + return true; + } + + private void getBonds() { // add all bonds List<int[]> bondInfo = new ArrayList<int[]>(); bondCount = 0; @@ -314,11 +322,11 @@ } } } - int[] atomIndexes; minBonds = new MinBond[bondCount]; for (int i = 0; i < bondCount; i++) { - MinBond bond = minBonds[i] = new MinBond(atomIndexes = bondInfo.get(i), false, false); + int[] atomIndexes = bondInfo.get(i); + MinBond bond = minBonds[i] = new MinBond(atomIndexes, false, false); int atom1 = atomIndexes[0]; int atom2 = atomIndexes[1]; minAtoms[atom1].bonds.add(bond); @@ -328,57 +336,9 @@ } for (int i = 0; i < atomCount; i++) - atomIndexes = minAtoms[i].getBondedAtomIndexes(); - - // set the atom types - - Logger.info("minimize: setting atom types..."); - - if (atomTypes == null) - atomTypes = getAtomTypes(); - if (atomTypes == null) - return false; - int nElements = atomTypes.size(); - bsElements.clear(0); - for (int i = 0; i < nElements; i++) { - String[] data = atomTypes.get(i); - String smarts = data[0]; - if (smarts == null) - continue; - BitSet search = getSearch(smarts, elemnoMax, bsElements); - // if the 0 bit in bsElements gets set, then the element is not present, - // and there is no need to search for it; - // if search is null, then we are done -- max elemno exceeded - if (bsElements.get(0)) - bsElements.clear(0); - else if (search == null) - break; - else - for (int j = bsAtoms.nextSetBit(0), pt = 0; j < atoms.length && j >= 0; j = bsAtoms.nextSetBit(j + 1)) { - if (search.get(j)) { - minAtoms[pt].type = data[1].intern(); - //System.out.println("pt=" +pt + " UFF type=" + data[1]); - } - pt++; - } - } - - // set the model - - Logger.info("minimize: getting angles..."); - getAngles(); - Logger.info("minimize: getting torsions..."); - getTorsions(); - - pFF.setModel(this); - - if (!pFF.setup()) { - Logger.error(GT._("could not setup force field {0}", ff)); - return false; - } - return true; + minAtoms[i].getBondedAtomIndexes(); } - + private void setAtomPositions() { for (int i = 0; i < atomCount; i++) minAtoms[i].set(); @@ -391,201 +351,7 @@ bsMinFixed.set(pt); } } - //////////////// atom type support ////////////////// - - - private final static int TOKEN_ELEMENT_ONLY = 0; - private final static int TOKEN_ELEMENT_CHARGED = 1; - private final static int TOKEN_ELEMENT_CONNECTED = 2; - private final static int TOKEN_AROMATIC = 3; - private final static int TOKEN_ELEMENT_SP = 4; - // private final static int TOKEN_ELEMENT_SP2 = 5; - private final static int TOKEN_ELEMENT_ALLYLIC = 6; - - /* -Token[keyword(0x80064) value="expressionBegin"] -Token[keyword(0x2880034) intValue=2621446(0x280006) value="="] -Token[integer(0x2) intValue=6(0x6) value="6"] -Token[keyword(0x880020) value="and"] -Token[keyword(0x108002a) value="connected"] -Token[keyword(0x880000) value="("] -Token[integer(0x2) intValue=3(0x3) value="3"] -Token[keyword(0x880001) value=")"] - */ - private final static int PT_ELEMENT = 2; - private final static int PT_CHARGE = 5; - private final static int PT_CONNECT = 6; - - private final static Token[][] tokenTypes = new Token[][] { - /*0*/ new Token[]{ - Token.tokenExpressionBegin, - new Token(Token.opEQ, Token.elemno), - Token.intToken(0), //2 - Token.tokenExpressionEnd}, - /*1*/ new Token[]{ - Token.tokenExpressionBegin, - new Token(Token.opEQ, Token.elemno), - Token.intToken(0), //2 - Token.tokenAnd, - new Token(Token.opEQ, Token.formalcharge), - Token.intToken(0), //5 - Token.tokenExpressionEnd}, - /*2*/ new Token[]{ - Token.tokenExpressionBegin, - new Token(Token.opEQ, Token.elemno), - Token.intToken(0) , // 2 - Token.tokenAnd, - Token.tokenConnected, - Token.tokenLeftParen, - Token.intToken(0), // 6 - Token.tokenRightParen, - Token.tokenExpressionEnd}, - /*3*/ new Token[]{ // not used this way - Token.tokenExpressionBegin, - new Token(Token.identifier, "flatring"), - Token.tokenExpressionEnd}, - /*4*/ new Token[]{ //sp == connected(1,"triple") or connected(2, "double") - Token.tokenExpressionBegin, - new Token(Token.opEQ, Token.elemno), - Token.intToken(0) , // 2 - Token.tokenAnd, - Token.tokenLeftParen, - Token.tokenConnected, - Token.tokenLeftParen, - Token.intToken(1), - Token.tokenComma, - new Token(Token.string, "triple"), - Token.tokenRightParen, - Token.tokenOr, - Token.tokenConnected, - Token.tokenLeftParen, - Token.intToken(2), - Token.tokenComma, - new Token(Token.string, "double"), - Token.tokenRightParen, - Token.tokenRightParen, - Token.tokenExpressionEnd}, - /*5*/ new Token[]{ // sp2 == connected(1, double) - Token.tokenExpressionBegin, - new Token(Token.opEQ, Token.elemno), - Token.intToken(0) , // 2 - Token.tokenAnd, - new Token(Token.connected, "connected"), - Token.tokenLeftParen, - Token.intToken(1), - Token.tokenComma, - new Token(Token.string, "double"), - Token.tokenRightParen, - Token.tokenExpressionEnd}, - /*6*/ new Token[]{ //Nv vinylic == connected(3) && connected(connected("double")) - Token.tokenExpressionBegin, - new Token(Token.opEQ, Token.elemno), - Token.intToken(0) , // 2 - Token.tokenAnd, - Token.tokenConnected, - Token.tokenLeftParen, - Token.intToken(3), - Token.tokenRightParen, - Token.tokenAnd, - Token.tokenConnected, - Token.tokenLeftParen, - Token.tokenConnected, - Token.tokenLeftParen, - new Token(Token.string, "double"), - Token.tokenRightParen, - Token.tokenRightParen, - Token.tokenExpressionEnd}, - }; - - /* - Token[keyword(0x108002a) value="connected"] - Token[keyword(0x880000) value="("] - Token[integer(0x2) intValue=1(0x1) value="1"] - Token[keyword(0x880008) value=","] - Token[string(0x4) value="triple"] - Token[keyword(0x880001) value=")"] - Token[keyword(0x880018) value="or"] - Token[keyword(0x108002a) value="connected"] - Token[keyword(0x880000) value="("] - Token[integer(0x2) intValue=2(0x2) value="2"] - Token[keyword(0x880008) value=","] - Token[string(0x4) value="double"] - Token[keyword(0x880001) value=")"] - Token[keyword(0x80065) value="expressionEnd"] - */ - private BitSet getSearch(String smarts, int elemnoMax, BitSet bsElements) { - /* - * - * only a few possibilities -- - * - * [#n] an element --> elemno=n - * [XDn] element X with n connections - * [X^n] element X with n+1 connections - * [X+n] element X with formal charge +n - * - */ - - Token[] search = null; - - int len = smarts.length(); - search = tokenTypes[TOKEN_ELEMENT_ONLY]; - int n = smarts.charAt(len - 2) - '0'; - int elemNo = 0; - if (n >= 10) - n = 0; - boolean isAromatic = false; - if (smarts.charAt(1) == '#') { - elemNo = Parser.parseInt(smarts.substring(2, len - 1)); - } else { - String s = smarts.substring(1, (n > 0 ? len - 3 : len - 1)); - if (s.equals(s.toLowerCase())) { - s = s.toUpperCase(); - isAromatic = true; - } - elemNo = Elements.elementNumberFromSymbol(s, false); - } - if (elemNo > elemnoMax) - return null; - if (!bsElements.get(elemNo)) { - bsElements.set(0); - return null; - } - switch (smarts.charAt(len - 3)) { - case 'D': - search = tokenTypes[TOKEN_ELEMENT_CONNECTED]; - search[PT_CONNECT].intValue = n; - break; - case '^': //1 or 2 - search = tokenTypes[TOKEN_ELEMENT_SP + (n - 1)]; - break; - case '+': - search = tokenTypes[TOKEN_ELEMENT_CHARGED]; - search[PT_CHARGE].intValue = n; - break; - case '-': - search = tokenTypes[TOKEN_ELEMENT_CHARGED]; - search[PT_CHARGE].intValue = -n; - break; - case 'A': // amide/allylic (also just plain C=X) - search = tokenTypes[TOKEN_ELEMENT_ALLYLIC]; - break; - } - search[PT_ELEMENT].intValue = elemNo; - Object v = viewer.evaluateExpression(search); - if (!(v instanceof BitSet)) - return null; - BitSet bs = (BitSet) v; - if (isAromatic && bs.cardinality() > 0) { - if (bsAromatic == null) - bsAromatic = (BitSet) viewer.evaluateExpression(tokenTypes[TOKEN_AROMATIC]); - bs.and(bsAromatic); - } - if (Logger.debugging && bs.cardinality() > 0) - Logger.debug(smarts + " minimize atoms=" + bs); - return bs; - } - public void getAngles() { List<int[]> vAngles = new ArrayList<int[]>(); @@ -863,14 +629,14 @@ viewer.scriptEcho(msg); } - public void calculatePartialCharges(Bond[] bonds, + public void calculatePartialCharges(Bond[] bonds, int bondCount, Atom[] atoms, BitSet bsAtoms, SmilesMatcherInterface smartsMatcher) { //TODO -- combine SMILES and MINIMIZER in same JAR file new ForceFieldMMFF(); List<BitSet> vAromatic56 = new ArrayList<BitSet>(); int[] types = ForceFieldMMFF.getTypes(atoms, bsAtoms, smartsMatcher, vAromatic56); - float[] charges = ForceFieldMMFF.getPartialCharges(bonds, atoms, types, bsAtoms, vAromatic56); + float[] charges = ForceFieldMMFF.getPartialCharges(bonds, bondCount, atoms, types, bsAtoms, vAromatic56); viewer.setAtomProperty(bsAtoms, Token.atomtype, 0, 0, null, null, ForceFieldMMFF.getAtomTypeDescs(types)); viewer.setAtomProperty(bsAtoms, Token.partialcharge, 0, 0, null, charges, null); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |