From: <ha...@us...> - 2008-11-02 05:31:03
|
Revision: 10209 http://jmol.svn.sourceforge.net/jmol/?rev=10209&view=rev Author: hansonr Date: 2008-11-02 05:30:59 +0000 (Sun, 02 Nov 2008) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/more/FFReader.java trunk/Jmol/src/org/jmol/adapter/readers/more/MdTopReader.java trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/FFReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/FFReader.java 2008-11-02 05:14:59 UTC (rev 10208) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/FFReader.java 2008-11-02 05:30:59 UTC (rev 10209) @@ -30,14 +30,27 @@ /* * MdTopReader and Mol2Reader must determine element from force-field atom type, if possible. + * see http://www.chem.cmu.edu/courses/09-560/docs/msi/ffbsim/B_AtomTypes.html last accessed 10/30/2008 + * with additions from * + * J. Am. Chem. SOC. 1995, 117, 5179-5197 + * + * A Second Generation Force Field for the Simulation of + * Proteins, Nucleic Acids, and Organic Molecules + * + * Wendy D. Cornell, Piotr Cieplak, Christopher I. Bayly, Ian R. Gould, + * Kenneth M. Merz, Jr., David M. Ferguson, David C. Spellmeyer, Thomas Fox, + * James W. Caldwell, and Peter A. Kollman + * + * Bob Hanson ha...@st... 10/31/2008 + * contributions from Francois-Yves Dupradeau + * + * x, X, and Xx symbols will always be themselves and so are not included in the lists below. + * xn... Xn... or Xxn... where n is not a letter will likewise be handled without the list */ abstract class FFReader extends AtomSetCollectionReader { //private final static String sybylTypes = " Any C.1 C.2 C.3 C.ar C.cat Co.oh Cr.oh Cr.th Cu Du Du.C Fe H.spc H.t3p Hal Het Hev LP N.1 N.2 N.3 N.4 N.am N.ar N.pl3 O.2 O.3 O.co2 O.spc O.t3p P.3 S.2 S.3 S.O S.O2 "; - // see http://www.chem.cmu.edu/courses/09-560/docs/msi/ffbsim/B_AtomTypes.html last accessed 10/30/2008 - // x, X, and Xx symbols will always be themselves and so are not included in the lists below. - // xn... Xn... or Xxn... where n is not a letter will likewise be handled without the list // some duplication below... private final static String ffTypes = /* AMBER */ " CA CB CC CD CE CF CG CH CI CJ CK CM CN CP CQ CR CT CV CW HA HP HC HO HS HW LP NA NB NC NT OH OS OW SH AH BH HT HY AC BC CS OA OB OE OT " Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/MdTopReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/MdTopReader.java 2008-11-02 05:14:59 UTC (rev 10208) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/MdTopReader.java 2008-11-02 05:30:59 UTC (rev 10209) @@ -114,7 +114,7 @@ String atomType = atom.atomName; atomType = atomType.substring(atomType.indexOf('\0') + 1); if (!getElementSymbol(atom, atomType)) - atom.elementSymbol = deduceElementSymbol(atom.isHetero, atom.atomName, + atom.elementSymbol = deducePdbElementSymbol(atom.isHetero, atom.atomName, atom.group3); } atomSetCollection.setAtomSetCollectionAuxiliaryInfo("isPDB", Boolean.TRUE); Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java 2008-11-02 05:14:59 UTC (rev 10208) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java 2008-11-02 05:30:59 UTC (rev 10209) @@ -178,7 +178,7 @@ isPDB = true; } if (isPDB && deduceSymbol) - atom.elementSymbol = deduceElementSymbol(atom.isHetero, atomType, + atom.elementSymbol = deducePdbElementSymbol(atom.isHetero, atomType, atom.group3); //System.out.print(atom.atomName + "/" + atom.elementSymbol + " " ); } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2008-11-02 05:14:59 UTC (rev 10208) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2008-11-02 05:30:59 UTC (rev 10209) @@ -642,7 +642,7 @@ return JmolAdapter.getElementSymbol(elementNumber); } - public static String deduceElementSymbol(boolean isHetero, String XX, + public static String deducePdbElementSymbol(boolean isHetero, String XX, String group3) { // short of having an entire table, int i = XX.indexOf('\0'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2008-12-03 05:29:20
|
Revision: 10419 http://jmol.svn.sourceforge.net/jmol/?rev=10419&view=rev Author: hansonr Date: 2008-12-03 05:29:17 +0000 (Wed, 03 Dec 2008) Log Message: ----------- version=11.7.16_dev load xxx.gamess FILTER # new feature: load xxx.gamess FILTER "natural,optimized" # new feature: load xxx.gamess FILTER "!natural,!initial" Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/more/GamessUSReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/GamessUSReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/GamessUSReader.java 2008-12-03 04:34:54 UTC (rev 10418) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/GamessUSReader.java 2008-12-03 05:29:17 UTC (rev 10419) @@ -31,6 +31,7 @@ package org.jmol.adapter.readers.more; import org.jmol.adapter.smarter.*; +import org.jmol.util.Logger; import java.io.BufferedReader; import java.util.Hashtable; @@ -46,56 +47,65 @@ readLine(); boolean iHaveAtoms = false; while (line != null) { - if (line.indexOf("COORDINATES (BOHR)") >= 0 || line.indexOf("COORDINATES OF ALL ATOMS ARE (ANGS)") >= 0) { - if (!doGetModel(++modelNumber)) { - if (isLastModel(modelNumber) && iHaveAtoms) - break; - iHaveAtoms = false; + boolean isBohr; + if ((isBohr = line.indexOf("COORDINATES (BOHR)") >= 0) + || line.indexOf("COORDINATES OF ALL ATOMS ARE (ANGS)") >= 0) { + if (doGetModel(++modelNumber)) { + if (isBohr) + readAtomsInBohrCoordinates(); + else + readAtomsInAngstromCoordinates(); + iHaveAtoms = true; readLine(); continue; } - if (line.indexOf("COORDINATES (BOHR)") >= 0) - readAtomsInBohrCoordinates(); - else - readAtomsInAngstromCoordinates(); - iHaveAtoms = true; - } else if (iHaveAtoms && line.indexOf("FREQUENCIES IN CM") >= 0) { - readFrequencies(); - } else if (iHaveAtoms && line.indexOf("ATOMIC BASIS SET") >= 0) { - readGaussianBasis("SHELL TYPE", "TOTAL"); - continue; - } else if (iHaveAtoms - && line.indexOf("SUMMARY OF THE EFFECTIVE FRAGMENT") >= 0) { - // We have EFP and we're not afraid to use it!! - //it would be nice is this information was closer to the ab initio molecule - readEFPInBohrCoordinates(); - continue; - } else if (iHaveAtoms - && (line.indexOf(" EIGENVECTORS") >= 0 - || line.indexOf(" INITIAL GUESS ORBITALS") >= 0 - || line.indexOf(" MCSCF OPTIMIZED ORBITALS") >= 0 - || line.indexOf(" MCSCF NATURAL ORBITALS") >= 0 - || line.indexOf(" MOLECULAR ORBITALS") >= 0 && - line.indexOf(" MOLECULAR ORBITALS LOCALIZED BY THE POPULATION METHOD") < 0)) { - headerType = 1; // energies and possibly symmetries - readMolecularOrbitals(); //1,1 + if (isLastModel(modelNumber) && iHaveAtoms) + break; + iHaveAtoms = false; + } + if (iHaveAtoms) { + if (line.indexOf("FREQUENCIES IN CM") >= 0) { + readFrequencies(); + } else if (line.indexOf("ATOMIC BASIS SET") >= 0) { + readGaussianBasis("SHELL TYPE", "TOTAL"); continue; - } else if (line.indexOf("EDMISTON-RUEDENBERG ENERGY LOCALIZED ORBITALS") >= 0 - || line.indexOf(" THE PIPEK-MEZEY POPULATION LOCALIZED ORBITALS ARE") >= 0) { - headerType = 0; // no header - readMolecularOrbitals(); //0,3 - continue; + } else if (line.indexOf("SUMMARY OF THE EFFECTIVE FRAGMENT") >= 0) { + // We have EFP and we're not afraid to use it!! + //it would be nice is this information was closer to the ab initio molecule + readEFPInBohrCoordinates(); + continue; + } else if (line.indexOf(" EIGENVECTORS") >= 0 + || line.indexOf(" INITIAL GUESS ORBITALS") >= 0 + || line.indexOf(" MCSCF OPTIMIZED ORBITALS") >= 0 + || line.indexOf(" MCSCF NATURAL ORBITALS") >= 0 + || line.indexOf(" MOLECULAR ORBITALS") >= 0 + && line.indexOf(" MOLECULAR ORBITALS LOCALIZED BY THE POPULATION METHOD") < 0) { + if (filterMO()) { + headerType = 1; // energies and possibly symmetries + readMolecularOrbitals(); //1,1 + continue; + } + } else if (line + .indexOf("EDMISTON-RUEDENBERG ENERGY LOCALIZED ORBITALS") >= 0 + || line + .indexOf(" THE PIPEK-MEZEY POPULATION LOCALIZED ORBITALS ARE") >= 0) { + if (filterMO()) { + headerType = 0; // no header + readMolecularOrbitals(); //0,3 + continue; + } + } else if (line.indexOf(" NATURAL ORBITALS IN ATOMIC ORBITAL BASIS") >= 0) { + //the for mat of the next orbitals can change depending on the + //cistep used. This works for ALDET and GUGA + + // BH to AD: but the GUGA file delivered has only energies? + if (filterMO()) { + headerType = 2; // occupancies and possibly symmetries + readMolecularOrbitals(); //1,2 + continue; + } + } } - else if (line.indexOf(" NATURAL ORBITALS IN ATOMIC ORBITAL BASIS") >= 0) { - //the for mat of the next orbitals can change depending on the - //cistep used. This works for ALDET and GUGA - - // BH to AD: but the GUGA file delivered has only energies? - - headerType = 2; // occupancies and possibly symmetries - readMolecularOrbitals(); //1,2 - continue; - } readLine(); } } catch (Exception e) { @@ -104,6 +114,33 @@ return atomSetCollection; } + private String[] filterTokens; + private boolean filterIsNot; + private boolean filterMO() { + boolean isOK = true; + int nOK = 0; + if (filter != null) { + line = line.toLowerCase(); + if (filterTokens == null) { + filterIsNot = (filter.indexOf("!") >= 0); + filterTokens = getTokens(filter.replace('!', ' ').replace(',', ' ') + .replace(';', ' ').toLowerCase()); + } + for (int i = 0; i < filterTokens.length; i++) + if (line.indexOf(filterTokens[i]) >= 0) { + if (!filterIsNot) { + nOK = filterTokens.length; + break; + } + } else if (filterIsNot) { + nOK++; + } + isOK = (nOK == filterTokens.length); + } + Logger.info("filter MOs: " + isOK + " " + line); + return isOK; + } + /* for H2ORHF, the Z entries are nuclear positions Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2008-12-03 04:34:54 UTC (rev 10418) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2008-12-03 05:29:17 UTC (rev 10419) @@ -301,7 +301,7 @@ bsFilter = new BitSet(); htParams.put("bsFilter", bsFilter); filter = (";" + filter + ";").replace(',', ';'); - Logger.info("filtering atoms using " + filter); + Logger.info("filtering with " + filter); } // ptFile < 0 indicates just one file being read // ptFile >= 0 indicates multiple files are being loaded @@ -516,10 +516,12 @@ } public boolean filterAtom(Atom atom) { + //cif, pdb readers return filterAtom(atom, atomSetCollection.atomCount); } public boolean filterAtom(Atom atom, int iAtom) { + //mdtop, cif, pdb String code; boolean isOK = false; while (true) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-03-28 15:28:19
|
Revision: 10743 http://jmol.svn.sourceforge.net/jmol/?rev=10743&view=rev Author: hansonr Date: 2009-03-28 15:27:38 +0000 (Sat, 28 Mar 2009) Log Message: ----------- version=11.7.31_dev # code -- more documentation and somewhat reorganized adapter section. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Added Paths: ----------- trunk/Jmol/src/org/jmol/adapter/readers/more/GaussianWfnReader.java Added: trunk/Jmol/src/org/jmol/adapter/readers/more/GaussianWfnReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/GaussianWfnReader.java (rev 0) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/GaussianWfnReader.java 2009-03-28 15:27:38 UTC (rev 10743) @@ -0,0 +1,171 @@ +/* $RCSfile$ + * $Author: hansonr $ + * $Date: 2006-09-12 00:46:22 -0500 (Tue, 12 Sep 2006) $ + * $Revision: 5501 $ + * + * Copyright (C) 2004-2005 The Jmol Development Team + * + * Contact: jmo...@li... + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +package org.jmol.adapter.readers.more; + +import org.jmol.adapter.smarter.*; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.util.Hashtable; +import java.util.Vector; + +import javax.vecmath.Vector3f; + +import org.jmol.api.JmolAdapter; +import org.jmol.util.Logger; + +/** + * Reader for Gaussian Wfn files + * + **/ +public class GaussianWfnReader extends AtomSetCollectionReader { + int atomCount = 0; + int shellCount = 0; + int gaussianCount = 0; + Hashtable moData = new Hashtable(); + Vector orbitals = new Vector(); + + + /* I thought perhaps this would be enough, but now I'm not so sure. + * +GAUSSIAN 14 MOL ORBITALS 168 PRIMITIVES 6 NUCLEI + B 1 (CENTRE 1) 0.00000000 2.98988716 0.00000000 CHARGE = 5.0 + B 2 (CENTRE 2) 2.58931823 1.49494358 0.00000000 CHARGE = 5.0 + B 3 (CENTRE 3) 2.58931823 -1.49494358 0.00000000 CHARGE = 5.0 + B 4 (CENTRE 4) 0.00000000 -2.98988716 0.00000000 CHARGE = 5.0 + B 5 (CENTRE 5) -2.58931823 -1.49494358 0.00000000 CHARGE = 5.0 + B 6 (CENTRE 6) -2.58931823 1.49494358 0.00000000 CHARGE = 5.0 +CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +CENTRE ASSIGNMENTS 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 +CENTRE ASSIGNMENTS 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 +CENTRE ASSIGNMENTS 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +CENTRE ASSIGNMENTS 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 +CENTRE ASSIGNMENTS 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 +CENTRE ASSIGNMENTS 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 +CENTRE ASSIGNMENTS 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 +CENTRE ASSIGNMENTS 6 6 6 6 6 6 6 6 +TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 +TYPE ASSIGNMENTS 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 +TYPE ASSIGNMENTS 3 3 3 4 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 +TYPE ASSIGNMENTS 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 3 4 5 6 +TYPE ASSIGNMENTS 7 8 9 10 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 +TYPE ASSIGNMENTS 4 4 1 2 3 4 5 6 7 8 9 10 1 1 1 1 1 1 1 1 +TYPE ASSIGNMENTS 1 2 2 2 3 3 3 4 4 4 1 2 3 4 5 6 7 8 9 10 +TYPE ASSIGNMENTS 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 1 2 +TYPE ASSIGNMENTS 3 4 5 6 7 8 9 10 +EXPONENTS 0.2068882D+04 0.3106496D+03 0.7068303D+02 0.1986108D+02 0.6299305D+01 + */ + /** + * Reads a Collection of AtomSets from a BufferedReader. + * + * + * @param reader BufferedReader associated with the Gaussian output text. + * @return The AtomSetCollection representing the interpreted Gaussian text. + **/ + + public AtomSetCollection readAtomSetCollection(BufferedReader reader) { +/* + this.reader = reader; + atomSetCollection = new AtomSetCollection("wfn"); + try { + readHeader(); + readAtoms(); + readBasis(); + readMolecularOrbitals(); + } catch (Exception e) { + return setError(e); + } +*/ + return atomSetCollection; + } + + /* + private int nMo, nPrimitive; + // GAUSSIAN 14 MOL ORBITALS 168 PRIMITIVES 6 NUCLEI + + private void readHeader() throws Exception { + String[] tokens = getTokens(); + nMo = parseInt(tokens[1]); + nPrimitive = parseInt(tokens[4]); + atomCount = parseInt(tokens[6]); + } + + // B 1 (CENTRE 1) 0.00000000 2.98988716 0.00000000 CHARGE = 5.0 + + private void readAtoms() throws Exception { + atomSetCollection.newAtomSet(); + String tokens[]; + for (int i = 0; i < atomCount; i++) { + tokens = getTokens(readLine()); + Atom atom = atomSetCollection.addNewAtom(); + atom.elementSymbol = tokens[0]; + setAtomCoord(atom, parseFloat(tokens[4]), parseFloat(tokens[5]), parseFloat(tokens[6])); + } + } + + private int[] getIntArray(int n, int pt) { + int[] a = new int[n]; + String[] tokens; + int nValues = 0; + while (nValues < n) { + tokens = getTokens(readLine()); + for (int i = pt; i < tokens.length; i++) + a[nValues++] = parseInt(tokens[i]); + } + return a; + } + + private float[] getFloatArray(int n, int pt) { + float[] a = new float[n]; + String[] tokens; + int nValues = 0; + while (nValues < n) { + tokens = getTokens(readLine()); + for (int i = pt; i < tokens.length; i++) + a[nValues++] = parseFloat(tokens[i]); + } + return a; + } + + private void readBasis() throws Exception { + Vector sdata = new Vector(); + Vector gdata = new Vector(); + gaussianCount = 0; + shellCount = 0; + int[] centers = getIntArray(nPrimitive, 2); + int[] types = getIntArray(nPrimitive, 2); + float[] exponents = getFloatArray(nPrimitive, 1); + int lastAtom = -1; + for (i = 0; i < nPrimitive; i++) { + what here? + } + } + + void readMolecularOrbitals() throws Exception { + } + + */ +} Property changes on: trunk/Jmol/src/org/jmol/adapter/readers/more/GaussianWfnReader.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-03-28 15:22:55 UTC (rev 10742) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-03-28 15:27:38 UTC (rev 10743) @@ -41,23 +41,6 @@ public class Resolver { - private final static String classBase = "org.jmol.adapter.readers."; - private final static String[] readerSets = new String[] { - "cifpdb.", "Cif;Pdb;", - "molxyz.", "Mol;Xyz;", - "xml.", "Xml;" - }; - - private final static String getReaderClassBase(String type) { - String base = "more."; - for (int i = 1; i < readerSets.length; i += 2) - if (readerSets[i].indexOf(type + ";") >= 0) { - base = readerSets[i - 1]; - break; - } - return classBase + base + type + "Reader"; - } - /** * From SmarterJmolAdapter.getFileTypeName(Object atomSetCollectionOrReader) * just return the file type with no exception issues @@ -135,94 +118,6 @@ } /** - * returns the list of files to read for every Spartan spardir. Simple numbers - * are assumed to be Profiles; others are models. - * - * @param name - * @param dirNums - * @return String[] list of files to read given a list of directory names - * - */ - private static String[] getSpartanFileList(String name, String[] dirNums) { - String[] files = new String[2 + dirNums.length*5]; - files[0] = "SpartanSmol"; - files[1] = "Directory Entry "; - int pt = 2; - name = name.replace('\\', '/'); - if (name.endsWith("/")) - name = name.substring(0, name.length() - 1); - for (int i = 0; i < dirNums.length; i++) { - String path = name + (Character.isDigit(dirNums[i].charAt(0)) ? - "/Profile." + dirNums[i] : "/" + dirNums[i]); - files[pt++] = path + "/#JMOL_MODEL " + dirNums[i]; - files[pt++] = path + "/input"; - files[pt++] = path + "/archive"; - files[pt++] = path + "/Molecule:asBinaryString"; - files[pt++] = path + "/proparc"; - } - return files; - } - - /** - * read the output file from the Spartan directory and decide from that what - * files need to be read and in what order - usually M0001 or a set of Profiles. - * But Spartan saves the Profiles in alphabetical order, not numerical. So we - * fix that here. - * - * @param outputFileData - * @return String[] list of files to read - */ - private static String[] getSpartanDirs(String outputFileData) { - if (outputFileData == null) - return new String[]{}; - if (outputFileData.startsWith("java.io.FileNotFoundException") - || outputFileData.startsWith("FILE NOT FOUND") - || outputFileData.indexOf("<html") >= 0) - return new String[] { "M0001" }; - int pt = outputFileData.indexOf("Start- Molecule"); - if (pt > 0) - return new String[] { outputFileData.substring(pt).split("\"")[1] }; // M0001 - Vector v = new Vector(); - String token; - String lasttoken = ""; - try { - StringTokenizer tokens = new StringTokenizer(outputFileData, " \t\r\n"); - while (tokens.hasMoreTokens()) { - // profile file name is just before each right-paren: - /* - * MacSPARTAN '08 ENERGY PROFILE: x86/Darwin 130 - * - * Dihedral Move : C3 - C2 - C1 - O1 [ 4] -180.000000 .. 180.000000 - * Dihedral Move : C2 - C1 - O1 - H3 [ 4] -180.000000 .. 180.000000 - * - * 1 ) -180.00 -180.00 -504208.11982719 2 ) -90.00 -180.00 - * -504200.18593376 - * - * ... - * - * 24 ) 90.00 180.00 -504200.18564495 25 ) 180.00 180.00 - * -504208.12129747 - * - * Found a local maxima E = -504178.25455465 [ 3 3 ] - * - * - * Reason for exit: Successful completion Mechanics CPU Time : 1:51.42 - * Mechanics Wall Time: 12:31.54 - */ - if ((token = tokens.nextToken()).equals(")")) - v.add(lasttoken); - lasttoken = token; - } - } catch (Exception e) { - // - } - String[] dirs = new String[v.size()]; - for (int i = 0; i < v.size(); i++) - dirs[i] = (String) v.get(i); - return dirs; - } - - /** * called by SmarterJmolAdapter to see if we can automatically assign a file * from the zip file. If so, return a subfile list for this file. The first * element of the list is left empty -- it would be the zipfile name. @@ -396,6 +291,111 @@ ////// PRIVATE METHODS /////// + private final static String classBase = "org.jmol.adapter.readers."; + private final static String[] readerSets = new String[] { + "cifpdb.", "Cif;Pdb;", + "molxyz.", "Mol;Xyz;", + "xml.", "Xml;" + }; + + private final static String getReaderClassBase(String type) { + String base = "more."; + for (int i = 1; i < readerSets.length; i += 2) + if (readerSets[i].indexOf(type + ";") >= 0) { + base = readerSets[i - 1]; + break; + } + return classBase + base + type + "Reader"; + } + + /** + * returns the list of files to read for every Spartan spardir. Simple numbers + * are assumed to be Profiles; others are models. + * + * @param name + * @param dirNums + * @return String[] list of files to read given a list of directory names + * + */ + private static String[] getSpartanFileList(String name, String[] dirNums) { + String[] files = new String[2 + dirNums.length*5]; + files[0] = "SpartanSmol"; + files[1] = "Directory Entry "; + int pt = 2; + name = name.replace('\\', '/'); + if (name.endsWith("/")) + name = name.substring(0, name.length() - 1); + for (int i = 0; i < dirNums.length; i++) { + String path = name + (Character.isDigit(dirNums[i].charAt(0)) ? + "/Profile." + dirNums[i] : "/" + dirNums[i]); + files[pt++] = path + "/#JMOL_MODEL " + dirNums[i]; + files[pt++] = path + "/input"; + files[pt++] = path + "/archive"; + files[pt++] = path + "/Molecule:asBinaryString"; + files[pt++] = path + "/proparc"; + } + return files; + } + + /** + * read the output file from the Spartan directory and decide from that what + * files need to be read and in what order - usually M0001 or a set of Profiles. + * But Spartan saves the Profiles in alphabetical order, not numerical. So we + * fix that here. + * + * @param outputFileData + * @return String[] list of files to read + */ + private static String[] getSpartanDirs(String outputFileData) { + if (outputFileData == null) + return new String[]{}; + if (outputFileData.startsWith("java.io.FileNotFoundException") + || outputFileData.startsWith("FILE NOT FOUND") + || outputFileData.indexOf("<html") >= 0) + return new String[] { "M0001" }; + int pt = outputFileData.indexOf("Start- Molecule"); + if (pt > 0) + return new String[] { outputFileData.substring(pt).split("\"")[1] }; // M0001 + Vector v = new Vector(); + String token; + String lasttoken = ""; + try { + StringTokenizer tokens = new StringTokenizer(outputFileData, " \t\r\n"); + while (tokens.hasMoreTokens()) { + // profile file name is just before each right-paren: + /* + * MacSPARTAN '08 ENERGY PROFILE: x86/Darwin 130 + * + * Dihedral Move : C3 - C2 - C1 - O1 [ 4] -180.000000 .. 180.000000 + * Dihedral Move : C2 - C1 - O1 - H3 [ 4] -180.000000 .. 180.000000 + * + * 1 ) -180.00 -180.00 -504208.11982719 2 ) -90.00 -180.00 + * -504200.18593376 + * + * ... + * + * 24 ) 90.00 180.00 -504200.18564495 25 ) 180.00 180.00 + * -504208.12129747 + * + * Found a local maxima E = -504178.25455465 [ 3 3 ] + * + * + * Reason for exit: Successful completion Mechanics CPU Time : 1:51.42 + * Mechanics Wall Time: 12:31.54 + */ + if ((token = tokens.nextToken()).equals(")")) + v.add(lasttoken); + lasttoken = token; + } + } catch (Exception e) { + // + } + String[] dirs = new String[v.size()]; + for (int i = 0; i < v.size(); i++) + dirs[i] = (String) v.get(i); + return dirs; + } + private static final String CML_NAMESPACE_URI = "http://www.xml-cml.org/schema"; private static String getXmlType(JSObject DOMNode) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-03-29 19:33:09
|
Revision: 10749 http://jmol.svn.sourceforge.net/jmol/?rev=10749&view=rev Author: hansonr Date: 2009-03-29 19:32:04 +0000 (Sun, 29 Mar 2009) Log Message: ----------- version=11.7.31_dev # new feature: Spartan MO-Animation files can be read Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/more/SpartanSmolReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/SpartanSmolReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/SpartanSmolReader.java 2009-03-29 18:04:07 UTC (rev 10748) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/SpartanSmolReader.java 2009-03-29 19:32:04 UTC (rev 10749) @@ -112,7 +112,7 @@ atomSetCollection.newAtomSet(); moData = new Hashtable(); if (modelNo == Integer.MIN_VALUE) { - modelNo = 1; + modelNo = modelNumber; title = "Model " + line.substring(line.lastIndexOf(" ") + 1); } else { title = (String) titles.get("Title" + modelNo); Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2009-03-29 18:04:07 UTC (rev 10748) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2009-03-29 19:32:04 UTC (rev 10749) @@ -99,6 +99,7 @@ public boolean getHeader; public String filter; + public BitSet bsFilter; public String spaceGroup; private SymmetryInterface symmetry; Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-03-29 18:04:07 UTC (rev 10748) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2009-03-29 19:32:04 UTC (rev 10749) @@ -36,6 +36,7 @@ import org.jmol.util.BitSetUtil; import org.jmol.util.Escape; import org.jmol.util.Logger; +import org.jmol.util.TextFormat; import org.jmol.util.ZipUtil; @@ -353,9 +354,6 @@ || outputFileData.startsWith("FILE NOT FOUND") || outputFileData.indexOf("<html") >= 0) return new String[] { "M0001" }; - int pt = outputFileData.indexOf("Start- Molecule"); - if (pt > 0) - return new String[] { outputFileData.substring(pt).split("\"")[1] }; // M0001 Vector v = new Vector(); String token; String lasttoken = ""; @@ -385,6 +383,8 @@ */ if ((token = tokens.nextToken()).equals(")")) v.add(lasttoken); + else if (token.equals("Start-") && tokens.nextToken().equals("Molecule")) + v.add(TextFormat.split(tokens.nextToken(), '"')[1]); lasttoken = token; } } catch (Exception e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2009-05-15 16:56:56
|
Revision: 10863 http://jmol.svn.sourceforge.net/jmol/?rev=10863&view=rev Author: hansonr Date: 2009-05-15 16:56:43 +0000 (Fri, 15 May 2009) Log Message: ----------- version=11.7.36_dev # new feature: Wien2k reader, load PACKED update Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/more/Wien2kReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/Wien2kReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/Wien2kReader.java 2009-05-15 16:25:20 UTC (rev 10862) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/Wien2kReader.java 2009-05-15 16:56:43 UTC (rev 10863) @@ -59,7 +59,8 @@ private void readUnitCell() throws Exception { readLine(); isrhombohedral = ((latticeCode = line.charAt(0)) == 'R'); - atomSetCollection.setLatticeParameter(latticeCode); + if (latticeCode != 'R') + atomSetCollection.setLatticeParameter(latticeCode); if (line.length() > 32) { String name = line.substring(32).trim(); if (name.indexOf(" ") >= 0) Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2009-05-15 16:25:20 UTC (rev 10862) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2009-05-15 16:56:43 UTC (rev 10863) @@ -834,12 +834,13 @@ Atom special = null; Point3f cartesian = new Point3f(ptAtom); symmetry.toCartesian(cartesian); - if (doPackUnitCell - && !isWithinCell(ptAtom, minX + 1, maxX - 1, minY + 1, maxY - 1, minZ + 1, maxZ - 1)) - continue; - //symmetry.toUnitCell(cartesian, ptOffset); - //ptAtom.set(cartesian); - //symmetry.toFractional(ptAtom); + if (doPackUnitCell) { + symmetry.toUnitCell(cartesian, ptOffset); + ptAtom.set(cartesian); + symmetry.toFractional(ptAtom); + if (!isWithinCell(ptAtom, minX + 1, maxX - 1, minY + 1, maxY - 1, minZ + 1, maxZ - 1)) + continue; + } if (checkSymmetryMinMax) setSymmetryMinMax(cartesian); if (checkDistances) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-02-18 15:05:02
|
Revision: 12406 http://jmol.svn.sourceforge.net/jmol/?rev=12406&view=rev Author: hansonr Date: 2010-02-18 15:04:53 +0000 (Thu, 18 Feb 2010) Log Message: ----------- preliminary CRYSTAL reader -- requires CRYSTAL:: prefix in LOAD command. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-18 13:44:51 UTC (rev 12405) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-18 15:04:53 UTC (rev 12406) @@ -5,9 +5,9 @@ * * Contact: jmo...@li... * - * Copyright (C) 2009 Joerg Meyer, FHI Berlin + * Copyright (C) 2009 Piero Canepa, University of Kent , UK * - * Contact: me...@fh... + * Contact: pc...@ke... or pie...@gm... * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -31,61 +31,83 @@ import java.io.BufferedReader; /** - * - * http://www.cse.clrc.ac.uk/cmg/CRYSTAL/ - * - * very preliminary -- untested - * - * + * + * http://www.crystal.unito.it/ + * + * @author Pieremanuele Canepa, Room 104, FM Group + * School of Physical Sciences, Ingram Building, + * University of Kent, Canterbury, Kent, + * CT2 7NH + * United Kingdom + * + * @version 1.0 + * + * This version works and has been well tested on several structures! + * */ public class CrystalReader extends AtomSetCollectionReader { - public void readAtomSetCollection(BufferedReader reader) { + public void readAtomSetCollection(BufferedReader reader) { - atomSetCollection = new AtomSetCollection("Crystal", this); - try { - this.reader = reader; - atomSetCollection.setCollectionName(readLine()); - while (readLine() != null) { - if (line.startsWith(" MOLECULE")) { - readAtomCoords(false); - break; - } - if (line.startsWith(" CRYSTAL") || line.startsWith(" SLAB") - || line.startsWith(" POLYMER") || line.startsWith(" EXTERNAL")) { - atomSetCollection.setAtomSetAuxiliaryInfo("periodicity", line); - readCellParams(); - readAtomCoords(true); - break; - } - } - - applySymmetryAndSetTrajectory(); - - } catch (Exception e) { - setError(e); - } - } + boolean isthisPeriodic=false ; - private void readCellParams() throws Exception { + atomSetCollection = new AtomSetCollection("Crystal", this); + try { + this.reader = reader; + atomSetCollection.setCollectionName(readLine()); + while (readLine() != null) { + if (line.startsWith("MOLECULE")) { + isthisPeriodic=false; + readAtomCoords(false,isthisPeriodic); - discardLinesUntilContains(" LATTICE PARAMETERS (ANGSTROMS AND DEGREES) - PRIMITIVE CELL"); - readLine(); - readLine(); - float a = parseFloat(line.substring(2, 17)); - float b = parseFloat(line.substring(18, 33)); - float c = parseFloat(line.substring(34, 42)); - float alpha = parseFloat(line.substring(43, 60)); - float beta = parseFloat(line.substring(61, 71)); - float gamma = parseFloat(line.substring(72, 80)); - // this method works fine so far - setUnitCell(a, b, c, alpha, beta, gamma); - } + break; + } + if (line.startsWith("CRYSTAL") || line.startsWith("SLAB") + || line.startsWith("POLYMER") || line.startsWith("EXTERNAL")) { + atomSetCollection.setAtomSetAuxiliaryInfo("periodicity", line); + isthisPeriodic=true; + readCellParams(); + readAtomCoords(true, isthisPeriodic); - private void readAtomCoords(boolean isFractional) throws Exception { + break; + } + } + + applySymmetryAndSetTrajectory(); + + } catch (Exception e) { + setError(e); + } + } + + private void readCellParams() throws Exception { + + discardLinesUntilStartsWith(" PRIMITIVE CELL"); + readLine(); + readLine(); + float a = parseFloat(line.substring(2,17)) ; + float b = parseFloat(line.substring(16,33)) ; + float c = parseFloat(line.substring(33,42)); + + if (b == 500.00000){ + b = 1; + } + + if (c == 500.0000){ + c = 1; + } + float alpha = parseFloat(line.substring(48,58)) ; + float beta = parseFloat(line.substring(59,69)) ; + float gamma = parseFloat(line.substring(70,80)) ; + + setUnitCell(a, b, c, alpha, beta, gamma); + } + + private void readAtomCoords(boolean isFractional, boolean isthisPeriodic) + throws Exception { setFractionalCoordinates(isFractional); - discardLinesUntilContains("ATOMS IN THE ASYMMETRIC"); + discardLinesUntilContains(" ATOMS IN THE ASYMMETRIC"); int atomCount = parseInt(line.substring(61, 65)); readLine(); readLine(); @@ -96,6 +118,19 @@ float x = parseFloat(line.substring(15, 35)); float y = parseFloat(line.substring(36, 55)); float z = parseFloat(line.substring(56, 75)); + + if (x < 0 && isthisPeriodic) { + x = 1 + x; + } + + if (y < 0 && isthisPeriodic) { + y = 1 + y; + } + + if (z < 0 && isthisPeriodic) { + z = 1 + z; + } + Atom atom = atomSetCollection.addNewAtom(); setAtomCoord(atom, x, y, z); atom.elementSymbol = getElementSymbol(atomicnumber); Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-02-18 13:44:51 UTC (rev 12405) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-02-18 15:04:53 UTC (rev 12406) @@ -537,24 +537,25 @@ private final static int SPECIAL_WIEN = 9; private final static int SPECIAL_CASTEP = 10; private final static int SPECIAL_AIMS = 11; + final static int SPECIAL_CRYSTAL = 12; // these next are needed by the XML reader - public final static int SPECIAL_ARGUS_XML = 12; - public final static int SPECIAL_CML_XML = 13; - public final static int SPECIAL_CHEM3D_XML = 14; - public final static int SPECIAL_MOLPRO_XML = 15; - public final static int SPECIAL_ODYSSEY_XML = 16; - public final static int SPECIAL_XSD_XML = 17; - public final static int SPECIAL_VASP_XML = 18; + public final static int SPECIAL_ARGUS_XML = 13; + public final static int SPECIAL_CML_XML = 14; + public final static int SPECIAL_CHEM3D_XML = 15; + public final static int SPECIAL_MOLPRO_XML = 16; + public final static int SPECIAL_ODYSSEY_XML = 17; + public final static int SPECIAL_XSD_XML = 18; + public final static int SPECIAL_VASP_XML = 19; - public final static int SPECIAL_ARGUS_DOM = 19; - public final static int SPECIAL_CML_DOM = 20; - public final static int SPECIAL_CHEM3D_DOM = 21; - public final static int SPECIAL_MOLPRO_DOM = 22; - public final static int SPECIAL_ODYSSEY_DOM = 23; - public final static int SPECIAL_XSD_DOM = 24; // not implemented - public final static int SPECIAL_VASP_DOM = 25; + public final static int SPECIAL_ARGUS_DOM = 20; + public final static int SPECIAL_CML_DOM = 21; + public final static int SPECIAL_CHEM3D_DOM = 22; + public final static int SPECIAL_MOLPRO_DOM = 23; + public final static int SPECIAL_ODYSSEY_DOM = 24; + public final static int SPECIAL_XSD_DOM = 25; // not implemented + public final static int SPECIAL_VASP_DOM = 26; public final static String[][] specialTags = { { "Jme" }, @@ -571,6 +572,7 @@ { "Castep" }, { "Aims" }, + { "Crystal" }, { "XmlArgus" }, //12 { "XmlCml" }, @@ -975,15 +977,12 @@ private final static String[] uicrcifContainsRecords = { "Cif", "Crystallographic Information File"}; - private final static String[] crystalContainsRecords = - { "Crystal", " - DIMENSIONALITY OF THE SYSTEM" }; - private final static String[][] containsRecords = { xmlContainsRecords, gaussianContainsRecords, ampacContainsRecords, mopacContainsRecords, qchemContainsRecords, gamessUKContainsRecords, gamessUSContainsRecords, spartanBinaryContainsRecords, spartanContainsRecords, mol2Records, adfContainsRecords, psiContainsRecords, - nwchemContainsRecords, uicrcifContainsRecords, dgridContainsRecords, crystalContainsRecords + nwchemContainsRecords, uicrcifContainsRecords, dgridContainsRecords }; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-02-22 00:01:40
|
Revision: 12434 http://jmol.svn.sourceforge.net/jmol/?rev=12434&view=rev Author: hansonr Date: 2010-02-22 00:01:33 +0000 (Mon, 22 Feb 2010) Log Message: ----------- version=11.9.30_dev # new feature: load "filename" 0 -- loads LAST model only (usually the optimized geometry) Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-21 23:56:33 UTC (rev 12433) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-22 00:01:33 UTC (rev 12434) @@ -64,7 +64,6 @@ private boolean isPrimitive = true; private boolean isPolymer = false; private boolean isSlab = false; - private boolean isFinal = false; private boolean doReadAtoms = false; public void readAtomSetCollection(BufferedReader reader) { @@ -75,22 +74,14 @@ super.initializeMoReader(reader, type); isPrimitive = (filter == null || filter.indexOf("conv") < 0); atomSetCollection.setAtomSetAuxiliaryInfo("unitCellType", (isPrimitive ? "primitive" : "conventional")); - isFinal = (filter != null && filter.indexOf("opt") >= 0); setFractionalCoordinates(readHeader()); - if (isFinal) { - discardLinesUntilContains("FINAL OPTIMIZED GEOMETRY"); - atomSetCollection.setCollectionName(name + " (optimized)"); - isPrimitive = true; - } } protected boolean checkLine() throws Exception { if (line.startsWith(" LATTICE PARAMETER") - && (isFinal || isPrimitive - && (line.contains("- PRIMITIVE") || line.contains("- BOHR")) || !isPrimitive - && line.contains("- CONVENTIONAL"))) { - if (isFinal) - readLine(); + && (isPrimitive + && (line.contains("- PRIMITIVE") || line.contains("- BOHR")) + || !isPrimitive && line.contains("- CONVENTIONAL"))) { if (!isPrimitive || doGetModel(++modelNumber)) { readCellParams(); doReadAtoms = true; @@ -149,11 +140,11 @@ applySymmetryAndSetTrajectory(); } - private String name; private boolean readHeader() throws Exception { discardLinesUntilContains("* CRYSTAL"); discardLinesUntilContains("EEEEEEEEEE"); - atomSetCollection.setCollectionName(name = readLine().trim()); + atomSetCollection.setCollectionName(readLine().trim() + + (desiredModelNumber == 0 ? " (optimized)" : "")); readLine(); String type = readLine().trim(); /* This is when the initial geometry is read from an external file Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-21 23:56:33 UTC (rev 12433) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-22 00:01:33 UTC (rev 12434) @@ -172,7 +172,7 @@ private float symmetryRange; private float[] notionalUnitCell; //0-5 a b c alpha beta gamma; 6-21 matrix c->f private int[] firstLastStep; - private int desiredModelNumber = Integer.MIN_VALUE; + protected int desiredModelNumber = Integer.MIN_VALUE; private int lastModelNumber = Integer.MAX_VALUE; private int desiredSpaceGroupIndex = -1; private SymmetryInterface symmetry; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-02-22 03:26:41
|
Revision: 12440 http://jmol.svn.sourceforge.net/jmol/?rev=12440&view=rev Author: hansonr Date: 2010-02-22 03:26:35 +0000 (Mon, 22 Feb 2010) Log Message: ----------- version=11.9.30_dev # new feature: load "filename" 0 -- loads LAST model only (usually the optimized geometry) Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-22 02:04:00 UTC (rev 12439) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-22 03:26:35 UTC (rev 12440) @@ -48,12 +48,14 @@ * * load "xxx.out" n * - * where n is an integer > 0 + * as for all readers, where n is an integer > 0 * * for final optimized geometry use * * load "xxx.out" 0 * + * (that is, "read the last model") as for all readers + * * for conventional unit cell -- input coordinates only, use * * load "xxx.out" filter "conventional" @@ -90,6 +92,10 @@ && (isPrimitive && (line.contains("- PRIMITIVE") || line.contains("- BOHR")) || !isPrimitive && line.contains("- CONVENTIONAL"))) { + if (doneReadingModels()) { + continuing = false; + return false; + } if (!isPrimitive || doGetModel(++modelNumber)) { readCellParams(); doReadAtoms = true; @@ -109,21 +115,26 @@ } return true; } + // from here on -- must be primitive + if (line.startsWith(" ATOMS IN THE ASYMMETRIC UNIT")) { readFractionalCoords(); - if (isLastModel(modelNumber)) - continuing = false; return true; } + if (line.startsWith(" * OPT END - CONVERGED") + || line.startsWith("== SCF ENDED") + || line.startsWith(" TOTAL ENERGY")) { + readEnergy(); + return true; + } - // Note that these following won't be read if we are opting to get a - // specific model. - if (line.startsWith(" TYPE OF CALCULATION")) { calculationType = line.substring(line.indexOf(":") + 1).trim(); return true; } + + /* if (line.indexOf(" LOCAL ATOMIC FUNCTIONS BASIS SET") >= 0) { // readBasisSet(); return true; @@ -133,19 +144,8 @@ // readMolecularOrbitals(); return true; } - - if (line.startsWith(" * OPT END - CONVERGED")) { - setEnergy(parseFloat(line.substring(line.indexOf(":") + 1)), true); - return true; - } - if (line.startsWith("== SCF ENDED")) { - setEnergy(parseFloat(line.substring(line.indexOf(")") + 1)), true); - return true; - } - if (line.startsWith(" TOTAL ENERGY")) { - setEnergy(parseFloat(line.substring(line.lastIndexOf(")") + 1)), false); - return true; - } + */ + return true; } @@ -210,12 +210,11 @@ } /* - * ATOMS IN THE ASYMMETRIC UNIT 30 - ATOMS IN THE UNIT CELL: 30 ATOM X/A Y/B - * Z(ANGSTROM) - * ***************************************************************** - * ************* 1 T 26 FE 3.331306436039E-01 1.663395164811E-01 - * 6.035011342353E+00 2 T 8 O -3.291645441100E-01 1.554613095970E-01 - * 5.654299584852E+00 + ATOMS IN THE ASYMMETRIC UNIT 30 - ATOMS IN THE UNIT CELL: 30 + ATOM X/A Y/B Z(ANGSTROM) + ******************************************************************************* + 1 T 26 FE 3.332220233571E-01 1.664350001467E-01 5.975038441891E+00 + 2 T 8 O -3.289334452690E-01 1.544678332212E-01 5.601153565811E+00 */ private void readFractionalCoords() throws Exception { readLine(); @@ -283,9 +282,13 @@ atomSetCollection.newAtomSet(); } - private void setEnergy(float energy, boolean isGlobal) { + private void readEnergy() { + boolean isGlobal = (line.startsWith(" * OPT END")); + float energy = parseFloat(line.substring(line.lastIndexOf(isGlobal ? ":" + : ")") + 1)); if (isGlobal) - atomSetCollection.setAtomSetCollectionAuxiliaryInfo("Energy", new Float(energy)); + atomSetCollection.setAtomSetCollectionAuxiliaryInfo("Energy", new Float( + energy)); atomSetCollection.setAtomSetAuxiliaryInfo("Energy", new Float(energy)); atomSetCollection.setAtomSetName("Energy = " + energy); } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-22 02:04:00 UTC (rev 12439) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-22 03:26:35 UTC (rev 12440) @@ -379,9 +379,25 @@ return isOK; } + /** + * after reading a model, Q: Is this the last model? + * + * @param modelNumber + * @return Yes/No + */ public boolean isLastModel(int modelNumber) { return (desiredModelNumber > 0 || modelNumber >= lastModelNumber); } + + /** + * before reading a model: Q: Has the last model already been read? + * + * @return Yes/No + */ + public boolean doneReadingModels() { + return (desiredModelNumber > 0 && desiredModelNumber == modelNumber + || modelNumber == lastModelNumber); + } public boolean doGetVibration(int vibrationNumber) { // vibrationNumber is 1-based This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-02-23 15:29:07
|
Revision: 12459 http://jmol.svn.sourceforge.net/jmol/?rev=12459&view=rev Author: hansonr Date: 2010-02-23 15:29:00 +0000 (Tue, 23 Feb 2010) Log Message: ----------- Crystal reader upgrades Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-02-23 12:47:34 UTC (rev 12458) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-02-23 15:29:00 UTC (rev 12459) @@ -82,6 +82,7 @@ */ abstract public class MOReader extends AtomSetCollectionReader { + protected boolean iHaveAtoms = false; protected int shellCount = 0; protected int gaussianCount = 0; protected Hashtable moData = new Hashtable(); @@ -99,8 +100,6 @@ private String[] filterTokens; private boolean filterIsNot; - protected boolean iHaveAtoms = false; - protected boolean continuing = true; protected boolean ignoreMOs = false; protected String alphaBeta = ""; @@ -112,34 +111,9 @@ abstract public void readAtomSetCollection(BufferedReader reader); - /** - * @return true if need to read new line - * @throws Exception - * - */ - abstract protected boolean checkLine() throws Exception; - - public void readAtomSetCollection(BufferedReader reader, String type) { - try { - initializeMoReader(reader, type); - readLine(); - iHaveAtoms = false; - while (line != null && continuing) - if (checkLine()) - readLine(); - finalizeMoReader(); - } catch (Exception e) { - setError(e); - } - } - - protected void finalizeMoReader() throws Exception { - // see subclasses - } - - protected void initializeMoReader(BufferedReader reader, String type) throws Exception { - this.reader = reader; - atomSetCollection = new AtomSetCollection(type, this); + protected void initializeReader(BufferedReader reader, String type) throws Exception { + super.initializeReader(reader, type); + iHaveAtoms = false; line = "\nNBOs in the AO basis:"; getNBOs = filterMO(); line = "\nNBOcharges"; Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-23 12:47:34 UTC (rev 12458) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-23 15:29:00 UTC (rev 12459) @@ -27,11 +27,10 @@ package org.jmol.adapter.readers.xtal; -import org.jmol.adapter.readers.quantum.MOReader; -import org.jmol.adapter.smarter.*; -//import org.jmol.api.JmolAdapter; +import org.jmol.adapter.smarter.*; //import org.jmol.api.JmolAdapter; import java.io.BufferedReader; + //import java.util.Vector; /** @@ -42,52 +41,52 @@ * Ingram Building, University of Kent, Canterbury, Kent, CT2 7NH United * Kingdom * - * @version 1.2 + * @version 1.3 * - * for a specific model in the set, use + * for a specific model in the set, use * - * load "xxx.out" n + * load "xxx.out" n * - * as for all readers, where n is an integer > 0 + * as for all readers, where n is an integer > 0 * - * for final optimized geometry use + * for final optimized geometry use * - * load "xxx.out" 0 + * load "xxx.out" 0 * - * (that is, "read the last model") as for all readers + * (that is, "read the last model") as for all readers * - * for conventional unit cell -- input coordinates only, use + * for conventional unit cell -- input coordinates only, use * - * load "xxx.out" filter "conventional" + * load "xxx.out" filter "conventional" * - * TODO: vibrational frequencies + * TODO: vibrational frequencies * - * TODO: molecular orbitals are in, but no MO coefficient data are in the output files. - * */ -public class CrystalReader extends MOReader { +public class CrystalReader extends AtomSetCollectionReader { private boolean isPrimitive = true; private boolean isPolymer = false; private boolean isSlab = false; + private boolean isMolecular = false; private boolean doReadAtoms = false; public void readAtomSetCollection(BufferedReader reader) { readAtomSetCollection(reader, "Crystal"); } - protected void initializeMoReader(BufferedReader reader, String type) throws Exception { - super.initializeMoReader(reader, type); + protected void initializeReader(BufferedReader reader, String type) + throws Exception { + super.initializeReader(reader, type); isPrimitive = (filter == null || filter.indexOf("conv") < 0); - atomSetCollection.setAtomSetAuxiliaryInfo("unitCellType", (isPrimitive ? "primitive" : "conventional")); + atomSetCollection.setAtomSetAuxiliaryInfo("unitCellType", + (isPrimitive ? "primitive" : "conventional")); setFractionalCoordinates(readHeader()); } protected boolean checkLine() throws Exception { // starting point for any calculation is the definition of the lattice - // parameters - // similar to the "data" statement of a CIF file + // parameters similar to the "data" statement of a CIF file if (line.startsWith(" LATTICE PARAMETER") && (isPrimitive && (line.contains("- PRIMITIVE") || line.contains("- BOHR")) || !isPrimitive @@ -115,16 +114,15 @@ } return true; } - + // from here on -- must be primitive if (line.startsWith(" ATOMS IN THE ASYMMETRIC UNIT")) { readFractionalCoords(); return true; } - if (line.startsWith(" * OPT END - CONVERGED") - || line.startsWith("== SCF ENDED") - || line.startsWith(" TOTAL ENERGY")) { + if (line.startsWith(" * OPT END - CONVERGED") + || line.startsWith("== SCF ENDED") || line.startsWith(" TOTAL ENERGY")) { readEnergy(); return true; } @@ -133,26 +131,9 @@ calculationType = line.substring(line.indexOf(":") + 1).trim(); return true; } - - /* - if (line.indexOf(" LOCAL ATOMIC FUNCTIONS BASIS SET") >= 0) { - // readBasisSet(); - return true; - } - if (line.indexOf("A.O. POPULATION") >= 0) { - // no, that's not right.... - // readMolecularOrbitals(); - return true; - } - */ - return true; } - protected void finalizeMoReader() throws Exception { - applySymmetryAndSetTrajectory(); - } - private boolean readHeader() throws Exception { discardLinesUntilContains("* CRYSTAL"); discardLinesUntilContains("EEEEEEEEEE"); @@ -160,21 +141,22 @@ + (desiredModelNumber == 0 ? " (optimized)" : "")); readLine(); String type = readLine().trim(); - /* This is when the initial geometry is read from an external file - * GEOMETRY INPUT FROM EXTERNAL FILE (FORTRAN UNIT 34) + /* + * This is when the initial geometry is read from an external file GEOMETRY + * INPUT FROM EXTERNAL FILE (FORTRAN UNIT 34) */ - if(type.equals("GEOMETRY INPUT FROM EXTERNAL FILE (FORTRAN UNIT 34)")){ + if (type.equals("GEOMETRY INPUT FROM EXTERNAL FILE (FORTRAN UNIT 34)")) { type = readLine().trim(); isPolymer = (type.equals("1D - POLYMER")); isSlab = (type.equals("2D - SLAB")); - }else { + } else { isPolymer = (type.equals("POLYMER CALCULATION")); isSlab = (type.equals("SLAB CALCULATION")); } - atomSetCollection.setAtomSetAuxiliaryInfo("symmetryType", type); + atomSetCollection.setAtomSetAuxiliaryInfo("symmetryType", type); if (type.indexOf("MOLECULAR") >= 0) { - doReadAtoms = true; + isMolecular = doReadAtoms = true; return false; } if (!isPrimitive) { @@ -198,32 +180,35 @@ setUnitCell(parseFloat(tokens[0]), parseFloat(tokens[1]), -1, parseFloat(tokens[3]), parseFloat(tokens[4]), parseFloat(tokens[5])); else - setUnitCell(parseFloat(tokens[0]), parseFloat(tokens[1]), -1, - 90, 90, parseFloat(tokens[2])); + setUnitCell(parseFloat(tokens[0]), parseFloat(tokens[1]), -1, 90, 90, + parseFloat(tokens[2])); } else if (isPolymer) { - setUnitCell(parseFloat(tokens[0]), -1, -1, - parseFloat(tokens[3]), parseFloat(tokens[4]), parseFloat(tokens[5])); + setUnitCell(parseFloat(tokens[0]), -1, -1, parseFloat(tokens[3]), + parseFloat(tokens[4]), parseFloat(tokens[5])); } else { - setUnitCell(parseFloat(tokens[0]), parseFloat(tokens[1]), parseFloat(tokens[2]), - parseFloat(tokens[3]), parseFloat(tokens[4]), parseFloat(tokens[5])); + setUnitCell(parseFloat(tokens[0]), parseFloat(tokens[1]), + parseFloat(tokens[2]), parseFloat(tokens[3]), parseFloat(tokens[4]), + parseFloat(tokens[5])); } } /* - ATOMS IN THE ASYMMETRIC UNIT 30 - ATOMS IN THE UNIT CELL: 30 - ATOM X/A Y/B Z(ANGSTROM) - ******************************************************************************* - 1 T 26 FE 3.332220233571E-01 1.664350001467E-01 5.975038441891E+00 - 2 T 8 O -3.289334452690E-01 1.544678332212E-01 5.601153565811E+00 + * ATOMS IN THE ASYMMETRIC UNIT 30 - ATOMS IN THE UNIT CELL: 30 + * ATOM X/A Y/B Z(ANGSTROM) + * ***************************************************************** + * 1 T 26 FE 3.332220233571E-01 1.664350001467E-01 5.975038441891E+00 + * 2 T 8 O -3.289334452690E-01 1.544678332212E-01 5.601153565811E+00 */ private void readFractionalCoords() throws Exception { + if (isMolecular) + newAtomSet(); readLine(); readLine(); - boolean doNormalizePrimitive = !isPolymer && !isSlab && isPrimitive; + boolean doNormalizePrimitive = isPrimitive && !isMolecular && !isPolymer && !isSlab; while (readLine() != null && line.length() > 0) { Atom atom = atomSetCollection.addNewAtom(); String[] tokens = getTokens(); - int atomicNumber = parseInt(tokens[2]); + int atomicNumber = getAtomicNumber(tokens[2]); float x = parseFloat(tokens[4]); float y = parseFloat(tokens[5]); float z = parseFloat(tokens[6]); @@ -240,34 +225,44 @@ } /* + * Crystal adds 100 to the atomic number when the same atom will be + * described with different basis sets. It also adds 200 when ECP + * are used: + * + * 1 T 282 PB 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 + * 2 T 16 S -5.000000000000E-01 -5.000000000000E-01 -5.000000000000E-01 + */ + private int getAtomicNumber(String token) { + int atomicNumber = parseInt(token); + while (atomicNumber >= 100) + atomicNumber -= 100; + return atomicNumber; + } + + /* * INPUT COORDINATES * * ATOM AT. N. COORDINATES * 1 12 0.000000000000E+00 0.000000000000E+00 0.000000000000E+00 * 2 8 5.000000000000E-01 5.000000000000E-01 5.000000000000E-01 + * */ - private void readInputCoords() - throws Exception { + private void readInputCoords() throws Exception { readLine(); readLine(); while (readLine() != null && line.length() > 0) { Atom atom = atomSetCollection.addNewAtom(); String[] tokens = getTokens(); - int atomicNumber = parseInt(tokens[1]); + int atomicNumber = getAtomicNumber(tokens[1]); float x = parseFloat(tokens[2]); float y = parseFloat(tokens[3]); float z = parseFloat(tokens[4]); - /* we do not do this, because we have other ways to do it - * namely, "packed" or "{555 555 1}" - * In this way, we can check those input coordinates exactly - - if (x < 0) - x += 1; - if (y < 0) - y += 1; - if (z < 0) - z += 1; - + /* + * we do not do this, because we have other ways to do it namely, "packed" + * or "{555 555 1}" In this way, we can check those input coordinates + * exactly + * + * if (x < 0) x += 1; if (y < 0) y += 1; if (z < 0) z += 1; */ setAtomCoord(atom, x, y, z); @@ -284,119 +279,13 @@ private void readEnergy() { boolean isGlobal = (line.startsWith(" * OPT END")); - float energy = parseFloat(line.substring(line.lastIndexOf(isGlobal ? ":" + String[] tokens = getTokens(line.substring(line.lastIndexOf(isGlobal ? ":" : ")") + 1)); + Double energy = new Double(Double.parseDouble(tokens[0])); + atomSetCollection.setAtomSetAuxiliaryInfo("Energy", energy); if (isGlobal) - atomSetCollection.setAtomSetCollectionAuxiliaryInfo("Energy", new Float( - energy)); - atomSetCollection.setAtomSetAuxiliaryInfo("Energy", new Float(energy)); - atomSetCollection.setAtomSetName("Energy = " + energy); + atomSetCollection.setAtomSetCollectionAuxiliaryInfo("Energy", energy); + atomSetCollection.setAtomSetName("Energy = " + energy + " Hartree"); } - /* - LOCAL ATOMIC FUNCTIONS BASIS SET - ******************************************************************************* - ATOM X(AU) Y(AU) Z(AU) NO. TYPE EXPONENT S COEF P COEF D/F/G COEF - ******************************************************************************* - 1 FE 2.746 -4.757 0.614 - 1 S - 3.154E+05 2.275E-04 0.000E+00 0.000E+00 - 4.569E+04 1.900E-03 0.000E+00 0.000E+00 - 9.677E+03 1.110E-02 0.000E+00 0.000E+00 - 2.521E+03 5.010E-02 0.000E+00 0.000E+00 - 7.597E+02 1.705E-01 0.000E+00 0.000E+00 - 2.630E+02 3.692E-01 0.000E+00 0.000E+00 - 1.028E+02 4.033E-01 0.000E+00 0.000E+00 - 4.297E+01 1.434E-01 0.000E+00 0.000E+00 - 2- 5 SP - 7.983E+02-5.200E-03 8.500E-03 0.000E+00 - 1.912E+02-6.800E-02 6.080E-02 0.000E+00 - 6.369E+01-1.314E-01 2.114E-01 0.000E+00 - 2.536E+01 2.517E-01 3.944E-01 0.000E+00 - 1.073E+01 6.433E-01 3.980E-01 0.000E+00 - 3.764E+00 2.825E-01 2.251E-01 0.000E+00 - 6- 9 SP - - */ - /* - private void readBasisSet() throws Exception { - discardLines(3); - shells = new Vector(); - Vector gdata = new Vector(); - gaussianCount = 0; - shellCount = 0; - String[] tokens; - int i0 = -1; - int i1 = 0; - int slaterPt = 0; - int[] slater = null; - String type = null; - int atomIndex = 0; - boolean dataAssigned = true; - shells = new Vector(); - while (readLine() != null) { - if (line.charAt(3) != ' ') { - if (!dataAssigned) - slaterPt = copySlaterData(atomIndex, slaterPt); - atomIndex = parseInt(line.substring(0, 4)); - if (atomIndex-- < 0) - break; - dataAssigned = false; - continue; - } - // basis block - if (line.charAt(34) != ' ') { - // shell; - shellCount++; - i0 = parseInt(line.substring(0, 30)); - i1 = parseInt(line.substring(32, 35)) - 1; - if (i0-- < 0) - i0 = i1; - type = line.substring(36,38).trim(); - System.out.println(atomIndex + " " + i0 + " " + i1 + " " + type); - dataAssigned = true; - slaterPt = shells.size(); - slater = new int[4]; - shells.addElement(slater); - slater[0] = atomIndex; - slater[1] = JmolAdapter.getQuantumShellTagID(type); - slater[2] = gaussianCount; - //slater[3] = 0; // will be count of gaussians - continue; - } - gdata.addElement(getTokens()); - gaussianCount++; - slater[3]++; - } - gaussians = new float[gaussianCount][]; - for (int i = 0; i < gaussianCount; i++) { - tokens = (String[]) gdata.get(i); - gaussians[i] = new float[tokens.length]; - for (int j = 0; j < tokens.length; j++) - gaussians[i][j] = parseFloat(tokens[j]); - } - } - - private int copySlaterData(int atomIndex, int slaterPt) { - int n = shells.size(); - int i; - for (i = slaterPt; i < n; i++) { - int[] slater = new int[4]; - int[] s0 = (int[]) shells.get(i); - slater[0] = atomIndex; - slater[1] = s0[1]; - slater[2] = s0[2]; - slater[3] = s0[3]; - shells.add(slater); - } - return i; - } - private void readMolecularOrbitals() throws Exception { - // would need orbital coefficients here - //addMOData(nThisLine, data, mos); - //setMOData(false); - } - */ - - } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-23 12:47:34 UTC (rev 12458) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-23 15:29:00 UTC (rev 12459) @@ -204,6 +204,44 @@ // XML readers only } + ////////////// These next are optional ways of reading the file. + ////////////// Probably move toward this for future readers. + + protected boolean continuing = true; + public void readAtomSetCollection(BufferedReader reader, String type) { + try { + initializeReader(reader, type); + readLine(); + while (line != null && continuing) + if (checkLine()) + readLine(); + finalizeReader(); + } catch (Exception e) { + setError(e); + } + } + + protected void initializeReader(BufferedReader reader, String type) throws Exception { + this.reader = reader; + atomSetCollection = new AtomSetCollection(type, this); + } + + /** + * @return true if need to read new line + * @throws Exception + * + */ + protected boolean checkLine() throws Exception { + // reader-dependent + return true; + } + + protected void finalizeReader() throws Exception { + applySymmetryAndSetTrajectory(); + } + + ///////////////////////////////////////////////////////////////////////////////////// + private Object finalize(Hashtable htParams, String filename) { if (!htParams.containsKey("templateAtomCount")) htParams.put("templateAtomCount", new Integer(atomSetCollection This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-02-27 20:44:13
|
Revision: 12499 http://jmol.svn.sourceforge.net/jmol/?rev=12499&view=rev Author: hansonr Date: 2010-02-27 20:44:07 +0000 (Sat, 27 Feb 2010) Log Message: ----------- crystal reader vibrations for symmetry Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-27 18:07:53 UTC (rev 12498) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-02-27 20:44:07 UTC (rev 12499) @@ -60,7 +60,10 @@ * * load "xxx.out" filter "conventional" * - * TODO: vibrational frequencies + * to NOT load vibrations, use + * + * load "xxx.out" FILTER "novibrations" + * * */ @@ -73,6 +76,7 @@ private boolean doReadAtoms = false; private boolean haveCharges = false; private boolean addVibrations = false; + private int atomCount; public void readAtomSetCollection(BufferedReader reader) { readAtomSetCollection(reader, "Crystal"); @@ -82,7 +86,7 @@ throws Exception { super.initializeReader(reader, type); isPrimitive = (filter == null || filter.indexOf("conv") < 0); - addVibrations = !doApplySymmetry;// && (filter != null && filter.indexOf("vib") >= 0); + addVibrations = (filter == null || filter.indexOf("novib") < 0); atomSetCollection.setAtomSetCollectionAuxiliaryInfo("unitCellType", (isPrimitive ? "primitive" : "conventional")); setFractionalCoordinates(readHeader()); @@ -257,6 +261,7 @@ setAtomCoord(atom, x, y, z); atom.elementSymbol = getElementSymbol(atomicNumber); } + atomCount = atomSetCollection.getAtomCount() - atomIndexLast; } private String getAtomName(String s) { @@ -379,6 +384,7 @@ discardLinesUntilContains("NORMAL MODES NORMALIZED TO CLASSICAL AMPLITUDES"); readLine(); + int lastAtomCount = -1; while (readLine() != null && line.startsWith(" FREQ(CM**-1)")) { int frequencyCount = 0; String[] tokens = getTokens(line.substring(15)); @@ -391,16 +397,16 @@ Logger.debug((vibrationNumber + 1) + " frequency=" + frequency); } } - int iAtom0 = atomSetCollection.getAtomCount(); - int atomCount = atomSetCollection.getLastAtomSetAtomCount(); boolean[] ignore = new boolean[frequencyCount]; + int iAtom0 = 0; for (int i = 0; i < frequencyCount; i++) { String[] data = (String[]) vData.get(vibrationNumber); ignore[i] = (!doGetVibration(++vibrationNumber) || data == null); if (ignore[i]) continue; - cloneLastAtomSet(); - + lastAtomCount = cloneLastAtomSet(atomCount); + if (i == 0) + iAtom0 = atomSetCollection.getLastAtomSetAtomIndex(); String activity = ", IR: " + data[2] + ", Raman: " + data[3]; atomSetCollection.setAtomSetName(data[0] + " " + frequencies[i] + " cm-1 (" + data[1] + " km/Mole)" + activity); @@ -422,7 +428,7 @@ atomSetCollection.setAtomSetProperty("Raman activity ", data[3]); } readLine(); - fillFrequencyData(iAtom0, atomCount, ignore, false, 14, 10); + fillFrequencyData(iAtom0, atomCount, lastAtomCount, ignore, false, 14, 10); readLine(); } } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2010-02-27 18:07:53 UTC (rev 12498) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2010-02-27 20:44:07 UTC (rev 12499) @@ -366,9 +366,13 @@ } public void cloneLastAtomSet() throws Exception { + cloneLastAtomSet(-1); + } + + public void cloneLastAtomSet(int atomCount) throws Exception { if (!allowMultiple) return; - int count = getLastAtomSetAtomCount(); + int count = (atomCount > 0 ? atomCount : getLastAtomSetAtomCount()); int atomIndex = getLastAtomSetAtomIndex(); newAtomSet(); for ( ; --count >= 0; ++atomIndex) @@ -522,6 +526,20 @@ } } + public void addVibrationVector(int iatom, float vx, float vy, float vz, + boolean withSymmetry) { + if (!withSymmetry) { + addVibrationVector(iatom, vx, vy, vz); + return; + } + int atomSite = atoms[iatom].atomSite; + int atomSetIndex = atoms[iatom].atomSetIndex; + for (int i = iatom; i < atomCount && atoms[i].atomSetIndex == atomSetIndex; i++) { + if (atoms[i].atomSite == atomSite) + addVibrationVector(i, vx, vy, vz); + } + } + public void addVibrationVector(int iatom, float x, float y, float z) { if (!allowMultiple) iatom = iatom % atomCount; @@ -602,62 +620,61 @@ symmetry.setLattice(latt); } - void applySymmetry() throws Exception { - //parameters are counts of unit cells as [a b c] - applySymmetry(latticeCells[0], latticeCells[1], Math.abs(latticeCells[2])); - } + void applySymmetry(int atomCount) throws Exception { + //parameters are counts of unit cells as [a b c] + applySymmetry(atomCount, latticeCells[0], latticeCells[1], Math.abs(latticeCells[2])); + } - void applySymmetry(SymmetryInterface symmetry) throws Exception { - getSymmetry().setSpaceGroup(symmetry); - //parameters are counts of unit cells as [a b c] - applySymmetry(latticeCells[0], latticeCells[1], Math.abs(latticeCells[2])); - } + void applySymmetry(SymmetryInterface symmetry, int atomCount) throws Exception { + getSymmetry().setSpaceGroup(symmetry); + //parameters are counts of unit cells as [a b c] + applySymmetry(atomCount, latticeCells[0], latticeCells[1], Math.abs(latticeCells[2])); + } - boolean doNormalize = true; - boolean doPackUnitCell = false; - boolean isLatticeRange = false; + boolean doNormalize = true; + boolean doPackUnitCell = false; + boolean isLatticeRange = false; - void applySymmetry(int maxX, int maxY, int maxZ) throws Exception { + private void applySymmetry(int atomCount, int maxX, int maxY, int maxZ) throws Exception { if (coordinatesAreFractional && getSymmetry().haveSpaceGroup()) - applyAllSymmetry(maxX, maxY, maxZ); - } + applyAllSymmetry(atomCount, maxX, maxY, maxZ); + } - private float rminx, rminy, rminz, rmaxx, rmaxy, rmaxz; + private float rminx, rminy, rminz, rmaxx, rmaxy, rmaxz; - private void setSymmetryMinMax(Point3f c) { - if (rminx > c.x) - rminx = c.x; - if (rminy > c.y) - rminy = c.y; - if (rminz > c.z) - rminz = c.z; - - if (rmaxx < c.x) - rmaxx = c.x; - if (rmaxy < c.y) - rmaxy = c.y; - if (rmaxz < c.z) - rmaxz = c.z; - } + private void setSymmetryMinMax(Point3f c) { + if (rminx > c.x) + rminx = c.x; + if (rminy > c.y) + rminy = c.y; + if (rminz > c.z) + rminz = c.z; + if (rmaxx < c.x) + rmaxx = c.x; + if (rmaxy < c.y) + rmaxy = c.y; + if (rmaxz < c.z) + rmaxz = c.z; + } - private boolean isInSymmetryRange(Point3f c) { - return (c.x >= rminx && c.y >= rminy && c.z >= rminz - && c.x <= rmaxx && c.y <= rmaxy && c.z <= rmaxz); - } + private boolean isInSymmetryRange(Point3f c) { + return (c.x >= rminx && c.y >= rminy && c.z >= rminz + && c.x <= rmaxx && c.y <= rmaxy && c.z <= rmaxz); + } - private final Point3f ptOffset = new Point3f(); + private final Point3f ptOffset = new Point3f(); - private int minX, maxX, minY, maxY, minZ, maxZ; + private int minX, maxX, minY, maxY, minZ, maxZ; - private static boolean isWithinCell(Point3f pt, int minX, int maxX, int minY, int maxY, int minZ, int maxZ) { - float slop = 0.02f; - return (pt.x > minX - slop && pt.x < maxX + slop - && pt.y > minY - slop && pt.y < maxY + slop - && pt.z > minZ - slop && pt.z < maxZ + slop); - } + private static boolean isWithinCell(Point3f pt, int minX, int maxX, int minY, int maxY, int minZ, int maxZ) { + float slop = 0.02f; + return (pt.x > minX - slop && pt.x < maxX + slop + && pt.y > minY - slop && pt.y < maxY + slop + && pt.z > minZ - slop && pt.z < maxZ + slop); + } - private void applyAllSymmetry(int maxX, int maxY, int maxZ) throws Exception { - int noSymmetryCount = getLastAtomSetAtomCount(); + private void applyAllSymmetry(int atomCount, int maxX, int maxY, int maxZ) throws Exception { + int noSymmetryCount = (atomCount >= 0 ? atomCount : getLastAtomSetAtomCount()); int iAtomFirst = getLastAtomSetAtomIndex(); for (int i = iAtomFirst; i < atomCount; i++) { atoms[i].ellipsoid = symmetry.getEllipsoid(atoms[i].anisoBorU); Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-27 18:07:53 UTC (rev 12498) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-27 20:44:07 UTC (rev 12499) @@ -474,14 +474,16 @@ } - protected void cloneLastAtomSet() throws Exception { - applySymmetryAndSetTrajectory(); - atomSetCollection.cloneLastAtomSet(); + protected int cloneLastAtomSet(int atomCount) throws Exception { + applySymmetryAndSetTrajectory(atomCount); + int lastAtomCount = atomSetCollection.getLastAtomSetAtomCount(); + atomSetCollection.cloneLastAtomSet(atomCount); if (atomSetCollection.haveUnitCell) { iHaveUnitCell = needToApplySymmetry = true; spaceGroup = previousSpaceGroup; notionalUnitCell = previousUnitCell; } + return lastAtomCount; } public void setSpaceGroupName(String name) { @@ -672,6 +674,10 @@ } public void applySymmetryAndSetTrajectory() throws Exception { + applySymmetryAndSetTrajectory(-1); + } + + private void applySymmetryAndSetTrajectory(int atomCount) throws Exception { if (needToApplySymmetry && iHaveUnitCell) { atomSetCollection.setCoordinatesAreFractional(iHaveFractionalCoordinates); atomSetCollection.setNotionalUnitCell(notionalUnitCell); @@ -688,10 +694,10 @@ atomSetCollection.doNormalize)) { atomSetCollection.setAtomSetSpaceGroupName(symmetry .getSpaceGroupName()); - atomSetCollection.applySymmetry(symmetry); + atomSetCollection.applySymmetry(symmetry, atomCount); } } else { - atomSetCollection.applySymmetry(); + atomSetCollection.applySymmetry(atomCount); } } } @@ -795,10 +801,18 @@ data[i] = getTokens(discardLinesUntilNonBlank()); } - protected void fillFrequencyData(int iAtom0, int atomCount, + protected void fillFrequencyData(int iAtom0, int atomCount, boolean[] ignore, boolean isWide, int col0, int colWidth) throws Exception { + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, isWide, col0, colWidth); + } + + protected void fillFrequencyData(int iAtom0, int atomCount, int lastAtomCount, + boolean[] ignore, boolean isWide, + int col0, int colWidth) + throws Exception { + boolean withSymmetry = (lastAtomCount != atomCount); int nLines = (isWide ? atomCount : atomCount * 3); int nFreq = ignore.length; String[][] data = new String[nLines][]; @@ -818,10 +832,10 @@ float vz = parseFloat(isWide ? values[++dataPt] : valuesZ[dataPt]); if (ignore[j]) continue; - int iAtom = iAtom0 + atomCount * j + atomPt; + int iAtom = iAtom0 + lastAtomCount * j + atomPt; if (Logger.debugging) Logger.debug("vib " + iAtom + "/" + j + ": " + vx + " " + vy + " " + vz); - atomSetCollection.addVibrationVector(iAtom, vx, vy, vz); + atomSetCollection.addVibrationVector(iAtom, vx, vy, vz, withSymmetry); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-02-28 17:46:07
|
Revision: 12525 http://jmol.svn.sourceforge.net/jmol/?rev=12525&view=rev Author: hansonr Date: 2010-02-28 17:46:00 +0000 (Sun, 28 Feb 2010) Log Message: ----------- PDB reader adapted Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java trunk/Jmol/src/org/jmol/adapter/readers/molxyz/XyzReader.java trunk/Jmol/src/org/jmol/adapter/readers/more/GromacsReader.java trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java trunk/Jmol/src/org/jmol/adapter/readers/simple/CubeReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2010-02-28 17:15:14 UTC (rev 12524) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2010-02-28 17:46:00 UTC (rev 12525) @@ -95,163 +95,156 @@ "HEADER " + //18 "COMPND "; //19 + private boolean iHaveModel = false; + private int serial = 0; + private StringBuffer pdbHeader; + public void readAtomSetCollection(BufferedReader reader) { //System.out.println(this + " initialized"); - this.reader = reader; - atomSetCollection = new AtomSetCollection(fileType, this); - atomSetCollection.setAtomSetCollectionAuxiliaryInfo("isPDB", Boolean.TRUE); - setFractionalCoordinates(false); - htFormul.clear(); - currentGroup3 = null; - boolean iHaveModel = false; - boolean iHaveLine = false; - int serial = 0; - StringBuffer pdbHeader = (getHeader ? new StringBuffer() : null); - try { - while (iHaveLine || readLine() != null) { - iHaveLine = false; - int ptOption = ((lineLength = line.length()) < 6 ? -1 : lineOptions - .indexOf(line.substring(0, 6))) >> 3; - boolean isAtom = (ptOption == 0 || ptOption == 1); - boolean isModel = (ptOption == 2); - if (isAtom) - serial = parseInt(line, 6, 11); - boolean isNewModel = (isTrajectory && !isMultiModel && isAtom && serial == 1); - if (getHeader) { - if (isAtom || isModel) - getHeader = false; - else - pdbHeader.append(line).append('\n'); + super.readAtomSetCollection(reader, fileType); + } + + protected void initializeReader(BufferedReader reader, String type) throws Exception { + super.initializeReader(reader, type); + atomSetCollection.setAtomSetCollectionAuxiliaryInfo("isPDB", Boolean.TRUE); + setFractionalCoordinates(false); + htFormul.clear(); + currentGroup3 = null; + pdbHeader = (getHeader ? new StringBuffer() : null); + } + + protected boolean checkLine() throws Exception { + int ptOption = ((lineLength = line.length()) < 6 ? -1 : lineOptions + .indexOf(line.substring(0, 6))) >> 3; + boolean isAtom = (ptOption == 0 || ptOption == 1); + boolean isModel = (ptOption == 2); + if (isAtom) + serial = parseInt(line, 6, 11); + boolean isNewModel = (isTrajectory && !isMultiModel && isAtom && serial == 1); + if (getHeader) { + if (isAtom || isModel) + getHeader = false; + else + pdbHeader.append(line).append('\n'); + } + if (isModel || isNewModel) { + isMultiModel = isModel; + getHeader = false; + // PDB is different -- targets actual model number + int modelNo = (isNewModel ? modelNumber + 1 : getModelNumber()); + // System.out.println(modelNo); + modelNumber = (bsModels == null ? modelNo : modelNumber + 1); + if (!doGetModel(modelNumber)) { + if (isLastModel(modelNumber) && iHaveModel) { + continuing = false; + return false; } - if (isModel || isNewModel) { - isMultiModel = isModel; - getHeader = false; - // PDB is different -- targets actual model number - int modelNo = (isNewModel ? modelNumber + 1: getModelNumber()); - //System.out.println(modelNo); - modelNumber = (bsModels == null ? modelNo : modelNumber + 1); - if (!doGetModel(modelNumber)) { - if (isLastModel(modelNumber) && iHaveModel) - break; - iHaveModel = false; - continue; - } - iHaveModel = true; - atomSetCollection.connectAll(maxSerial); - if (atomCount > 0) - applySymmetryAndSetTrajectory(); - //supposedly MODEL is only for NMR - model(modelNo); - continue; - } - /* - * OK, the PDB file format is messed up here, because the - * above commands are all OUTSIDE of the Model framework. - * Of course, different models might have different - * secondary structures, but it is not clear that PDB actually - * supports this. So you can't concatinate PDB files the way - * you can CIF files. --Bob Hanson 8/30/06 - */ - if (isMultiModel && !iHaveModel) - continue; - if (isAtom) { - getHeader = false; - atom(serial); - continue; - } - switch (ptOption) { - case 3: - //if (line.startsWith("CONECT")) { - conect(); - continue; - case 4: - case 5: - case 6: - //if (line.startsWith("HELIX ") || line.startsWith("SHEET ") - // || line.startsWith("TURN ")) { - structure(); - continue; - case 7: - //if (line.startsWith("HET ")) { - het(); - continue; - case 8: - //if (line.startsWith("HETNAM")) { - hetnam(); - continue; - case 9: - //if (line.startsWith("ANISOU")) { - anisou(); - continue; - case 10: - //if (line.startsWith("SITE ")) { - site(); - continue; - case 11: - //if (line.startsWith("CRYST1")) { - cryst1(); - continue; - case 12: - case 13: - case 14: - //if (line.startsWith("SCALE1")) { - //if (line.startsWith("SCALE2")) { - //if (line.startsWith("SCALE3")) { - scale(ptOption - 11); - continue; - case 15: - //if (line.startsWith("EXPDTA")) { - expdta(); - continue; - case 16: - //if (line.startsWith("FORMUL")) { - formul(); - continue; - case 17: - //if (line.startsWith("REMARK")) { - if (line.startsWith("REMARK 350")) { - remark350(); - iHaveLine = true; - continue; - } - if (line.startsWith("REMARK 290")) { - remark290(); - iHaveLine = true; - continue; - } - checkLineForScript(); - continue; - case 18: - header(); - continue; - case 19: - //if (line.startsWith("COMPND")) { - compnd(); - continue; - } + iHaveModel = false; + return true; } - checkNotPDB(); + iHaveModel = true; atomSetCollection.connectAll(maxSerial); - if (biomolecules != null && biomolecules.size() > 0 && atomSetCollection.getAtomCount() > 0) { - atomSetCollection.setAtomSetAuxiliaryInfo("biomolecules", biomolecules); - setBiomoleculeAtomCounts(); - if (biomts != null && filter != null - && filter.toUpperCase().indexOf("NOSYMMETRY") < 0) { - atomSetCollection.applySymmetry(biomts, applySymmetryToBonds, filter); - } - + if (atomCount > 0) + applySymmetryAndSetTrajectory(); + // supposedly MODEL is only for NMR + model(modelNo); + return true; + } + /* + * OK, the PDB file format is messed up here, because the above commands are + * all OUTSIDE of the Model framework. Of course, different models might + * have different secondary structures, but it is not clear that PDB + * actually supports this. So you can't concatinate PDB files the way you + * can CIF files. --Bob Hanson 8/30/06 + */ + if (isMultiModel && !iHaveModel) + return true; + if (isAtom) { + getHeader = false; + atom(serial); + return true; + } + switch (ptOption) { + case 3: + conect(); + return true; + case 4: + case 5: + case 6: + // if (line.startsWith("HELIX ") || line.startsWith("SHEET ") + // || line.startsWith("TURN ")) { + structure(); + return true; + case 7: + het(); + return true; + case 8: + hetnam(); + return true; + case 9: + anisou(); + return true; + case 10: + site(); + return true; + case 11: + cryst1(); + return true; + case 12: + case 13: + case 14: + // if (line.startsWith("SCALE1")) { + // if (line.startsWith("SCALE2")) { + // if (line.startsWith("SCALE3")) { + scale(ptOption - 11); + return true; + case 15: + expdta(); + return true; + case 16: + formul(); + return true; + case 17: + if (line.startsWith("REMARK 350")) { + remark350(); + return false; } - applySymmetryAndSetTrajectory(); - if (htSites != null) - addSites(htSites); - if (pdbHeader != null) - atomSetCollection.setAtomSetCollectionAuxiliaryInfo("fileHeader", - pdbHeader.toString()); - } catch (Exception e) { - setError(e); + if (line.startsWith("REMARK 290")) { + remark290(); + return false; + } + checkLineForScript(); + return true; + case 18: + header(); + return true; + case 19: + compnd(); + return true; } + return true; } + protected void finalizeReader() throws Exception { + checkNotPDB(); + atomSetCollection.connectAll(maxSerial); + if (biomolecules != null && biomolecules.size() > 0 + && atomSetCollection.getAtomCount() > 0) { + atomSetCollection.setAtomSetAuxiliaryInfo("biomolecules", biomolecules); + setBiomoleculeAtomCounts(); + if (biomts != null && filter != null + && filter.toUpperCase().indexOf("NOSYMMETRY") < 0) { + atomSetCollection.applySymmetry(biomts, applySymmetryToBonds, filter); + } + } + super.finalizeReader(); + if (htSites != null) + addSites(htSites); + if (pdbHeader != null) + atomSetCollection.setAtomSetCollectionAuxiliaryInfo("fileHeader", + pdbHeader.toString()); + } + public void applySymmetryAndSetTrajectory() throws Exception { // This speeds up calculation, because no crosschecking // No special-position atoms in mmCIF files, because there will Modified: trunk/Jmol/src/org/jmol/adapter/readers/molxyz/XyzReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/molxyz/XyzReader.java 2010-02-28 17:15:14 UTC (rev 12524) +++ trunk/Jmol/src/org/jmol/adapter/readers/molxyz/XyzReader.java 2010-02-28 17:46:00 UTC (rev 12525) @@ -94,7 +94,7 @@ } private void readAtomSetName() throws Exception { - readLineTrimmed(); + readLine(); checkLineForScript(); // newAtomSet(line); // makes that the titles of multi-xyz file gets messed up atomSetCollection.newAtomSet(); Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/GromacsReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/GromacsReader.java 2010-02-28 17:15:14 UTC (rev 12524) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/GromacsReader.java 2010-02-28 17:46:00 UTC (rev 12525) @@ -34,21 +34,17 @@ import javax.vecmath.Point3f; -/** - * - */ - public class GromacsReader extends AtomSetCollectionReader { - protected String fileType = "gromacs"; - public void readAtomSetCollection(BufferedReader reader) { this.reader = reader; - atomSetCollection = new AtomSetCollection("xyz", this); + atomSetCollection = new AtomSetCollection("gromacs", this); atomSetCollection.setAtomSetCollectionAuxiliaryInfo("isPDB", Boolean.TRUE); + atomSetCollection.newAtomSet(); try { - readHeader(); - int modelAtomCount = readAtomCount(); - readAtoms(modelAtomCount); + readLine(); + checkLineForScript(); + atomSetCollection.setAtomSetName(line.trim()); + readAtoms(); readUnitCell(); applySymmetryAndSetTrajectory(); } catch (Exception e) { @@ -56,44 +52,8 @@ } } - private void readUnitCell() throws Exception { - readLineTrimmed(); - String[] tokens = getTokens(line); - if (tokens.length < 3 || !doApplySymmetry) - return; - float a = 10 * parseFloat(tokens[0]); - float b = 10 * parseFloat(tokens[1]); - float c = 10 * parseFloat(tokens[2]); - setUnitCell(a, b, c, 90, 90, 90); - setSpaceGroupName("P1"); - Atom[] atoms = atomSetCollection.getAtoms(); - Point3f pt = new Point3f(0.5f, 0.5f, 0.5f); - for (int i = atomSetCollection.getAtomCount(); --i >= 0;) { - setAtomCoord(atoms[i]); - atoms[i].add(pt); - } - } + /* - private int readAtomCount() throws Exception { - readLine(); - if (line != null) { - int atomCount = parseInt(line); - if (atomCount > 0) - return atomCount; - } - return 0; - } - - private void readHeader() throws Exception { - readLineTrimmed(); - checkLineForScript(); - atomSetCollection.newAtomSet(); - atomSetCollection.setAtomSetName(line); - atomSetCollection.setAtomSetAuxiliaryInfo("isPDB", Boolean.TRUE); - } - - /* - "Check Your Input" (D. van der Spoel) 59 1TYR N 1 1.521 1.583 2.009 0.0000 0.0000 0.0000 @@ -104,7 +64,8 @@ 1TYR CB 6 1.541 1.791 2.133 0.0000 0.0000 0.0000 */ - private void readAtoms(int modelAtomCount) throws Exception { + private void readAtoms() throws Exception { + int modelAtomCount = parseInt(readLine()); for (int i = 0; i < modelAtomCount; ++i) { readLine(); int len = line.length(); @@ -158,5 +119,25 @@ return "Xx"; } + private void readUnitCell() throws Exception { + if (readLine() == null) + return; + String[] tokens = getTokens(line); + if (tokens.length < 3 || !doApplySymmetry) + return; + float a = 10 * parseFloat(tokens[0]); + float b = 10 * parseFloat(tokens[1]); + float c = 10 * parseFloat(tokens[2]); + setUnitCell(a, b, c, 90, 90, 90); + setSpaceGroupName("P1"); + Atom[] atoms = atomSetCollection.getAtoms(); + Point3f pt = new Point3f(0.5f, 0.5f, 0.5f); + for (int i = atomSetCollection.getAtomCount(); --i >= 0;) { + setAtomCoord(atoms[i]); + atoms[i].add(pt); + } + } + + } Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java 2010-02-28 17:15:14 UTC (rev 12524) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/Mol2Reader.java 2010-02-28 17:46:00 UTC (rev 12525) @@ -107,7 +107,7 @@ */ isPDB = false; - String thisDataSetName = readLineTrimmed(); + String thisDataSetName = readLine().trim(); lastSequenceNumber = Integer.MAX_VALUE; chainID = 'A' - 1; readLine(); Modified: trunk/Jmol/src/org/jmol/adapter/readers/simple/CubeReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/simple/CubeReader.java 2010-02-28 17:15:14 UTC (rev 12524) +++ trunk/Jmol/src/org/jmol/adapter/readers/simple/CubeReader.java 2010-02-28 17:46:00 UTC (rev 12525) @@ -91,7 +91,7 @@ if (readLine().indexOf("#JVXL") == 0) while (readLine().indexOf("#") == 0) { } - atomSetCollection.setAtomSetName(line.trim() + " - " + readLineTrimmed()); + atomSetCollection.setAtomSetName(line.trim() + " - " + readLine().trim()); } void readAtomCountAndOrigin() throws Exception { Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-28 17:15:14 UTC (rev 12524) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-02-28 17:46:00 UTC (rev 12525) @@ -913,13 +913,6 @@ return line; } - protected String readLineTrimmed() throws Exception { - readLine(); - if (line == null) - line = ""; - return line = line.trim(); - } - final static protected String[] getStrings(String sinfo, int nFields, int width) { String[] fields = new String[nFields]; for (int i = 0, pt = 0; i < nFields; i++, pt += width) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-01 13:23:52
|
Revision: 12529 http://jmol.svn.sourceforge.net/jmol/?rev=12529&view=rev Author: hansonr Date: 2010-03-01 13:23:45 +0000 (Mon, 01 Mar 2010) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/ShelxReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/ShelxReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/ShelxReader.java 2010-03-01 04:40:26 UTC (rev 12528) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/ShelxReader.java 2010-03-01 13:23:45 UTC (rev 12529) @@ -26,11 +26,13 @@ import org.jmol.adapter.smarter.*; import org.jmol.util.ArrayUtil; +import org.jmol.util.Logger; /** * A reader for SHELX output (RES) files. It does not read all information. * The list of fields that is read: TITL, REM, END, CELL, SPGR, SFAC - * In addition atoms are read. + * + * Atom positions and thermal ellipsoids are read. * * <p>A reader for SHELX files. It currently supports SHELXL. * @@ -39,16 +41,20 @@ * http://www.msg.ucsf.edu/local/programs/shelxl/ch_07.html</a>. * * modified by Bob Hanson 2006/04 to allow - * variant CrystalMaker .cmdf file reading. - * + * variant CrystalMaker .cmdf file reading + * -- but by 2/2010 looks like these ASCII CrystalMaker files aren't used + * anymore by CrystalMaker, and instead it uses a binary format. + * CrystalMaker2.2.3 seems to attempt to read the files, but actually cannot. + * At least not for the file given at http://www.ch.ic.ac.uk/chemime/ * */ public class ShelxReader extends AtomSetCollectionReader { private String[] sfacElementSymbols; - private boolean isCmdf = false; - + private boolean isCmdf; + String[] tokens; + public void initializeReader() { setFractionalCoordinates(true); } @@ -60,15 +66,19 @@ while ((lineLength = (line = line.trim()).length()) > 0 && line.charAt(lineLength - 1) == '=') line = line.substring(0, lineLength - 1) + readLine(); - if (line.startsWith("TITL")) { + + tokens = getTokens(); + if (tokens.length == 0) + return true; + String command = tokens[0].toUpperCase(); + if (command.equals("TITL")) { if (!doGetModel(++modelNumber)) return checkLastModel(); sfacElementSymbols = null; applySymmetryAndSetTrajectory(); setFractionalCoordinates(true); - isCmdf = false; atomSetCollection.newAtomSet(); - atomSetCollection.setAtomSetName(parseTrimmed(line, 4)); + atomSetCollection.setAtomSetName(line.substring(4).trim()); iHaveAtoms = true; return true; } @@ -76,8 +86,7 @@ if (!iHaveAtoms || lineLength < 3) return true; - String command = (line + " ").substring(0, 4).toUpperCase().trim(); - if (unsupportedRecordTypes.indexOf(command + ";") >= 0) + if (unsupportedRecordTypes.indexOf(";" + command + ";") >= 0) return true; for (int i = supportedRecordTypes.length; --i >= 0;) if (command.equals(supportedRecordTypes[i])) { @@ -90,7 +99,7 @@ } private final static String unsupportedRecordTypes = - "ZERR;DISP;UNIT;LAUE;REM;MORE;TIME;" + + ";ZERR;DISP;UNIT;LAUE;REM;MORE;TIME;" + "HKLF;OMIT;SHEL;BASF;TWIN;EXTI;SWAT;HOPE;MERG;" + "SPEC;RESI;MOVE;ANIS;AFIX;HFIX;FRAG;FEND;EXYZ;" + "EXTI;EADP;EQIV;" + @@ -100,7 +109,7 @@ "L.S.;CGLS;BLOC;DAMP;STIR;WGHT;FVAR;" + "BOND;CONF;MPLA;RTAB;HTAB;LIST;ACTA;SIZE;TEMP;" + "WPDB;" + - "FMAP;GRID;PLAN;MOLE"; + "FMAP;GRID;PLAN;MOLE;"; final private static String[] supportedRecordTypes = { "TITL", "CELL", "SPGR", "SFAC", "LATT", "SYMM", "NOTE", "ATOM", "END" }; @@ -131,8 +140,8 @@ isCmdf = true; break; case 7: // ATOM - if (isCmdf) - processCmdfAtoms(); + isCmdf = true; + processCmdfAtoms(); break; } } @@ -144,7 +153,7 @@ } private void parseSymmRecord() throws Exception { - setSymmetryOperator(parseTrimmed(line, 4)); + setSymmetryOperator(line.substring(4).trim()); } private void cell() throws Exception { @@ -158,29 +167,24 @@ * CELL 7.11174 21.71704 30.95857 90.000 90.000 90.000 */ - String[] tokens = getTokens(); - int ioff = 1; - if (isCmdf) { - ioff = 0; - } else { - float wavelength = parseFloat(tokens[0]); + int ioff = tokens.length - 6; + if (ioff == 2) atomSetCollection.setAtomSetCollectionAuxiliaryInfo("wavelength", - new Float(wavelength)); - } + new Float(parseFloat(tokens[1]))); for (int ipt = 0; ipt < 6; ipt++) - setUnitCellItem(ipt, parseFloat(tokens[ipt + ioff + 1])); + setUnitCellItem(ipt, parseFloat(tokens[ipt + ioff])); } private void parseSfacRecord() { // an SFAC record is one of two cases // a simple SFAC record contains element names // a general SFAC record contains coefficients for a single element - String[] sfacTokens = getTokens(line, 4); boolean allElementSymbols = true; - for (int i = sfacTokens.length; allElementSymbols && --i >= 0;) { - String token = sfacTokens[i]; + for (int i = tokens.length; allElementSymbols && --i >= 1;) { + String token = tokens[i]; allElementSymbols = Atom.isValidElementSymbolNoCaseSecondChar(token); } + String[] sfacTokens = getTokens(line.substring(4)); if (allElementSymbols) parseSfacElementSymbols(sfacTokens); else @@ -222,28 +226,47 @@ private void assumeAtomRecord() throws Exception { // this line gives an atom, because any line not starting with // a SHELX command is an atom - String atomName = parseToken(line); - int scatterFactor = parseInt(); - float x = parseFloat(); - float y = parseFloat(); - float z = parseFloat(); - // skip the rest - + String atomName = tokens[0]; + int elementIndex = parseInt(tokens[1]); + float x = parseFloat(tokens[2]); + float y = parseFloat(tokens[3]); + float z = parseFloat(tokens[4]); + if (elementIndex == Integer.MAX_VALUE || Float.isNaN(x) || Float.isNaN(y) || Float.isNaN(z)) { + Logger.error("skipping line " + line); + return; + } + + elementIndex--; Atom atom = atomSetCollection.addNewAtom(); atom.atomName = atomName; - if (sfacElementSymbols != null) { - int elementIndex = scatterFactor - 1; - if (elementIndex >= 0 && elementIndex < sfacElementSymbols.length) + if (sfacElementSymbols != null && elementIndex >= 0 && elementIndex < sfacElementSymbols.length) atom.elementSymbol = sfacElementSymbols[elementIndex]; + setAtomCoord(atom, x, y, z); + + if (tokens.length == 12) { + float[] data = new float[8]; + data[0] = parseFloat(tokens[6]); //U11 + data[1] = parseFloat(tokens[7]); //U22 + data[2] = parseFloat(tokens[8]); //U33 + data[3] = parseFloat(tokens[11]); //U12 + data[4] = parseFloat(tokens[10]); //U13 + data[5] = parseFloat(tokens[9]); //U23 + data[6] = 8; // Ortep Type 8: D = 2pi^2, C = 2, a*b* + for (int i = 0; i < 6; i++) + if (Float.isNaN(data[i])) { + Logger.error("Bad anisotropic Uij data: " + line); + return; + } + atom.anisoBorU = data; } - setAtomCoord(atom, x, y, z); } private void processCmdfAtoms() throws Exception { while (readLine() != null && line.length() > 10) { Atom atom = atomSetCollection.addNewAtom(); - String[] tokens = getTokens(); + tokens = getTokens(); atom.elementSymbol = getSymbol(tokens[0]); + atom.atomName = tokens[1]; setAtomCoord(atom, parseFloat(tokens[2]), parseFloat(tokens[3]), parseFloat(tokens[4])); } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2010-03-01 04:40:26 UTC (rev 12528) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2010-03-01 13:23:45 UTC (rev 12529) @@ -675,9 +675,8 @@ private void applyAllSymmetry(int maxX, int maxY, int maxZ) throws Exception { int noSymmetryCount = getLastAtomSetAtomCount(); int iAtomFirst = getLastAtomSetAtomIndex(); - for (int i = iAtomFirst; i < atomCount; i++) { + for (int i = iAtomFirst; i < atomCount; i++) atoms[i].ellipsoid = symmetry.getEllipsoid(atoms[i].anisoBorU); - } bondCount0 = bondCount; symmetry.setFinalOperations(atoms, iAtomFirst, noSymmetryCount, doNormalize); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-03 19:01:26
|
Revision: 12550 http://jmol.svn.sourceforge.net/jmol/?rev=12550&view=rev Author: hansonr Date: 2010-03-03 19:00:46 +0000 (Wed, 03 Mar 2010) Log Message: ----------- crystal reader frag. Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-03-03 17:55:30 UTC (rev 12549) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-03-03 19:00:46 UTC (rev 12550) @@ -77,7 +77,6 @@ private boolean haveCharges = false; private boolean addVibrations = false; private int atomCount; - private int numAtomsFrag = 0; private int[] atomFrag; protected void initializeReader() throws Exception { @@ -146,7 +145,6 @@ } if (line.startsWith(" FREQUENCIES COMPUTED ON A FRAGMENT")) { - numAtomsFrag = parseInt(line.substring(39, 44)); readFragments(); return true; } @@ -419,6 +417,9 @@ *INFORMATION **** INPFREQ **** ANALYSIS OF THE VIBRATIONAL MODES * */ + int numAtomsFrag = parseInt(line.substring(39, 44)); + if (numAtomsFrag < 0) + return; atomFrag = new int[numAtomsFrag]; String Sfrag = ""; while (readLine() != null && line.indexOf("INFORMATION **** INPFREQ") < 0) @@ -426,7 +427,7 @@ Sfrag = TextFormat.simpleReplace(Sfrag, "(", " ("); String[] tokens = getTokens(Sfrag); for (int i = 0, pos = 0; i < numAtomsFrag; i++, pos += 5) - atomFrag[i] = parseInt(tokens[pos]); + atomFrag[i] = parseInt(tokens[pos]) - 1; } private float[] frequencies; @@ -437,8 +438,6 @@ readLine(); Vector vData = new Vector(); int freqAtomCount = atomCount; - if (numAtomsFrag > 0) - freqAtomCount = numAtomsFrag; while (readLine() != null && line.length() > 0) { int i0 = parseInt(line.substring(1, 5)); int i1 = parseInt(line.substring(6, 10)); @@ -475,8 +474,6 @@ } boolean[] ignore = new boolean[frequencyCount]; int iAtom0 = 0; - if (numAtomsFrag > 0) - iAtom0 = atomFrag[0]; for (int i = 0; i < frequencyCount; i++) { data = (String[]) vData.get(vibrationNumber); ignore[i] = (!doGetVibration(++vibrationNumber) || data == null); @@ -489,7 +486,7 @@ } readLine(); fillFrequencyData(iAtom0, freqAtomCount, lastAtomCount, ignore, false, - 14, 10); + 14, 10, atomFrag); readLine(); } } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-03-03 17:55:30 UTC (rev 12549) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-03-03 19:00:46 UTC (rev 12550) @@ -809,14 +809,16 @@ boolean[] ignore, boolean isWide, int col0, int colWidth) throws Exception { - fillFrequencyData(iAtom0, atomCount, atomCount, ignore, isWide, col0, colWidth); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, isWide, col0, colWidth, null); } protected void fillFrequencyData(int iAtom0, int atomCount, int lastAtomCount, boolean[] ignore, boolean isWide, - int col0, int colWidth) + int col0, int colWidth, int[] atomIndexes) throws Exception { boolean withSymmetry = (lastAtomCount != atomCount); + if (atomIndexes != null) + atomCount = atomIndexes.length; int nLines = (isWide ? atomCount : atomCount * 3); int nFreq = ignore.length; String[][] data = new String[nLines][]; @@ -836,7 +838,7 @@ float vz = parseFloat(isWide ? values[++dataPt] : valuesZ[dataPt]); if (ignore[j]) continue; - int iAtom = iAtom0 + lastAtomCount * j + atomPt; + int iAtom = iAtom0 + lastAtomCount * j + (atomIndexes == null ? atomPt : atomIndexes[atomPt]); if (Logger.debugging) Logger.debug("vib " + iAtom + "/" + j + ": " + vx + " " + vy + " " + vz); atomSetCollection.addVibrationVector(iAtom, vx, vy, vz, withSymmetry); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-04 11:46:47
|
Revision: 12554 http://jmol.svn.sourceforge.net/jmol/?rev=12554&view=rev Author: hansonr Date: 2010-03-04 11:46:40 +0000 (Thu, 04 Mar 2010) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/NWChemReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java trunk/Jmol/src/org/jmol/adapter/readers/simple/AmpacReader.java trunk/Jmol/src/org/jmol/adapter/readers/simple/MopacReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -216,7 +216,7 @@ "Frequencies"); } discardLines(nXX); - fillFrequencyData(iAtom0, atomCount, ignore, true, 0, 0); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, true, 0, 0, null); } } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -185,7 +185,7 @@ } discardLinesUntilBlank(); - fillFrequencyData(iAtom0, atomCount, ignore, false, 20, 12); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, false, 20, 12, null); discardLines(12); readLine(); } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -527,7 +527,7 @@ SmarterJmolAdapter.PATH_SEPARATOR+"Frequencies"); } discardLinesUntilContains(" AN "); - fillFrequencyData(iAtom0, atomCount, ignore, true, 0, 0); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, true, 0, 0, null); } } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -383,7 +383,7 @@ atomSetCollection.setAtomSetProperty("IRIntensity", intensities[i + 1] + " km/mol"); } - fillFrequencyData(iAtom0, atomCount, ignore, false, 0, 0); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, false, 0, 0, null); readLine(); readLine(); } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/NWChemReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NWChemReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/NWChemReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -445,7 +445,7 @@ } firstTime = false; discardLines(1); - fillFrequencyData(iAtom0, atomCount, ignore, false, 0, 0); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, false, 0, 0, null); discardLines(3); } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -202,7 +202,7 @@ // position to start reading the displacement vectors discardLinesUntilStartsWith(" X"); - fillFrequencyData(iAtom0, atomCount, ignore, true, 0, 0); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, true, 0, 0, null); discardLinesUntilBlank(); } } Modified: trunk/Jmol/src/org/jmol/adapter/readers/simple/AmpacReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/simple/AmpacReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/simple/AmpacReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -196,7 +196,7 @@ atomSetCollection.setAtomSetProperty(SmarterJmolAdapter.PATH_KEY, "Frequencies"); } - fillFrequencyData(iAtom0, atomCount, ignore, false, 8, 9); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, false, 8, 9, null); readLine(); readLine(); } Modified: trunk/Jmol/src/org/jmol/adapter/readers/simple/MopacReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/simple/MopacReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/readers/simple/MopacReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -225,7 +225,7 @@ atomSetCollection.setAtomSetProperty(SmarterJmolAdapter.PATH_KEY, "Frequencies"); } - fillFrequencyData(iAtom0, atomCount, ignore, false, 0, 0); + fillFrequencyData(iAtom0, atomCount, atomCount, ignore, false, 0, 0, null); } } } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-03-03 19:54:55 UTC (rev 12553) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-03-04 11:46:40 UTC (rev 12554) @@ -805,18 +805,38 @@ data[i] = getTokens(discardLinesUntilNonBlank()); } - protected void fillFrequencyData(int iAtom0, int atomCount, + /** + * Extracts a block of frequency data from a file. This block may be of two types -- + * either X Y Z across a row or each of X Y Z on a separate line. Data is presumed + * to be in fixed FORTRAN-like column format, not space-separated columns. + * + * @param iAtom0 + * the first atom to be assigned a frequency + * @param atomCount + * the number of atoms to be assigned + * @param modelAtomCount + * the number of atoms in each model + * @param ignore + * the frequencies to ignore because the user has selected + * only certain vibrations to be read or for whatever reason; + * length serves to set the number of frequencies to be read + * @param isWide + * when TRUE, this is a table that has X Y Z for each mode within the same row; + * when FALSE, this is a table that has X Y Z for each mode on a separate line. + * @param col0 + * the column in which data starts + * @param colWidth + * the width of the data columns + * @param atomIndexes + * an array either null or indicating exactly which atoms get the frequencies + * (used by CrystalReader) + * @throws Exception + */ + protected void fillFrequencyData(int iAtom0, int atomCount, int modelAtomCount, boolean[] ignore, boolean isWide, - int col0, int colWidth) - throws Exception { - fillFrequencyData(iAtom0, atomCount, atomCount, ignore, isWide, col0, colWidth, null); - } - - protected void fillFrequencyData(int iAtom0, int atomCount, int lastAtomCount, - boolean[] ignore, boolean isWide, int col0, int colWidth, int[] atomIndexes) throws Exception { - boolean withSymmetry = (lastAtomCount != atomCount); + boolean withSymmetry = (modelAtomCount != atomCount); if (atomIndexes != null) atomCount = atomIndexes.length; int nLines = (isWide ? atomCount : atomCount * 3); @@ -838,7 +858,7 @@ float vz = parseFloat(isWide ? values[++dataPt] : valuesZ[dataPt]); if (ignore[j]) continue; - int iAtom = iAtom0 + lastAtomCount * j + (atomIndexes == null ? atomPt : atomIndexes[atomPt]); + int iAtom = iAtom0 + modelAtomCount * j + (atomIndexes == null ? atomPt : atomIndexes[atomPt]); if (Logger.debugging) Logger.debug("vib " + iAtom + "/" + j + ": " + vx + " " + vy + " " + vz); atomSetCollection.addVibrationVector(iAtom, vx, vy, vz, withSymmetry); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-04 12:14:21
|
Revision: 12555 http://jmol.svn.sourceforge.net/jmol/?rev=12555&view=rev Author: hansonr Date: 2010-03-04 12:14:09 +0000 (Thu, 04 Mar 2010) Log Message: ----------- minor adapter cleanup Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/more/ForceFieldReader.java trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/more/ForceFieldReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/more/ForceFieldReader.java 2010-03-04 11:46:40 UTC (rev 12554) +++ trunk/Jmol/src/org/jmol/adapter/readers/more/ForceFieldReader.java 2010-03-04 12:14:09 UTC (rev 12555) @@ -141,4 +141,43 @@ atomTypes.put(atomType, elementSymbol); return haveSymbol; } + + protected static String deducePdbElementSymbol(boolean isHetero, String XX, + String group3) { + // short of having an entire table, + int i = XX.indexOf('\0'); + String atomType = null; + if (i >= 0) { + atomType = XX.substring(i + 1); + XX = XX.substring(0, i); + if (atomType != null && atomType.length() == 1) + return atomType; + } + if (XX.equalsIgnoreCase(group3)) + return XX; // Cd Mg etc. + int len = XX.length(); + char ch1 = ' '; + i = 0; + while (i < len && (ch1 = XX.charAt(i++)) <= '9') { + // find first nonnumeric letter + } + + char ch2 = (i < len ? XX.charAt(i) : ' '); + String full = group3 + "." + ch1 + ch2; + // Cd Nd Ne are not in complex hetero; Ca is in these: + if (("OEC.CA ICA.CA OC1.CA OC2.CA OC4.CA").indexOf(full) >= 0) + return "Ca"; + if (XX.indexOf("'") > 0 || XX.indexOf("*") >= 0 || "HCNO".indexOf(ch1) >= 0 + && ch2 <= 'H' || XX.startsWith("CM")) + return "" + ch1; + if (isHetero && Atom.isValidElementSymbolNoCaseSecondChar(ch1, ch2)) + return ("" + ch1 + ch2).trim(); + if (Atom.isValidElementSymbol(ch1)) + return "" + ch1; + if (Atom.isValidElementSymbol(ch2)) + return "" + ch2; + return "Xx"; + } + + } Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-03-04 11:46:40 UTC (rev 12554) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-03-04 12:14:09 UTC (rev 12555) @@ -87,6 +87,7 @@ setFractionalCoordinates(readHeader()); } + boolean iHaveDesiredModel; protected boolean checkLine() throws Exception { // starting point for any calculation is the definition of the lattice // parameters similar to the "data" statement of a CIF file @@ -94,12 +95,13 @@ && (isPrimitive && (line.contains("- PRIMITIVE") || line.contains("- BOHR")) || !isPrimitive && line.contains("- CONVENTIONAL"))) { - if (doneReadingModels()) { + if (iHaveDesiredModel) { continuing = false; return false; } if (!isPrimitive || doGetModel(++modelNumber)) { readCellParams(); + iHaveDesiredModel = checkLastModel(); doReadAtoms = true; } else { doReadAtoms = false; Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-03-04 11:46:40 UTC (rev 12554) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-03-04 12:14:09 UTC (rev 12555) @@ -435,16 +435,6 @@ return (desiredModelNumber > 0 || modelNumber >= lastModelNumber); } - /** - * before reading a model: Q: Has the last model already been read? - * - * @return Yes/No - */ - public boolean doneReadingModels() { - return (desiredModelNumber > 0 && desiredModelNumber == modelNumber - || modelNumber == lastModelNumber); - } - public boolean doGetVibration(int vibrationNumber) { // vibrationNumber is 1-based return (desiredVibrationNumber <= 0 || vibrationNumber == desiredVibrationNumber); @@ -747,43 +737,15 @@ return JmolAdapter.getElementSymbol(elementNumber); } - protected static String deducePdbElementSymbol(boolean isHetero, String XX, - String group3) { - // short of having an entire table, - int i = XX.indexOf('\0'); - String atomType = null; - if (i >= 0) { - atomType = XX.substring(i + 1); - XX = XX.substring(0, i); - if (atomType != null && atomType.length() == 1) - return atomType; - } - if (XX.equalsIgnoreCase(group3)) - return XX; // Cd Mg etc. - int len = XX.length(); - char ch1 = ' '; - i = 0; - while (i < len && (ch1 = XX.charAt(i++)) <= '9') { - // find first nonnumeric letter - } - - char ch2 = (i < len ? XX.charAt(i) : ' '); - String full = group3 + "." + ch1 + ch2; - // Cd Nd Ne are not in complex hetero; Ca is in these: - if (("OEC.CA ICA.CA OC1.CA OC2.CA OC4.CA").indexOf(full) >= 0) - return "Ca"; - if (XX.indexOf("'") > 0 || XX.indexOf("*") >= 0 || "HCNO".indexOf(ch1) >= 0 - && ch2 <= 'H' || XX.startsWith("CM")) - return "" + ch1; - if (isHetero && Atom.isValidElementSymbolNoCaseSecondChar(ch1, ch2)) - return ("" + ch1 + ch2).trim(); - if (Atom.isValidElementSymbol(ch1)) - return "" + ch1; - if (Atom.isValidElementSymbol(ch2)) - return "" + ch2; - return "Xx"; - } - + /** + * fills an array with a predefined number of lines of data that is + * arranged in fixed FORTRAN-like column format + * + * @param data + * @param col0 + * @param colWidth + * @throws Exception + */ protected void fillDataBlock(String[][] data, int col0, int colWidth) throws Exception { if (colWidth == 0) { fillDataBlock(data); @@ -799,6 +761,13 @@ } } + /** + * fills an array with a pre-defined number of lines of token data, + * skipping blank lines in the process + * + * @param data + * @throws Exception + */ protected void fillDataBlock(String[][] data) throws Exception { int nLines = data.length; for (int i = 0; i < nLines; i++) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-20 18:04:58
|
Revision: 12662 http://jmol.svn.sourceforge.net/jmol/?rev=12662&view=rev Author: hansonr Date: 2010-03-20 18:04:51 +0000 (Sat, 20 Mar 2010) Log Message: ----------- crystal reader for slabcut (mgo_slab.out) Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-03-20 17:02:44 UTC (rev 12661) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-03-20 18:04:51 UTC (rev 12662) @@ -122,6 +122,10 @@ } } + if (line.contains("DIMENSIONALITY OF THE SYSTEM 2")) { + isSlab = true; + return true; + } if (line.startsWith(" LATTICE PARAMETER")) { boolean isConvLattice = line.contains("- CONVENTIONAL"); if (isConvLattice) { Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-20 17:02:44 UTC (rev 12661) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-20 18:04:51 UTC (rev 12662) @@ -642,6 +642,7 @@ private static boolean checkCrystal(String[] lines) { if (lines[1].equals("SLAB") || lines[1].equals("MOLECULE") + || lines[1].equals("CRYSTAL") || lines[1].equals("POLYMER") || lines[3].equals("SLAB") || lines[3].equals("MOLECULE") || lines[3].equals("POLYMER")) return true; @@ -754,20 +755,18 @@ } private static boolean checkMol(String[] lines) { - if (lines[3].length() >= 6) { - String line4trimmed = lines[3].trim(); - if (line4trimmed.endsWith("V2000") || - line4trimmed.endsWith("v2000")) - return true; - try { - Integer.parseInt(lines[3].substring(0, 3).trim()); - Integer.parseInt(lines[3].substring(3, 6).trim()); - return (lines[0].indexOf("@<TRIPOS>") != 0 - && lines[1].indexOf("@<TRIPOS>") != 0 - && lines[2].indexOf("@<TRIPOS>") != 0 - ); - } catch (NumberFormatException nfe) { - } + String line4trimmed = lines[3].trim(); + if (line4trimmed.length() < 6) + return false; + if (line4trimmed.endsWith("V2000") || line4trimmed.endsWith("v2000")) + return true; + try { + Integer.parseInt(line4trimmed.substring(0, 3).trim()); + Integer.parseInt(line4trimmed.substring(3, 6).trim()); + return (lines[0].indexOf("@<TRIPOS>") != 0 + && lines[1].indexOf("@<TRIPOS>") != 0 && lines[2] + .indexOf("@<TRIPOS>") != 0); + } catch (NumberFormatException nfe) { } return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-23 19:47:23
|
Revision: 12683 http://jmol.svn.sourceforge.net/jmol/?rev=12683&view=rev Author: hansonr Date: 2010-03-23 19:47:17 +0000 (Tue, 23 Mar 2010) Log Message: ----------- preliminary NBO .31,.32-.41, .nbo file readers -- just need basis functions Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java 2010-03-23 16:43:07 UTC (rev 12682) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java 2010-03-23 19:47:17 UTC (rev 12683) @@ -26,12 +26,14 @@ import org.jmol.adapter.smarter.*; import org.jmol.util.Logger; +import org.jmol.util.TextFormat; import java.io.BufferedReader; import java.io.StringReader; +import java.util.Hashtable; /** - * NBO file 31 reader will pull in other files as necessary + * NBO file nn reader will pull in other files as necessary * * **/ @@ -58,6 +60,9 @@ public class NBOReader extends MOReader { private boolean isOutputFile; + private String moType = ""; + private int nCoef; + private int nOrbitals; protected void initializeReader() throws Exception { String line1 = readLine(); @@ -65,13 +70,26 @@ isOutputFile = (line.indexOf("***") >= 0); if (isOutputFile) { readFile31(); + // keep going -- we need to read the file using MOReader. + } else if (line.contains("s in the AO basis:")){ + moType = line.substring(0, line.indexOf("s") + 1); + readFile31(); + readFile46(); + readOrbitalData(); + continuing = false; } else { readData31(line1, line); + continuing = false; } super.initializeReader(); } + protected boolean checkLine() throws Exception { + // for .nbo only + return checkNboLine(); + } + /* 14_a Basis set information needed for plotting orbitals @@ -82,12 +100,83 @@ 6 -2.378528000 -1.339374000 0.620578000 */ + private void readFile31() throws Exception { + String data = getFileData(".31"); + if (data == null) + return; + BufferedReader readerSave = reader; + reader = new BufferedReader(new StringReader(data)); + readData31(null, null); + reader = readerSave; + } + + private void readFile46() throws Exception { + String data = getFileData(".46"); + if (data == null) + return; + BufferedReader readerSave = reader; + reader = new BufferedReader(new StringReader(data)); + readData46(); + reader = readerSave; + } + + private void readData46() throws Exception { + String[] tokens = getTokens(readLine()); + nCoef = parseInt(tokens[1]); + discardLinesUntilContains("-"); + StringBuffer sb = new StringBuffer(); + do { + sb.append(line); + } while (readLine() != null); + String data = sb.toString(); + int n = data.length(); + sb = new StringBuffer(); + for (int i = 0; i < n; i++) { + char c = data.charAt(i); + switch (c) { + case '-': + if (data.charAt(i + 1) == ' ') + i++; + break; + case ' ': + if (Character.isDigit(data.charAt(i + 1))) + continue; + break; + } + sb.append(c); + } + tokens = getTokens(sb.toString()); + for (int i = 0; i < tokens.length; i++) { + Hashtable mo = new Hashtable(); + String type = tokens[i]; + mo.put("type", type); + //TODO: does not account for SOMO + mo.put("occupancy", new Float(type.indexOf("*") >= 0 ? 0 : 2)); + orbitals.add(mo); + } + } + + private String getFileData(String ext) { + String fileName = (String) htParams.get("fullPathName"); + int pt = fileName.lastIndexOf("."); + if (pt < 0) + pt = fileName.length(); + fileName = fileName.substring(0, pt) + ext; + String data = viewer.getFileAsString(fileName); + if (data.length() == 0) { + Logger.error(" supplemental file " + fileName + " was not found"); + continuing = false; + return null; + } + return data; + } + private void readData31(String line1, String line2) throws Exception { if (line1 == null) line1 = readLine(); if (line2 == null) line2 = readLine(); - atomSetCollection.setAtomSetName(line1.trim()); + atomSetCollection.setAtomSetName(line1.trim() + moType); readLine(); // ---------- String[] tokens = getTokens(readLine()); int atomCount = parseInt(tokens[0]); @@ -98,30 +187,28 @@ Atom atom = atomSetCollection.addNewAtom(); atom.elementNumber = (short) parseInt(tokens[0]); atom.set(parseFloat(tokens[1]), parseFloat(tokens[2]), parseFloat(tokens[3])); - } + } + readBasisFunctions(); } - private void readFile31() throws Exception { - String fileName = (String) htParams.get("fullPathName"); - int pt = fileName.lastIndexOf("."); - if (pt < 0) - pt = fileName.length(); - fileName = fileName.substring(0, pt) + ".31"; - String data = viewer.getFileAsString(fileName); - if (data.length() == 0) { - Logger.error(" supplemental file " + fileName + " was not found"); - continuing = false; - return; - } - BufferedReader readerSave = reader; - reader = new BufferedReader(new StringReader(data)); - readData31(null, null); - reader = readerSave; + private void readBasisFunctions() { + // TODO + } - protected boolean checkLine() throws Exception { - return checkNboLine(); + private void readOrbitalData() throws Exception { + readLine(); + for (int i = 0; i < nOrbitals; i++) { + Hashtable mo = (Hashtable) orbitals.get(i); + float[] coefs = new float[nCoef]; + mo.put("ccoefficients", coefs); + for (int j = 0; j < nCoef;) { + String[] data = getTokens(readLine()); + for (int k = 0; k < data.length; k++, j++) + coefs[j] = parseFloat(data[k]); + } + orbitals.add(mo); + } } - } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-23 16:43:07 UTC (rev 12682) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-23 19:47:17 UTC (rev 12683) @@ -639,6 +639,7 @@ private static boolean checkNBO(String[] lines) { // .31 file or .nbo file return lines[1].startsWith(" Basis set information needed for plotting orbitals") + || lines[1].contains("s in the AO basis:") || lines[2].contains(" N A T U R A L A T O M I C O R B I T A L"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-24 12:26:12
|
Revision: 12687 http://jmol.svn.sourceforge.net/jmol/?rev=12687&view=rev Author: hansonr Date: 2010-03-24 12:26:05 +0000 (Wed, 24 Mar 2010) Log Message: ----------- provisional GenNBO file reader Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Added Paths: ----------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java Removed Paths: ------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java Copied: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java (from rev 12686, trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java) =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java (rev 0) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2010-03-24 12:26:05 UTC (rev 12687) @@ -0,0 +1,294 @@ +/* $RCSfile$ + * $Author: hansonr $ + * $Date: 2006-09-12 00:46:22 -0500 (Tue, 12 Sep 2006) $ + * $Revision: 5501 $ + * + * Copyright (C) 2004-2005 The Jmol Development Team + * + * Contact: jmo...@li... + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +package org.jmol.adapter.readers.quantum; + +import org.jmol.adapter.smarter.*; +import org.jmol.api.JmolAdapter; +import org.jmol.util.Logger; + +import java.io.BufferedReader; +import java.io.StringReader; +import java.util.Hashtable; +import java.util.Vector; + +/** + * NBO file nn reader will pull in other files as necessary + * + * + **/ + + + + + /* NBO output analysis is based on + * + *********************************** NBO 5.G *********************************** + N A T U R A L A T O M I C O R B I T A L A N D + N A T U R A L B O N D O R B I T A L A N A L Y S I S + ******************************************************************************* + (c) Copyright 1996-2004 Board of Regents of the University of Wisconsin System + on behalf of the Theoretical Chemistry Institute. All Rights Reserved. + + Cite this program as: + + NBO 5.G. E. D. Glendening, J. K. Badenhoop, A. E. Reed, + J. E. Carpenter, J. A. Bohmann, C. M. Morales, and F. Weinhold + (Theoretical Chemistry Institute, University of Wisconsin, + Madison, WI, 2001); http://www.chem.wisc.edu/~nbo5 + + /AONBO / : Print the AO to NBO transformation + * + */ +public class GenNBOReader extends MOReader { + + private boolean isOutputFile; + private String moType = ""; + private int nOrbitals; + + /* + * molname.31 AO molname.32 PNAO molname.33 NAO molname.34 PNHO molname.35 NHO + * molname.36 PNBO molname.37 NBO molname.38 PNLMO molname.39 NLMO molname.40 + * MO molname.41 AO density matrix molname.46 Basis label file + */ + protected void initializeReader() throws Exception { + String line1 = readLine(); + readLine(); + isOutputFile = (line.indexOf("***") >= 0); + if (isOutputFile) { + readFile31(); + super.initializeReader(); + // keep going -- we need to read the file using MOReader. + return; + } + if (line.contains("s in the AO basis:")) { + moType = line.substring(1, line.indexOf("s")); + readFile31(); + } else { + moType = "AO"; + readData31(line1, line); + } + readFile46(); + readOrbitalData(!moType.equals("AO")); + setMOData(false); + continuing = false; + } + + protected boolean checkLine() throws Exception { + // for .nbo only + return checkNboLine(); + } + + private String getFileData(String ext) { + String fileName = (String) htParams.get("fullPathName"); + int pt = fileName.lastIndexOf("."); + if (pt < 0) + pt = fileName.length(); + fileName = fileName.substring(0, pt) + ext; + String data = viewer.getFileAsString(fileName); + if (data.length() == 0) { + Logger.error(" supplemental file " + fileName + " was not found"); + continuing = false; + return null; + } + return data; + } + + + /* + 14_a + Basis set information needed for plotting orbitals + --------------------------------------------------------------------------- + 36 90 162 + --------------------------------------------------------------------------- + 6 -2.992884000 -1.750577000 1.960024000 + 6 -2.378528000 -1.339374000 0.620578000 + */ + + private void readFile31() throws Exception { + String data = getFileData(".31"); + if (data == null) + return; + BufferedReader readerSave = reader; + reader = new BufferedReader(new StringReader(data)); + readData31(null, null); + reader = readerSave; + } + + private void readFile46() throws Exception { + String data = getFileData(".46"); + if (data == null) + return; + BufferedReader readerSave = reader; + reader = new BufferedReader(new StringReader(data)); + readData46(); + reader = readerSave; + } + + private void readData31(String line1, String line2) throws Exception { + if (line1 == null) + line1 = readLine(); + if (line2 == null) + line2 = readLine(); + atomSetCollection.setAtomSetName(line1.trim() + moType); + + // read atomCount, shellCount, and gaussianCount + readLine(); // ---------- + String[] tokens = getTokens(readLine()); + int atomCount = parseInt(tokens[0]); + shellCount = parseInt(tokens[1]); + gaussianCount = parseInt(tokens[2]); + + // read atom types and positions + readLine(); // ---------- + atomSetCollection.newAtomSet(); + for (int i = 0; i < atomCount; i++) { + tokens = getTokens(readLine()); + Atom atom = atomSetCollection.addNewAtom(); + atom.elementNumber = (short) parseInt(tokens[0]); + atom.set(parseFloat(tokens[1]), parseFloat(tokens[2]), parseFloat(tokens[3])); + } + + // read basis functions + shells = new Vector(); + gaussians = new float[gaussianCount][]; + for (int i = 0; i < gaussianCount; i++) + gaussians[i] = new float[5]; + readLine(); // ---------- + for (int i = 0; i < shellCount; i++) { + tokens = getTokens(readLine()); + readLine(); // skip second line? + int[] slater = new int[4]; + slater[0] = parseInt(tokens[0]) - 1; // atom pointer; 1-based + switch (parseInt(tokens[1])) { + case 1: + slater[1] = JmolAdapter.SHELL_S; + break; + case 2: + slater[1] = JmolAdapter.SHELL_P; + break; + case 3: // perhaps? + slater[1] = JmolAdapter.SHELL_D_SPHERICAL; + break; + case 4: + slater[1] = JmolAdapter.SHELL_SP; + break; + case 5: // perhaps? + slater[1] = JmolAdapter.SHELL_F_SPHERICAL; + break; + } + // 0 = S, 1 = P, 2 = SP, 3 = D, 4 = F + slater[2] = parseInt(tokens[2]) - 1; + slater[3] = parseInt(tokens[3]); + shells.addElement(slater); + } + + // get alphas and exponents + + for (int j = 0; j < 5; j++) { + readLine(); + float[] temp = new float[gaussianCount]; + fillFloatArray(temp); + for (int i = 0; i < gaussianCount; i++) + gaussians[i][j] = temp[i]; + } + if (Logger.debugging) { + Logger.debug(shells.size() + " slater shells read"); + Logger.debug(gaussians.length + " gaussian primitives read"); + } + } + + private void readData46() throws Exception { + String[] tokens = getTokens(readLine()); + nOrbitals = parseInt(tokens[1]); + for (int i = 0; i < nOrbitals; i++) { + Hashtable mo = new Hashtable(); + orbitals.add(mo); + } + String ntype = null; + if (moType.indexOf("NHO") >= 0) + ntype = "NHO"; + else if (moType.indexOf("NBO") >= 0) + ntype = "NBO"; + else if (moType.indexOf("NAO") >= 0) + ntype = "NAO"; + else if (moType.equals("AO")) + ntype = "AO"; + if (ntype == null) + return; + if (!ntype.equals("AO")) + discardLinesUntilContains(ntype); + StringBuffer sb = new StringBuffer(); + while (readLine() != null && line.indexOf("O ") < 0) + sb.append(line); + sb.append(' '); + String data = sb.toString(); + int n = data.length() - 1; + sb = new StringBuffer(); + for (int i = 0; i < n; i++) { + char c = data.charAt(i); + switch (c) { + case '(': + case '-': + if (data.charAt(i + 1) == ' ') + i++; + break; + case ' ': + if (Character.isDigit(data.charAt(i + 1)) || data.charAt(i + 1) == '(') + continue; + break; + } + sb.append(c); + } + System.out.println(sb); + tokens = getTokens(sb.toString()); + for (int i = 0; i < nOrbitals; i++) { + Hashtable mo = (Hashtable) orbitals.get(i); + String type = tokens[i]; + mo.put("type", moType + " " + type); + // TODO: does not account for SOMO + mo.put("occupancy", new Float(type.indexOf("*") >= 0 ? 0 : 2)); + } + } + + private void readOrbitalData(boolean isMO) throws Exception { + if (isMO) + readLine(); + for (int i = 0; i < nOrbitals; i++) { + Hashtable mo = (Hashtable) orbitals.get(i); + float[] coefs = new float[nOrbitals]; + mo.put("coefficients", coefs); + if (isMO) + for (int j = 0; j < nOrbitals;) { + String[] data = getTokens(readLine()); + for (int k = 0; k < data.length; k++, j++) + coefs[j] = parseFloat(data[k]); + } + else + coefs[i] = 1; + } + } + + +} Property changes on: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-03-24 12:04:13 UTC (rev 12686) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-03-24 12:26:05 UTC (rev 12687) @@ -153,7 +153,8 @@ // these output lines are being passed on by NBO 5.0 to whatever program is // using it (GAMESS, GAUSSIAN) - +if (line.indexOf("NBOs") >= 0) + System.out.println(line); if (getNBOs) { if (line.indexOf("(Occupancy) Bond orbital/ Coefficients/ Hybrids") >= 0) { getNboTypes(); @@ -233,11 +234,12 @@ readLine(); readLine(); int n = 0; - while (line != null && line.indexOf(".") == 4) { - if (parseInt(line.substring(0, 4)) != n + 1) + int pt = 0; + while (line != null && (pt = line.indexOf(".")) >= 0 && pt < 10) { + if (parseInt(line.substring(0, pt)) != n + 1) break; - moTypes.add(n++, line.substring(5, 34).trim()); - while (readLine() != null && line.startsWith(" ")) { + moTypes.add(n++, line.substring(pt + 1, Math.min(40, line.length())).trim()); + while (readLine() != null && line.startsWith(" ")) { } } Logger.info(n + " natural bond orbitals read"); Deleted: trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java 2010-03-24 12:04:13 UTC (rev 12686) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/NBOReader.java 2010-03-24 12:26:05 UTC (rev 12687) @@ -1,294 +0,0 @@ -/* $RCSfile$ - * $Author: hansonr $ - * $Date: 2006-09-12 00:46:22 -0500 (Tue, 12 Sep 2006) $ - * $Revision: 5501 $ - * - * Copyright (C) 2004-2005 The Jmol Development Team - * - * Contact: jmo...@li... - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -package org.jmol.adapter.readers.quantum; - -import org.jmol.adapter.smarter.*; -import org.jmol.api.JmolAdapter; -import org.jmol.util.Logger; - -import java.io.BufferedReader; -import java.io.StringReader; -import java.util.Hashtable; -import java.util.Vector; - -/** - * NBO file nn reader will pull in other files as necessary - * - * - **/ - - - - - /* NBO output analysis is based on - * - *********************************** NBO 5.G *********************************** - N A T U R A L A T O M I C O R B I T A L A N D - N A T U R A L B O N D O R B I T A L A N A L Y S I S - ******************************************************************************* - (c) Copyright 1996-2004 Board of Regents of the University of Wisconsin System - on behalf of the Theoretical Chemistry Institute. All Rights Reserved. - - Cite this program as: - - NBO 5.G. E. D. Glendening, J. K. Badenhoop, A. E. Reed, - J. E. Carpenter, J. A. Bohmann, C. M. Morales, and F. Weinhold - (Theoretical Chemistry Institute, University of Wisconsin, - Madison, WI, 2001); http://www.chem.wisc.edu/~nbo5 - - /AONBO / : Print the AO to NBO transformation - * - */ -public class NBOReader extends MOReader { - - private boolean isOutputFile; - private String moType = ""; - private int nOrbitals; - - /* - * molname.31 AO molname.32 PNAO molname.33 NAO molname.34 PNHO molname.35 NHO - * molname.36 PNBO molname.37 NBO molname.38 PNLMO molname.39 NLMO molname.40 - * MO molname.41 AO density matrix molname.46 Basis label file - */ - protected void initializeReader() throws Exception { - String line1 = readLine(); - readLine(); - isOutputFile = (line.indexOf("***") >= 0); - if (isOutputFile) { - readFile31(); - super.initializeReader(); - // keep going -- we need to read the file using MOReader. - return; - } - if (line.contains("s in the AO basis:")) { - moType = line.substring(1, line.indexOf("s")); - readFile31(); - } else { - moType = "AO"; - readData31(line1, line); - } - readFile46(); - readOrbitalData(!moType.equals("AO")); - setMOData(false); - continuing = false; - } - - protected boolean checkLine() throws Exception { - // for .nbo only - return checkNboLine(); - } - - private String getFileData(String ext) { - String fileName = (String) htParams.get("fullPathName"); - int pt = fileName.lastIndexOf("."); - if (pt < 0) - pt = fileName.length(); - fileName = fileName.substring(0, pt) + ext; - String data = viewer.getFileAsString(fileName); - if (data.length() == 0) { - Logger.error(" supplemental file " + fileName + " was not found"); - continuing = false; - return null; - } - return data; - } - - - /* - 14_a - Basis set information needed for plotting orbitals - --------------------------------------------------------------------------- - 36 90 162 - --------------------------------------------------------------------------- - 6 -2.992884000 -1.750577000 1.960024000 - 6 -2.378528000 -1.339374000 0.620578000 - */ - - private void readFile31() throws Exception { - String data = getFileData(".31"); - if (data == null) - return; - BufferedReader readerSave = reader; - reader = new BufferedReader(new StringReader(data)); - readData31(null, null); - reader = readerSave; - } - - private void readFile46() throws Exception { - String data = getFileData(".46"); - if (data == null) - return; - BufferedReader readerSave = reader; - reader = new BufferedReader(new StringReader(data)); - readData46(); - reader = readerSave; - } - - private void readData31(String line1, String line2) throws Exception { - if (line1 == null) - line1 = readLine(); - if (line2 == null) - line2 = readLine(); - atomSetCollection.setAtomSetName(line1.trim() + moType); - - // read atomCount, shellCount, and gaussianCount - readLine(); // ---------- - String[] tokens = getTokens(readLine()); - int atomCount = parseInt(tokens[0]); - shellCount = parseInt(tokens[1]); - gaussianCount = parseInt(tokens[2]); - - // read atom types and positions - readLine(); // ---------- - atomSetCollection.newAtomSet(); - for (int i = 0; i < atomCount; i++) { - tokens = getTokens(readLine()); - Atom atom = atomSetCollection.addNewAtom(); - atom.elementNumber = (short) parseInt(tokens[0]); - atom.set(parseFloat(tokens[1]), parseFloat(tokens[2]), parseFloat(tokens[3])); - } - - // read basis functions - shells = new Vector(); - gaussians = new float[gaussianCount][]; - for (int i = 0; i < gaussianCount; i++) - gaussians[i] = new float[5]; - readLine(); // ---------- - for (int i = 0; i < shellCount; i++) { - tokens = getTokens(readLine()); - readLine(); // skip second line? - int[] slater = new int[4]; - slater[0] = parseInt(tokens[0]) - 1; // atom pointer; 1-based - switch (parseInt(tokens[1])) { - case 1: - slater[1] = JmolAdapter.SHELL_S; - break; - case 2: - slater[1] = JmolAdapter.SHELL_P; - break; - case 3: // perhaps? - slater[1] = JmolAdapter.SHELL_D_SPHERICAL; - break; - case 4: - slater[1] = JmolAdapter.SHELL_SP; - break; - case 5: // perhaps? - slater[1] = JmolAdapter.SHELL_F_SPHERICAL; - break; - } - // 0 = S, 1 = P, 2 = SP, 3 = D, 4 = F - slater[2] = parseInt(tokens[2]) - 1; - slater[3] = parseInt(tokens[3]); - shells.addElement(slater); - } - - // get alphas and exponents - - for (int j = 0; j < 5; j++) { - readLine(); - float[] temp = new float[gaussianCount]; - fillFloatArray(temp); - for (int i = 0; i < gaussianCount; i++) - gaussians[i][j] = temp[i]; - } - if (Logger.debugging) { - Logger.debug(shells.size() + " slater shells read"); - Logger.debug(gaussians.length + " gaussian primitives read"); - } - } - - private void readData46() throws Exception { - String[] tokens = getTokens(readLine()); - nOrbitals = parseInt(tokens[1]); - for (int i = 0; i < nOrbitals; i++) { - Hashtable mo = new Hashtable(); - orbitals.add(mo); - } - String ntype = null; - if (moType.indexOf("NHO") >= 0) - ntype = "NHO"; - else if (moType.indexOf("NBO") >= 0) - ntype = "NBO"; - else if (moType.indexOf("NAO") >= 0) - ntype = "NAO"; - else if (moType.equals("AO")) - ntype = "AO"; - if (ntype == null) - return; - if (!ntype.equals("AO")) - discardLinesUntilContains(ntype); - StringBuffer sb = new StringBuffer(); - while (readLine() != null && line.indexOf("O ") < 0) - sb.append(line); - sb.append(' '); - String data = sb.toString(); - int n = data.length() - 1; - sb = new StringBuffer(); - for (int i = 0; i < n; i++) { - char c = data.charAt(i); - switch (c) { - case '(': - case '-': - if (data.charAt(i + 1) == ' ') - i++; - break; - case ' ': - if (Character.isDigit(data.charAt(i + 1)) || data.charAt(i + 1) == '(') - continue; - break; - } - sb.append(c); - } - System.out.println(sb); - tokens = getTokens(sb.toString()); - for (int i = 0; i < nOrbitals; i++) { - Hashtable mo = (Hashtable) orbitals.get(i); - String type = tokens[i]; - mo.put("type", moType + " " + type); - // TODO: does not account for SOMO - mo.put("occupancy", new Float(type.indexOf("*") >= 0 ? 0 : 2)); - } - } - - private void readOrbitalData(boolean isMO) throws Exception { - if (isMO) - readLine(); - for (int i = 0; i < nOrbitals; i++) { - Hashtable mo = (Hashtable) orbitals.get(i); - float[] coefs = new float[nOrbitals]; - mo.put("coefficients", coefs); - if (isMO) - for (int j = 0; j < nOrbitals;) { - String[] data = getTokens(readLine()); - for (int k = 0; k < data.length; k++, j++) - coefs[j] = parseFloat(data[k]); - } - else - coefs[i] = 1; - } - } - - -} Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-24 12:04:13 UTC (rev 12686) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-24 12:26:05 UTC (rev 12687) @@ -47,7 +47,7 @@ "molxyz.", ";Mol;Xyz;", "more.", ";Gromacs;MdCrd;MdTop;Mol2;", "quantum.", ";Adf;Csf;Dgrid;GamessUK;GamessUS;Gaussian;GausianWfn;Jaguar;" + - "Molden;MopacGraphf;NBO;NWChem;Odyssey;Psi;Qchem;Spartan;SpartanSmol;" + + "Molden;MopacGraphf;GenNBO;NWChem;Odyssey;Psi;Qchem;Spartan;SpartanSmol;" + "WebMO;", "simple.", ";Alchemy;Ampac;Cube;FoldingXyz;GhemicalMM;HyperChem;Jme;Mopac;V3000;", "xtal.", ";Aims;Castep;Crystal;Shelx;Wien2k;" @@ -539,7 +539,7 @@ private final static int SPECIAL_AIMS = 11; private final static int SPECIAL_CRYSTAL = 12; private final static int SPECIAL_GROMACS = 13; - private final static int SPECIAL_NBO = 14; + private final static int SPECIAL_GENNBO = 14; // these next are needed by the XML reader @@ -576,7 +576,7 @@ { "Aims" }, { "Crystal" }, { "Gromacs" }, - { "NBO" }, + { "GenNBO" }, { "XmlArgus" }, { "XmlCml" }, @@ -631,12 +631,12 @@ return specialTags[SPECIAL_CASTEP][0]; if (checkAims(lines)) return specialTags[SPECIAL_AIMS][0]; - if (checkNBO(lines)) - return specialTags[SPECIAL_NBO][0]; + if (checkGenNBO(lines)) + return specialTags[SPECIAL_GENNBO][0]; return null; } - private static boolean checkNBO(String[] lines) { + private static boolean checkGenNBO(String[] lines) { // .31 file or .nbo file return lines[1].startsWith(" Basis set information needed for plotting orbitals") || lines[1].contains("s in the AO basis:") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-03-24 13:15:45
|
Revision: 12688 http://jmol.svn.sourceforge.net/jmol/?rev=12688&view=rev Author: hansonr Date: 2010-03-24 13:15:39 +0000 (Wed, 24 Mar 2010) Log Message: ----------- provisional GenNBO file reader Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-03-24 12:26:05 UTC (rev 12687) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-03-24 13:15:39 UTC (rev 12688) @@ -153,8 +153,6 @@ // these output lines are being passed on by NBO 5.0 to whatever program is // using it (GAMESS, GAUSSIAN) -if (line.indexOf("NBOs") >= 0) - System.out.println(line); if (getNBOs) { if (line.indexOf("(Occupancy) Bond orbital/ Coefficients/ Hybrids") >= 0) { getNboTypes(); Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-24 12:26:05 UTC (rev 12687) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-03-24 13:15:39 UTC (rev 12688) @@ -637,7 +637,7 @@ } private static boolean checkGenNBO(String[] lines) { - // .31 file or .nbo file + // .31-.41 file or .nbo file return lines[1].startsWith(" Basis set information needed for plotting orbitals") || lines[1].contains("s in the AO basis:") || lines[2].contains(" N A T U R A L A T O M I C O R B I T A L"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-04-28 21:11:19
|
Revision: 12966 http://jmol.svn.sourceforge.net/jmol/?rev=12966&view=rev Author: hansonr Date: 2010-04-28 21:11:13 +0000 (Wed, 28 Apr 2010) Log Message: ----------- version=12.0.RC9_dev # bug fix: CSF reader upgrade Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java 2010-04-28 21:00:16 UTC (rev 12965) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java 2010-04-28 21:11:13 UTC (rev 12966) @@ -95,8 +95,6 @@ } public void finalizeReader() throws Exception { - for (int i = 0; i < nAtoms; i++) - atomSetCollection.getAtom(i).sequenceNumber = Integer.MIN_VALUE; super.finalizeReader(); } /* @@ -243,6 +241,7 @@ if (connectors.containsKey(thisBondID)) { int[] connect = (int[])connectors.get(thisBondID); connect[1] = thisAtomID; + System.out.println("*" + thisBondID + " " + thisAtomID); if (htBonds != null) { Bond bond = (Bond) htBonds.get(thisBondID); setBond(bond, connect); @@ -250,6 +249,7 @@ } else { int[] connect = new int[2]; connect[0] = thisAtomID; + System.out.println("" + thisBondID + " " + thisAtomID); connectors.put(thisBondID, connect); } } @@ -300,11 +300,11 @@ Logger.warn("field == null in " + line); switch (fieldTypes[i]) { case ID: - atom.sequenceNumber = Parser.parseInt(field); + atom.atomSerial = Parser.parseInt(field); break; case sym: atom.elementSymbol = field; - atom.atomName = field + atom.sequenceNumber; + atom.atomName = field + atom.atomSerial; break; case anum: strAtomicNumbers += field + " "; // for MO slater basis calc Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2010-04-28 21:00:16 UTC (rev 12965) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollection.java 2010-04-28 21:11:13 UTC (rev 12966) @@ -1067,14 +1067,14 @@ boolean haveMappedSerials; void mapMostRecentAtomSerialNumber() { - // from ?? - if (atomCount == 0) + // from ?? + if (atomCount == 0) return; - int index = atomCount - 1; - int atomSerial = atoms[index].atomSerial; - if (atomSerial != Integer.MIN_VALUE) - atomSymbolicMap.put(new Integer(atomSerial), new Integer(index)); - haveMappedSerials = true; + int index = atomCount - 1; + int atomSerial = atoms[index].atomSerial; + if (atomSerial != Integer.MIN_VALUE) + atomSymbolicMap.put(new Integer(atomSerial), new Integer(index)); + haveMappedSerials = true; } public void createAtomSerialMap() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ni...@us...> - 2010-08-06 20:37:32
|
Revision: 13876 http://jmol.svn.sourceforge.net/jmol/?rev=13876&view=rev Author: nicove Date: 2010-08-06 20:37:24 +0000 (Fri, 06 Aug 2010) Log Message: ----------- Java 1.5 : Replacing Hashtable/HashMap by Map where possible Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/BasisFunctionReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/DgridReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessUKReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/MoldenReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/PsiReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/SlaterReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanArchive.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanSmolReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/WebMOReader.java trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlChem3dReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/CifReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -28,6 +28,7 @@ import org.jmol.api.JmolLineReader; import java.util.Hashtable; +import java.util.Map; import org.jmol.util.CifDataReader; import org.jmol.util.Logger; @@ -66,7 +67,7 @@ private String thisFormula = ""; private boolean iHaveDesiredModel; private boolean isPDB = false; - private Hashtable<String, String> htHetero; + private Map<String, String> htHetero; @Override public void initializeReader() throws Exception { @@ -397,7 +398,7 @@ //////////////////////////////////////////////////////////////// - private Hashtable<String, Float> atomTypes; + private Map<String, Float> atomTypes; final private static byte ATOM_TYPE_SYMBOL = 0; final private static byte ATOM_TYPE_OXIDATION_NUMBER = 1; @@ -1147,7 +1148,7 @@ */ //private int siteNum; - private Hashtable<String, Hashtable<String, Object>> htSites; + private Map<String, Map<String, Object>> htSites; /** * @@ -1169,8 +1170,8 @@ String chainID = ""; String resID = ""; String group = ""; - Hashtable<String, Object> htSite = null; - htSites = new Hashtable<String, Hashtable<String, Object>>(); + Map<String, Object> htSite = null; + htSites = new Hashtable<String, Map<String, Object>>(); while (tokenizer.getData()) { for (int i = 0; i < tokenizer.fieldCount; ++i) { switch (fieldProperty(i)) { Modified: trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/cifpdb/PdbReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -35,6 +35,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; import javax.vecmath.Matrix4f; @@ -64,11 +65,11 @@ private int lineLength; // index into atoms array + 1 // so that 0 can be used for the null value - private final Hashtable<String, Hashtable<String, Boolean>> htFormul = new Hashtable<String, Hashtable<String, Boolean>>(); - private Hashtable<String, String> htHetero = null; - private Hashtable<String, Hashtable<String, Object>> htSites = null; + private final Map<String, Map<String, Boolean>> htFormul = new Hashtable<String, Map<String, Boolean>>(); + private Map<String, String> htHetero = null; + private Map<String, Map<String, Object>> htSites = null; private String currentGroup3; - private Hashtable<String, Boolean> htElementsInCurrentGroup; + private Map<String, Boolean> htElementsInCurrentGroup; private int maxSerial; private int[] chainAtomCounts; private int nUNK; @@ -261,18 +262,18 @@ atomSetCollection.setAtomSetCollectionAuxiliaryInfo("CLASSIFICATION", line.substring(7).trim()); } - private List<Hashtable<String, String>> vCompnds; - private Hashtable<String, String> currentCompnd; + private List<Map<String, String>> vCompnds; + private Map<String, String> currentCompnd; private String currentKey; - private Hashtable<String, Hashtable<String, String>> htMolIds; + private Map<String, Map<String, String>> htMolIds; private boolean resetKey = true; private void compndSource(boolean isSource) { if (vCompnds == null) { if (isSource) return; - vCompnds = new ArrayList<Hashtable<String,String>>(); - htMolIds = new Hashtable<String, Hashtable<String,String>>(); + vCompnds = new ArrayList<Map<String,String>>(); + htMolIds = new Hashtable<String, Map<String,String>>(); currentCompnd = new Hashtable<String, String>(); currentCompnd.put("select", "(*)"); currentKey = "MOLECULE"; @@ -324,7 +325,7 @@ @SuppressWarnings("unchecked") private void setBiomoleculeAtomCounts() { for (int i = biomolecules.size(); --i >= 0;) { - Hashtable<String, Object> biomolecule = biomolecules.get(i); + Map<String, Object> biomolecule = biomolecules.get(i); String chain = (String) biomolecule.get("chains"); int nTransforms = ((List<Matrix4f>) biomolecule.get("biomts")).size(); int nAtoms = 0; @@ -368,18 +369,18 @@ */ - private List<Hashtable<String, Object>> biomolecules; + private List<Map<String, Object>> biomolecules; private List<Matrix4f> biomts; private void remark350() throws Exception { List<Matrix4f> biomts = null; - biomolecules = new ArrayList<Hashtable<String,Object>>(); + biomolecules = new ArrayList<Map<String,Object>>(); chainAtomCounts = new int[255]; String title = ""; String chainlist = ""; int iMolecule = 0; boolean needLine = true; - Hashtable<String, Object> info = null; + Map<String, Object> info = null; int nBiomt = 0; Matrix4f mIdent = new Matrix4f(); mIdent.setIdentity(); @@ -838,7 +839,7 @@ return; // invalid formula; formula = parseTrimmed(formula, ichLeftParen + 1, ichRightParen); } - Hashtable<String, Boolean> htElementsInGroup = htFormul.get(groupName); + Map<String, Boolean> htElementsInGroup = htFormul.get(groupName); if (htElementsInGroup == null) htFormul.put(groupName, htElementsInGroup = new Hashtable<String, Boolean>()); // now, look for atom names in the formula @@ -1002,12 +1003,12 @@ private void site() { if (htSites == null) { - htSites = new Hashtable<String, Hashtable<String, Object>>(); + htSites = new Hashtable<String, Map<String, Object>>(); } //int seqNum = parseInt(line, 7, 10); int nResidues = parseInt(line, 15, 17); String siteID = parseTrimmed(line, 11, 14); - Hashtable<String, Object> htSite = htSites.get(siteID); + Map<String, Object> htSite = htSites.get(siteID); if (htSite == null) { htSite = new Hashtable<String, Object>(); //htSite.put("seqNum", "site_" + seqNum); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/AdfReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -31,9 +31,9 @@ //import org.jmol.util.Escape; import java.util.ArrayList; -import java.util.Enumeration; import java.util.Hashtable; import java.util.List; +import java.util.Map; /** * @@ -67,7 +67,7 @@ public class AdfReader extends SlaterReader { - private Hashtable<String, SymmetryData> htSymmetries; + private Map<String, SymmetryData> htSymmetries; private List<SymmetryData> vSymmetries; private String energy = null; private int nXX = 0; @@ -250,7 +250,7 @@ int nSFO; int nBF; float[][] coefs; - Hashtable<String, Object>[] mos; + Map<String, Object>[] mos; int[] basisFunctions; public SymmetryData(int index, String sym) { Logger.info("ADF reader creating SymmetryData " + sym + " " + index); @@ -386,7 +386,7 @@ } } for (int i = 0; i < sd.nSFO; i++) { - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); mo.put("coefficients", sd.coefs[i]); //System.out.println(i + " " + Escape.escapeArray(sd.coefs[i])); mo.put("id", sym + " " + (i + 1)); @@ -415,11 +415,10 @@ float energy = parseFloat(tokens[len - 1]); // eV sd = htSymmetries.get(sym); if (sd == null) { - Enumeration<String> e = htSymmetries.keys(); - while (e.hasMoreElements()) { - String symfull = e.nextElement(); + for (Map.Entry<String, SymmetryData> entry : htSymmetries.entrySet()) { + String symfull = entry.getKey(); if (symfull.startsWith(sym + ":")) - addMo(htSymmetries.get(symfull), moPt, (occ > 2 ? 2 : occ), energy); + addMo(entry.getValue(), moPt, (occ > 2 ? 2 : occ), energy); } } else { addMo(sd, moPt, occ, energy); @@ -434,7 +433,7 @@ } private void addMo(SymmetryData sd, int moPt, float occ, float energy) { - Hashtable<String, Object> mo = sd.mos[moPt - 1]; + Map<String, Object> mo = sd.mos[moPt - 1]; mo.put("occupancy", new Float(occ)); mo.put("energy", new Float(energy)); //eV mo.put("symmetry", sd.sym + "_" + moPt); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/BasisFunctionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/BasisFunctionReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/BasisFunctionReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -31,6 +31,7 @@ import java.util.Arrays; import java.util.Hashtable; import java.util.List; +import java.util.Map; /** @@ -39,14 +40,14 @@ */ abstract class BasisFunctionReader extends AtomSetCollectionReader { - protected Hashtable<String, Object> moData = new Hashtable<String, Object>(); - protected List<Hashtable<String, Object>> orbitals = new ArrayList<Hashtable<String, Object>>(); + protected Map<String, Object> moData = new Hashtable<String, Object>(); + protected List<Map<String, Object>> orbitals = new ArrayList<Map<String, Object>>(); protected int nOrbitals = 0; protected int[][] dfCoefMaps; - protected void setMO(Hashtable<String, Object> mo) { + protected void setMO(Map<String, Object> mo) { if (dfCoefMaps != null) mo.put("dfCoefMaps", dfCoefMaps); orbitals.add(mo); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/CsfReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; import org.jmol.util.Logger; import org.jmol.util.Parser; @@ -56,7 +57,7 @@ private int nGaussians = 0; private int nSlaters = 0; - private Hashtable<String, Bond> htBonds; + private Map<String, Bond> htBonds; @Override protected boolean checkLine() throws Exception { @@ -118,7 +119,7 @@ ); } - private Hashtable<String, Integer> propertyItemCounts = new Hashtable<String, Integer>(); + private Map<String, Integer> propertyItemCounts = new Hashtable<String, Integer>(); private final int[] fieldTypes = new int[100]; // should be enough private int getPropertyCount(String what) { @@ -198,7 +199,7 @@ objCls1, objID1, objCls2, objID2 }; - private Hashtable<String, int[]> connectors; + private Map<String, int[]> connectors; private void processConnectorObject() throws Exception { connectors = new Hashtable<String, int[]>(); @@ -568,7 +569,7 @@ for (int i = 0; i < nOrbitals; i++) if (Math.abs(list[iMo][i]) < MIN_COEF) list[iMo][i] = 0; - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); mo.put("energy", new Float(energy[iMo])); mo.put("occupancy", new Float(occupancy[iMo])); mo.put("coefficients", list[iMo]); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/DgridReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/DgridReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/DgridReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -29,6 +29,7 @@ import org.jmol.util.Logger; import java.util.Hashtable; +import java.util.Map; /** * A reader for Dgrid BASISFILE data. http://www.scm.com/News/DGrid.html @@ -94,7 +95,7 @@ } } - Hashtable<String, Float> htExponents = new Hashtable<String, Float>(); + Map<String, Float> htExponents = new Hashtable<String, Float>(); private void readSlaterBasis() throws Exception { /* : +--------------------------+ @@ -127,7 +128,7 @@ } } - private Hashtable<String, Integer> htFuncMap; + private Map<String, Integer> htFuncMap; private void readMolecularOrbitals() throws Exception { /* sym: A1 1 1s 2 1s 3 1s 4 1s 5 1s @@ -185,7 +186,7 @@ int pt = ptSlater[i]; list[pt] = parseFloat(tokens[i]); } - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); mo.put("energy", new Float(energy)); mo.put("coefficients", list); mo.put("symmetry", symmetry + "_" + iOrb); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; import org.jmol.api.JmolAdapter; import org.jmol.util.Logger; @@ -48,7 +49,7 @@ discardLinesUntilContains(initiator); readLine(); int[] slater = null; - Hashtable<String, List<int[]>> shellsByAtomType = new Hashtable<String, List<int[]>>(); + Map<String, List<int[]>> shellsByAtomType = new Hashtable<String, List<int[]>>(); List<int[]> slatersByAtomType = new ArrayList<int[]>(); String atomType = null; @@ -233,7 +234,7 @@ - private Hashtable<String, String> calcOptions; + private Map<String, String> calcOptions; private boolean isTypeSet; protected void setCalculationType() { Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessUKReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessUKReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GamessUKReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -27,8 +27,8 @@ import org.jmol.adapter.smarter.*; import java.util.ArrayList; -import java.util.Hashtable; import java.util.List; +import java.util.Map; public class GamessUKReader extends GamessReader { @@ -208,7 +208,7 @@ if (symmetries.size() < orbitals.size()) return; for (int i = orbitals.size(); --i >= 0; ) { - Hashtable<String, Object> mo = orbitals.get(i); + Map<String, Object> mo = orbitals.get(i); mo.put("symmetry", symmetries.get(i)); mo.put("occupancy", occupancies.get(i)); } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GaussianReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; import javax.vecmath.Vector3f; @@ -389,7 +390,7 @@ private void readMolecularOrbitals() throws Exception { if (shells == null) return; - Hashtable<String, Object>[] mos = new Hashtable[5]; + Map<String, Object>[] mos = new Hashtable[5]; List<String>[] data = new ArrayList[5]; int nThisLine = 0; while (readLine() != null Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -32,6 +32,7 @@ import java.io.StringReader; import java.util.ArrayList; import java.util.Hashtable; +import java.util.Map; /** * NBO file nn reader will pull in other files as necessary @@ -331,13 +332,13 @@ Logger.info(sb.toString()); tokens = getTokens(sb.toString()); for (int i = 0; i < tokens.length; i++) { - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); setMO(mo); } if (ntype.equals("MO")) return true; // no labels here for (int i = 0; i < tokens.length; i++) { - Hashtable<String, Object> mo = orbitals.get(i); + Map<String, Object> mo = orbitals.get(i); String type = tokens[i]; mo.put("type", moType + " " + type); // TODO: does not account for SOMO @@ -352,7 +353,7 @@ int nAOs = nOrbitals; nOrbitals = orbitals.size(); for (int i = 0; i < nOrbitals; i++) { - Hashtable<String, Object> mo = orbitals.get(i); + Map<String, Object> mo = orbitals.get(i); float[] coefs = new float[nAOs]; mo.put("coefficients", coefs); if (isMO) Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/JaguarReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; /** * Jaguar reader tested for the two samples files in CVS. Both @@ -313,7 +314,7 @@ fillDataBlock(dataBlock); for (int iOrb = 0; iOrb < n; iOrb++) { float[] coefs = new float[moCount]; - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); float energy = parseFloat(eigenValues[iOrb + 1]); mo.put("energy", new Float(energy)); if (Math.abs(energy - lumoEnergy) < 0.0001) { Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/MOReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; /** * General methods for reading molecular orbital data, @@ -320,11 +321,11 @@ // and these will replace previous results. // we still need atom positions and bases functions. if (haveNboOrbitals) { - orbitals = new ArrayList<Hashtable<String,Object>>(); + orbitals = new ArrayList<Map<String,Object>>(); alphaBeta = ""; } haveNboOrbitals = true; - Hashtable<String, Object>[] mos = null; + Map<String, Object>[] mos = null; List<String>[] data = null; String dCoeffLabels = ""; String fCoeffLabels = ""; @@ -477,7 +478,7 @@ dfCoefMaps = null; } - protected void getMOHeader(int headerType, String[] tokens, Hashtable<String, Object>[] mos, int nThisLine) + protected void getMOHeader(int headerType, String[] tokens, Map<String, Object>[] mos, int nThisLine) throws Exception { readLine(); switch (headerType) { @@ -523,7 +524,7 @@ } } - protected void addMOData(int nColumns, List<String>[] data, Hashtable<String, Object>[] mos) { + protected void addMOData(int nColumns, List<String>[] data, Map<String, Object>[] mos) { for (int i = 0; i < nColumns; i++) { float[] coefs = new float[data[i].size()]; for (int j = coefs.length; --j >= 0;) @@ -543,7 +544,7 @@ setMOData(moData); } if (clearOrbitals) { - orbitals = new ArrayList<Hashtable<String, Object>>(); + orbitals = new ArrayList<Map<String, Object>>(); moData = new Hashtable<String, Object>(); alphaBeta = ""; } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/MoldenReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MoldenReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/MoldenReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; import java.util.NoSuchElementException; import org.jmol.api.JmolAdapter; @@ -193,7 +194,7 @@ String[] tokens = getTokens(); while (tokens != null && line.indexOf('[') < 0) { - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); List<String> data = new ArrayList<String>(); float energy = Float.NaN; float occupancy = Float.NaN; Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -26,6 +26,7 @@ import org.jmol.adapter.smarter.*; import java.util.Hashtable; +import java.util.Map; /** @@ -184,7 +185,7 @@ // read MO energies and occupancies, and fill "coefficients" element float[] values = new float[2]; for (int iMo = 0; iMo < nOrbitals; iMo++) { - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); if (readLine() != null) { getTokensFloat(line, values, 2); mo.put("energy", new Float(values[0])); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/PsiReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/PsiReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/PsiReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; import org.jmol.api.JmolAdapter; import org.jmol.util.Logger; @@ -246,7 +247,7 @@ */ - Hashtable<String, Integer> uniqueAtomMap = new Hashtable<String, Integer>(); + Map<String, Integer> uniqueAtomMap = new Hashtable<String, Integer>(); private void readUniqueAtoms() throws Exception { List<int[]> sdata = new ArrayList<int[]>(); discardLinesUntilContains("----"); @@ -381,7 +382,7 @@ //TODO: This reader will fail for G orbitals //TODO: No way to check order - Hashtable<String, Object>[] mos = new Hashtable[5]; + Map<String, Object>[] mos = new Hashtable[5]; List<String>[] data = new ArrayList[5]; int nThisLine = 0; while (readLine() != null && line.toUpperCase().indexOf("DENS") < 0) { Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/QchemReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; /** * A reader for Q-Chem 2.1 and 3.2 @@ -573,7 +574,7 @@ * */ int nMOs; // total number of MOs that were read - List<Hashtable<String, Object>> orbitals = new ArrayList<Hashtable<String,Object>>(); + List<Map<String, Object>> orbitals = new ArrayList<Map<String,Object>>(); String orbitalType = getTokens(line)[0]; // is RESTRICTED or ALPHA nMOs = readMOs(orbitalType.equals("RESTRICTED"), orbitals, alphas); if (orbitalType.equals("ALPHA")) { // we also have BETA orbitals.... @@ -615,8 +616,8 @@ boolean fSpherical = false; private int readMOs(boolean restricted, - List<Hashtable<String, Object>> orbitals, MOInfo[] moInfos) throws Exception { - Hashtable<String, Object>[] mos = new Hashtable[6]; // max 6 MO's per line + List<Map<String, Object>> orbitals, MOInfo[] moInfos) throws Exception { + Map<String, Object>[] mos = new Hashtable[6]; // max 6 MO's per line float[][] mocoef = new float[6][]; // coefficients for each MO int[] moid = new int[6]; // mo numbers String[] tokens, energy; Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/SlaterReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/SlaterReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/SlaterReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -30,8 +30,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; -import java.util.Hashtable; import java.util.List; +import java.util.Map; /** * @@ -134,7 +134,7 @@ protected void sortOrbitalCoefficients(int[] pointers) { // now sort the coefficients as well for (int i = orbitals.size(); --i >= 0; ) { - Hashtable<String, Object> mo = orbitals.get(i); + Map<String, Object> mo = orbitals.get(i); float[] coefs = (float[]) mo.get("coefficients"); float[] sorted = new float[pointers.length]; for (int j = 0; j < pointers.length; j++) { @@ -154,15 +154,15 @@ */ protected void sortOrbitals() { - Hashtable<String, Object>[] array = orbitals.toArray(new Hashtable[0]); + Map<String, Object>[] array = orbitals.toArray(new Map[0]); Arrays.sort(array, new OrbitalSorter()); orbitals.clear(); for (int i = 0; i < array.length; i++) orbitals.add(array[i]); } - class OrbitalSorter implements Comparator<Hashtable<String, Object>> { - public int compare(Hashtable<String, Object> mo1, Hashtable<String, Object> mo2) { + class OrbitalSorter implements Comparator<Map<String, Object>> { + public int compare(Map<String, Object> mo1, Map<String, Object> mo2) { float e1 = ((Float) mo1.get("energy")).floatValue(); float e2 = ((Float) mo2.get("energy")).floatValue(); return ( e1 < e2 ? -1 : e2 < e1 ? 1 : 0); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanArchive.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanArchive.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanArchive.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -31,6 +31,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Hashtable; +import java.util.Map; + import javax.vecmath.Vector3f; import org.jmol.util.Logger; @@ -54,23 +56,23 @@ private AtomSetCollection atomSetCollection; private AtomSetCollectionReader r; - private Hashtable<String, Object> moData; - private List<Hashtable<String, Object>> orbitals = new ArrayList<Hashtable<String,Object>>(); + private Map<String, Object> moData; + private List<Map<String, Object>> orbitals = new ArrayList<Map<String,Object>>(); SpartanArchive(AtomSetCollectionReader r, - AtomSetCollection atomSetCollection, Hashtable<String, Object> moData) { + AtomSetCollection atomSetCollection, Map<String, Object> moData) { initialize(r, atomSetCollection, moData, ""); } SpartanArchive(AtomSetCollectionReader r, - AtomSetCollection atomSetCollection, Hashtable<String, Object> moData, String bondData, String endCheck) { + AtomSetCollection atomSetCollection, Map<String, Object> moData, String bondData, String endCheck) { initialize(r, atomSetCollection, moData, bondData); this.endCheck = endCheck; } private void initialize(AtomSetCollectionReader r, AtomSetCollection atomSetCollection, - Hashtable<String, Object> moData, String bondData) { + Map<String, Object> moData, String bondData) { this.r = r; this.atomSetCollection = atomSetCollection; this.moData = moData; @@ -302,7 +304,7 @@ } } for (int i = 0; i < moCount; i++) { - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); mo.put("energy", Float.valueOf(energies[i])); //mo.put("occupancy", new Float(-1)); mo.put("coefficients", coefficients[i]); @@ -411,7 +413,7 @@ String label = ""; int frequencyCount = parseInt(line); List<List<List<Float>>> vibrations = new ArrayList<List<List<Float>>>(); - List<Hashtable<String, Object>> freqs = new ArrayList<Hashtable<String,Object>>(); + List<Map<String, Object>> freqs = new ArrayList<Map<String,Object>>(); if (Logger.debugging) { Logger.debug("reading VIBFREQ vibration records: frequencyCount = " + frequencyCount); @@ -425,7 +427,7 @@ addBonds(bondData, atomCount0); } readLine(); - Hashtable<String, Object> info = new Hashtable<String, Object>(); + Map<String, Object> info = new Hashtable<String, Object>(); float freq = parseFloat(line); info.put("freq", new Float(freq)); if (line.length() > 15 @@ -481,7 +483,7 @@ List<Float> freq_val = (List<Float>) atomSetCollection.getAtomSetCollectionAuxiliaryInfo("FREQ_VAL"); int frequencyCount = freq_val.size(); List<List<List<Float>>> vibrations = new ArrayList<List<List<Float>>>(); - List<Hashtable<String, Object>> freqs = new ArrayList<Hashtable<String,Object>>(); + List<Map<String, Object>> freqs = new ArrayList<Map<String,Object>>(); if (Logger.debugging) { Logger.debug( "reading PROP VALUE:VIB FREQ_MODE vibration records: frequencyCount = " + frequencyCount); @@ -491,7 +493,7 @@ int atomCount0 = atomSetCollection.getAtomCount(); atomSetCollection.cloneLastAtomSet(); addBonds(bondData, atomCount0); - Hashtable<String, Object> info = new Hashtable<String, Object>(); + Map<String, Object> info = new Hashtable<String, Object>(); info.put("freq", (v = freq_val.get(i))); float freq = v.floatValue(); String label = freq_lab.get(i); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -27,6 +27,7 @@ import org.jmol.adapter.smarter.*; import java.util.Hashtable; +import java.util.Map; /* * perhaps unnecessary ? I think this was for when all you had was @@ -45,7 +46,7 @@ public void initializeReader() throws Exception { String cartesianHeader = "Cartesian Coordinates (Ang"; if (isSpartanArchive(cartesianHeader)) { - Hashtable<String, Object> moData = new Hashtable<String, Object>(); + Map<String, Object> moData = new Hashtable<String, Object>(); SpartanArchive spartanArchive = new SpartanArchive(this, atomSetCollection, moData); int atomCount = spartanArchive.readArchive(line, true, 0, true); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanSmolReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanSmolReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/SpartanSmolReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -25,6 +25,7 @@ package org.jmol.adapter.readers.quantum; import java.util.Hashtable; +import java.util.Map; import org.jmol.util.Logger; @@ -156,13 +157,13 @@ } private String endCheck = "END Directory Entry "; - private Hashtable<String, Object> moData = new Hashtable<String, Object>(); + private Map<String, Object> moData = new Hashtable<String, Object>(); private String title; SpartanArchive spartanArchive; - Hashtable<String, String> titles; + Map<String, String> titles; private void readOutput() throws Exception { titles = new Hashtable<String, String>(); Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/WebMOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/WebMOReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/WebMOReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -30,6 +30,7 @@ import java.util.ArrayList; import java.util.Hashtable; import java.util.List; +import java.util.Map; import org.jmol.api.JmolAdapter; import org.jmol.util.Logger; @@ -326,7 +327,7 @@ } return; } - Hashtable<String, Object> mo = new Hashtable<String, Object>(); + Map<String, Object> mo = new Hashtable<String, Object>(); List<String> data = new ArrayList<String>(); float energy = parseFloat(readLine()); float occupancy = parseFloat(readLine()); Modified: trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlChem3dReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlChem3dReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/readers/xml/XmlChem3dReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -167,7 +167,7 @@ for (int x = 0; x < nPointsX; x++) voxelData[x][y][z] = parseFloat(tokens[pt++]); atomSetCollection.setVoxelData(voxelData); - Hashtable<String, Object> surfaceInfo = new Hashtable<String, Object>(); + Map<String, Object> surfaceInfo = new Hashtable<String, Object>(); surfaceInfo.put("surfaceDataType", "mo"); surfaceInfo.put("defaultCutoff", Float.valueOf((float) 0.01)); surfaceInfo.put("nCubeData", Integer.valueOf(nData)); Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-08-06 20:16:27 UTC (rev 13875) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-08-06 20:37:24 UTC (rev 13876) @@ -37,8 +37,6 @@ import java.io.OutputStream; import java.util.BitSet; -import java.util.Enumeration; -import java.util.Hashtable; import java.util.List; import java.util.Map; @@ -688,13 +686,12 @@ needToApplySymmetry = true; } - protected void addSites(Hashtable<String, Hashtable<String, Object>> htSites) { + protected void addSites(Map<String, Map<String, Object>> htSites) { atomSetCollection.setAtomSetAuxiliaryInfo("pdbSites", htSites); - Enumeration<String> e = htSites.keys(); String sites = ""; - while (e.hasMoreElements()) { - String name = e.nextElement(); - Hashtable<String, Object> htSite = htSites.get(name); + for (Map.Entry<String, Map<String, Object>> entry : htSites.entrySet()) { + String name = entry.getKey(); + Map<String, Object> htSite = entry.getValue(); char ch; for (int i = name.length(); --i >= 0; ) if (!Character.isLetterOrDigit(ch = name.charAt(i)) && ch != '\'') @@ -742,9 +739,9 @@ } @SuppressWarnings("unchecked") - public void setMOData(Hashtable<String, Object> moData) { + public void setMOData(Map<String, Object> moData) { atomSetCollection.setAtomSetAuxiliaryInfo("moData", moData); - List<Hashtable<String, Object>> orbitals = (List<Hashtable<String, Object>>) moData.get("mos"); + List<Map<String, Object>> orbitals = (List<Map<String, Object>>) moData.get("mos"); if (orbitals != null) Logger.info(orbitals.size() + " molecular orbitals read in model " + atomSetCollection.getAtomSetCount()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-11-24 17:36:17
|
Revision: 14702 http://jmol.svn.sourceforge.net/jmol/?rev=14702&view=rev Author: hansonr Date: 2010-11-24 17:36:11 +0000 (Wed, 24 Nov 2010) Log Message: ----------- version=12.1.24_dev # bug fix: Mopac MGF reader upgrade allows orbital subset Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspReader.java trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2010-11-24 17:34:43 UTC (rev 14701) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/GenNBOReader.java 2010-11-24 17:36:11 UTC (rev 14702) @@ -273,7 +273,7 @@ for (int j = 0; j < 5; j++) { readLine(); float[] temp = new float[gaussianCount]; - fillFloatArray(temp); + fillFloatArray(temp, null, 0); for (int i = 0; i < gaussianCount; i++) gaussians[i][j] = temp[i]; } @@ -357,7 +357,7 @@ float[] coefs = new float[nAOs]; mo.put("coefficients", coefs); if (isMO) - fillFloatArray(coefs); + fillFloatArray(coefs, null, 0); else coefs[i] = 1; } Modified: trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java 2010-11-24 17:34:43 UTC (rev 14701) +++ trunk/Jmol/src/org/jmol/adapter/readers/quantum/MopacGraphfReader.java 2010-11-24 17:36:11 UTC (rev 14702) @@ -147,6 +147,8 @@ private boolean isNewFormat; private ArrayList<float[]> orbitalData; + private ArrayList<String> orbitalInfo; + private void readMolecularOrbitals(boolean isBeta) throws Exception { // read mo coefficients @@ -158,43 +160,36 @@ float[][] list = null; readLine(); isNewFormat = (line.indexOf("ORBITAL") >= 0); - if (isNewFormat) + if (isNewFormat) { orbitalData = new ArrayList<float[]>(); - else + if (line.length() > 10) + orbitalInfo = new ArrayList<String>(); + } else { list = new float[nCoefficients][nCoefficients]; + } for (int iMo = 0; iMo < nCoefficients; iMo++) { - int n = 0; if (iMo != 0) readLine(); float[] data; if (isNewFormat) { - if (line.indexOf("ORBITAL") < 0 || line.indexOf("ORBITAL_LIST") >= 0) + if (line == null || line.indexOf("ORBITAL") < 0 || line.indexOf("ORBITAL_LIST") >= 0) break; orbitalData.add(data = new float[nCoefficients]); + if (orbitalInfo != null) + orbitalInfo.add(line); readLine(); } else { data = list[iMo]; } - for (int i = 0; i < nCoefficients; i++) { - if (i != 0 && (n = (n + 1) % 5) == 0) - readLine(); - data[i] = parseFloat(line.substring(n * 15, (n + 1) * 15)); - } + fillFloatArray(data, line, 15); } - if (!isBeta) { + if (invMatrix == null) { if (isNewFormat && line.indexOf("MATRIX") < 0) readLine(); // read lower triangle of symmetric inverse sqrt matrix and multiply - invMatrix = new float[nCoefficients][nCoefficients]; - for (int iMo = 0; iMo < nCoefficients; iMo++) { - int n = -1; - for (int i = 0; i < iMo + 1; i++) { - if ((n = (n + 1) % 5) == 0) - readLine(); - invMatrix[iMo][i] = invMatrix[i][iMo] = parseFloat(line.substring( - n * 15, (n + 1) * 15)); - } - } + invMatrix = new float[nCoefficients][]; + for (int iMo = 0; iMo < nCoefficients; iMo++) + fillFloatArray(invMatrix[iMo] = new float[iMo + 1], null, 15); } nOrbitals = (orbitalData == null ? nCoefficients : orbitalData.size()); if (orbitalData != null) { @@ -206,7 +201,7 @@ for (int i = 0; i < nOrbitals; i++) for (int j = 0; j < nCoefficients; j++) { for (int k = 0; k < nCoefficients; k++) - list2[i][j] += (list[i][k] * invMatrix[k][j]); + list2[i][j] += (list[i][k] * (k >= j ? invMatrix[k][j] : invMatrix[j][k])); if (Math.abs(list2[i][j]) < MIN_COEF) list2[i][j] = 0; } @@ -221,12 +216,17 @@ */ // read MO energies and occupancies, and fill "coefficients" element - if (isNewFormat && line.indexOf("ORBITAL_LIST") < 0) + if (isNewFormat && orbitalInfo == null && line != null && line.indexOf("ORBITAL_LIST") < 0) readLine(); float[] values = new float[2]; for (int iMo = 0; iMo < nOrbitals; iMo++) { Map<String, Object> mo = new Hashtable<String, Object>(); - if (readLine() != null) { + if (orbitalInfo != null) { + line = orbitalInfo.get(iMo); + String[] tokens = getTokens(); + mo.put("energy", new Float(parseFloat(tokens[3]))); + mo.put("occupancy", new Float(parseFloat(tokens[1]))); + } else if (readLine() != null) { getTokensFloat(line, values, 2); mo.put("energy", new Float(values[0])); mo.put("occupancy", new Float(values[1])); Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-11-24 17:34:43 UTC (rev 14701) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/CrystalReader.java 2010-11-24 17:36:11 UTC (rev 14702) @@ -296,7 +296,7 @@ private Vector3f getPoint3f(float[] f, int pt) throws Exception { if (f == null) { f = new float[3]; - fillFloatArray(f); + fillFloatArray(f, null, 0); return new Vector3f(f[0], f[1], f[2]); } return new Vector3f(f[pt++], f[pt++], f[pt]); @@ -312,7 +312,7 @@ Matrix3f primitiveToCryst; private void readTransformationMatrix() throws Exception { float[] f = new float[9]; - fillFloatArray(f); + fillFloatArray(f, null, 0); primitiveToCryst = new Matrix3f(f); } Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspReader.java 2010-11-24 17:34:43 UTC (rev 14701) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/VaspReader.java 2010-11-24 17:36:11 UTC (rev 14702) @@ -181,7 +181,7 @@ atomSetCollection.newAtomSet(); setAtomSetInfo(); } - fillFloatArray(unitCellData); + fillFloatArray(unitCellData, null, 0); setUnitCell(); } Modified: trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-11-24 17:34:43 UTC (rev 14701) +++ trunk/Jmol/src/org/jmol/adapter/smarter/AtomSetCollectionReader.java 2010-11-24 17:36:11 UTC (rev 14702) @@ -904,14 +904,25 @@ /** * fills a float array with string data from a file * @param temp + * @param line0 TODO + * @param width TODO * @throws Exception */ - protected void fillFloatArray(float[] temp) throws Exception { + protected void fillFloatArray(float[] temp, String line0, int width) throws Exception { String[] tokens = new String[0]; int pt = 0; for (int i = 0; i < temp.length; i++) { while (tokens != null && pt >= tokens.length) { - tokens = getTokens(readLine()); + if (line0 == null) + line0 = readLine(); + if (width == 0) { + tokens = getTokens(line0); + } else { + tokens = new String[line0.length() / width]; + for (int j = 0; j < tokens.length; j++) + tokens[j] = line0.substring(j * width, (j + 1) * width); + } + line0 = null; pt = 0; } if (tokens == null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pie...@us...> - 2010-12-17 12:07:29
|
Revision: 14794 http://jmol.svn.sourceforge.net/jmol/?rev=14794&view=rev Author: pierocanepa Date: 2010-12-17 12:07:23 +0000 (Fri, 17 Dec 2010) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Added Paths: ----------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/GulpReader.java Added: trunk/Jmol/src/org/jmol/adapter/readers/xtal/GulpReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/GulpReader.java (rev 0) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/GulpReader.java 2010-12-17 12:07:23 UTC (rev 14794) @@ -0,0 +1,329 @@ +package org.jmol.adapter.readers.xtal; + +import org.jmol.adapter.smarter.Atom; +import org.jmol.adapter.smarter.AtomSetCollectionReader; +import org.jmol.util.TextFormat; + +/** + * https://projects.ivec.org/gulp/ + * @author Pieremanuele Canepa, Room 104, FM Group School of Physical Sciences, + * Ingram Building, University of Kent, Canterbury, Kent, CT2 7NH United + * Kingdom, pc...@ke... + * + * @version 1.0 + */ + +public class GulpReader extends AtomSetCollectionReader { + + private int atomNumbers; + private String spaceGroup; + private boolean gulpVersion4 = false; + private boolean isSlab; + private boolean isPolymer; + private boolean isMolecular; + private boolean isCrystal; + + @Override + protected void initializeReader() throws Exception { + discardLinesUntilContains("* Version ="); + readGulpVersion(); + setFractionalCoordinates(readType()); + } + + @Override + protected boolean checkLine() throws Exception { + if (line.contains("Space group ")) { + readSpaceGroup(); + } else if (line.contains("Cell parameters (Angstroms/Degrees):") + || line.contains(" Primitive cell parameters :")) { + readCellParameters(); + // } else if (line.contains("Final cell parameters and derivatives")) { + // readFinalCell(); + } else if (line.contains("Fractional coordinates of asymmetric unit :") + || line.contains("Final fractional coordinates of atoms :") + || line.contains("Final asymmetric unit coordinates") + || line.contains("Final fractional coordinates ")) { + readAtomicPos(); + } else if ((line.contains("Cartesian coordinates of cluster ") || line.contains(" Final cartesian coordinates of atoms :")) && isMolecular){ + readAtomicPos(); + } else if (line.contains("Monopole - monopole (total)")) { + readEnergy(); + //} else if (line.contains(" Phonon Calculation : ")) { + // readFrequency(); + } + return true; + } + + private void readGulpVersion() { + ///* Version = 3.0.1 * Last modified = 11th April 2006 + ///* Version = 3.4.7 .... + line = TextFormat.simpleReplace(line, ".", " "); + String[] tokens = getTokens(line.substring(line.indexOf("=") + 1)); + int rel = parseInt(tokens[1]); + if (rel == 4) + gulpVersion4 = true; + } + + private boolean readType() throws Exception { + discardLinesUntilContains("Dimensionality"); + String[] tokens = getTokens(line.substring(line.indexOf("=") + 1)); + int dimenStruc = parseInt(tokens[0]); + + if (dimenStruc == 3) { + isCrystal = true; + } else if (dimenStruc == 2) { + isSlab = true; + } else if (dimenStruc == 1) { + isPolymer = true; + } else if (dimenStruc == 0) { + isMolecular = true; + return false; + } + return true; + } + + private void readSpaceGroup() throws Exception { + spaceGroup = line.substring(line.indexOf(":") + 1); + setSpaceGroupName(spaceGroup); + applySymmetryAndSetTrajectory(); + } + + /* Cell parameters (Angstroms/Degrees): + + a = 4.9147 alpha = 90.0000 + b = 4.9147 beta = 90.0000 + c = 5.4066 gamma = 120.0000 + + */ + private float a, b, c, alpha, beta, gamma; + + private void readCellParameters() throws Exception { + discardLines(1); + readLine(); + String[] tokens = getTokens(); + a = parseFloat(tokens[2]); + alpha = parseFloat(tokens[5]); + tokens = getTokens(readLine()); + b = parseFloat(tokens[2]); + beta = parseFloat(tokens[5]); + tokens = getTokens(readLine()); + c = parseFloat(tokens[2]); + gamma = parseFloat(tokens[5]); + setUnitCell(a, b, c, alpha, beta, gamma); + } + + /* Final cell parameters and derivatives : + + -------------------------------------------------------------------------------- + a 5.378431 Angstrom dE/de1(xx) -0.004901 eV/strain + b 5.378431 Angstrom dE/de2(yy) -0.001887 eV/strain + c 5.378431 Angstrom dE/de3(zz) -0.001281 eV/strain + alpha 55.964422 Degrees dE/de4(yz) -0.000778 eV/strain + beta 55.964422 Degrees dE/de5(xz) -0.001486 eV/strain + gamma 55.964422 Degrees dE/de6(xy) -0.002174 eV/strain + -------------------------------------------------------------------------------- + */ + + private void readFinalCell() throws Exception { + discardLines(3); + String[] tokens = getTokens(); + a = parseFloat(tokens[2]); + tokens = getTokens(readLine()); + b = parseFloat(tokens[2]); + tokens = getTokens(readLine()); + c = parseFloat(tokens[2]); + tokens = getTokens(readLine()); + alpha = parseFloat(tokens[2]); + tokens = getTokens(readLine()); + beta = parseFloat(tokens[2]); + tokens = getTokens(readLine()); + gamma = parseFloat(tokens[2]); + setUnitCell(a, b, c, alpha, beta, gamma); + applySymmetryAndSetTrajectory(); + } + + /* Fractional coordinates of asymmetric unit : + + -------------------------------------------------------------------------------- + No. Atomic x y z Charge Occupancy + Label (Frac) (Frac) (Frac) (e) (Frac) + -------------------------------------------------------------------------------- + 1 Ba c 0.572390 0.144780 0.144780 0.1690 1.000000 + 2 Ba c 0.677610 * 0.355219 * 0.355219 * 0.1690 1.000000 + 3 Fe c 0.822391 * 0.644781 * 0.644781 * 1.9710 1.000000 + 4 Fe c 0.927610 * 0.855219 * 0.855219 * 1.9710 1.000000 + 5 Fe c 0.072390 * 0.144780 * 0.144780 * 1.9710 1.000000 + 6 Fe c 0.177610 * 0.355219 * 0.355219 * 1.9710 1.000000 + 7 Fe c 0.322391 * 0.644781 * 0.644781 * 1.9710 1.000000 + 8 Fe c 0.427610 * 0.855219 * 0.855219 * 1.9710 1.000000 + 9 O c 0.778081 * 0.943838 * 0.250000 * 0.5130 1.000000 + */ + + private void readAtomicPos() throws Exception { + discardLines(5); + //atomSetCollection.newAtomSet(); + while (readLine() != null && line.indexOf("----------") < 0) { + //This if is when the line contains extra * + if (line.contains("*")) + line = TextFormat.simpleReplace(line, "*", " "); + if (line.contains("c")) { //It won't mix up carbon with c + String[] tokens = getTokens(); + Atom atom = atomSetCollection.addNewAtom(); + atom.atomName = tokens[1]; + float x = parseFloat(tokens[3]); + float y = parseFloat(tokens[4]); + float z = parseFloat(tokens[5]); + setAtomCoord(atom, x, y, z); + } + } + } + + + +/* + + Cartesian coordinates of cluster : + +-------------------------------------------------------------------------------- + No. Atomic x y z Charge Occupancy + Label (Angs) (Angs) (Angs) (e) (Frac) +-------------------------------------------------------------------------------- + 1 C1 c -2.3420 * 1.0960 * -0.0010 * -0.1819 1.000000 + 2 C1 c -1.0490 * 1.5890 * 0.0010 * -0.2684 1.000000 + 3 C2 c 0.0730 0.7330 -0.0010 0.0661 1.000000 + 4 C3 c -0.1850 * -0.6550 * -0.0030 * 0.1492 1.000000 + 5 C1 c -1.4790 * -1.1720 * -0.0050 * -0.1988 1.000000 + 6 C4 c -2.5770 * -0.3000 * -0.0040 * 0.2336 1.000000 + 7 H1 c -3.1860 * 1.7820 * -0.0070 * 0.1768 1.000000 + 8 H1 c -0.8980 * 2.6650 * 0.0030 * 0.1892 1.000000 + 9 C5 c 1.4540 * 1.1720 * 0.0010 * 0.1307 1.000000 + 10 H1 c -1.6110 * -2.2500 * -0.0110 * 0.1768 1.000000 + 11 C7 c 2.1730 * -1.1940 * 0.0010 * 0.7946 1.000000 + 12 C6 c 2.4410 * 0.2330 * 0.0020 * -0.4195 1.000000 + 13 H1 c 3.4910 * 0.5060 * 0.0030 * 0.1718 1.000000 + 14 O1 c 0.8280 * -1.5660 * -0.0020 * -0.3694 1.000000 + 15 O2 c 2.9950 * -2.0810 * 0.0040 * -0.6874 1.000000 + 16 C8 c 1.7830 * 2.6420 * 0.0020 * -0.2362 1.000000 + 17 H2 c 1.3640 * 3.1400 * -0.8810 * 0.0960 1.000000 + 18 H2 c 1.3630 * 3.1390 * 0.8850 * 0.0960 1.000000 + 19 H2 c 2.8640 * 2.7990 * 0.0020 * 0.0960 1.000000 + 20 N1 c -3.8700 * -0.7920 * -0.0560 * -0.8553 1.000000 + 21 H3 c -4.0140 * -1.7570 * 0.2000 * 0.4202 1.000000 + 22 H3 c -4.6160 * -0.1740 * 0.2260 * 0.4202 1.000000 +-------------------------------------------------------------------------------- + +*/ + + + private void readMoleculeCoord() throws Exception{ + discardLines(5); + while (readLine() != null && line.indexOf("----------") < 0) { + //This if is when the line contains extra * + if (line.contains("*")) + line = TextFormat.simpleReplace(line, "*", " "); + if (line.contains("c")) { //It won't mix up carbon with c + String[] tokens = getTokens(); + Atom atom = atomSetCollection.addNewAtom(); + atom.atomName = tokens[1]; + float x = parseFloat(tokens[3]); + float y = parseFloat(tokens[4]); + float z = parseFloat(tokens[5]); + setAtomCoord(atom, x, y, z); + } + } + } + /* + -------------------------------------------------------------------------------- + Total lattice energy = -386.17106576 eV + -------------------------------------------------------------------------------- + Total lattice energy = -37259.6047 kJ/(mole unit cells) + Total lattice energy = -8905.2592 kcal/(mole unit cells) + -------------------------------------------------------------------------------- + + + **** Optimisation achieved **** + + + Final energy = -557.53367977 eV + Final Gnorm = 0.00035566 + + */ + + private Double totEnergy; + + private void readEnergy() throws Exception { + discardLines(2); + if (gulpVersion4) + discardLines(1); + totEnergy = Double.valueOf(Double.parseDouble(line.substring(line + .indexOf("=") + 1, line.indexOf("eV") - 2))); + //this avoid the class to re-reading the Total lattice energy expressed in other units + //don't change it to larger or smaller value + discardLines(14); + setEnergy(); + } + + private void setEnergy() { + atomSetCollection.setAtomSetEnergy("" + totEnergy, totEnergy.floatValue()); + atomSetCollection.setAtomSetAuxiliaryInfo("Energy", totEnergy); + atomSetCollection.setAtomSetCollectionAuxiliaryInfo("Energy", totEnergy); + atomSetCollection.setAtomSetName("E = " + totEnergy + " eV"); + } + + /* + private void setAtomSetInfo(){ + + }*/ + + /* + Frequency 0.0000 0.0000 0.0000 133.9963 134.1490 227.2719 + IR Intensity 0.0000 0.0000 0.0000 0.0030 0.0030 0.0000 + in X 0.0000 0.0000 0.0000 0.0008 0.0023 0.0000 + in Y 0.0000 0.0000 0.0000 0.0023 0.0008 0.0000 + in Z 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 + Raman Intsty 0.0000 0.0000 0.0000 0.0000 0.0000 0.3276 + + 1 x 0.390326 -0.056775 -0.015611 -0.039949 0.069193 -0.305899 + 1 y 0.054908 0.388754 -0.040954 0.091620 0.052898 0.000000 + 1 z -0.021265 -0.038324 -0.392302 -0.013870 -0.008008 0.000000 + 2 x 0.390326 -0.056775 -0.015611 0.099320 -0.011213 0.152950 + 2 y 0.054908 0.388754 -0.040954 0.011214 -0.086372 -0.264916 + 2 z -0.021265 -0.038324 -0.392302 0.013870 -0.008007 0.000000 + 3 x 0.390326 -0.056775 -0.015611 -0.039948 -0.091621 0.152949 + 3 y 0.054908 0.388754 -0.040954 -0.069194 0.052897 0.264916 + 3 z -0.021265 -0.038324 -0.392302 0.000000 0.016016 0.000000 + 4 x 0.294586 -0.042849 -0.011782 -0.120330 0.243402 -0.030861 + 4 y 0.041440 0.293399 -0.030909 0.086109 0.358453 0.294237 + 4 z -0.016049 -0.028924 -0.296077 0.125378 0.314751 0.179865 + 5 x 0.294586 -0.042849 -0.011782 0.381440 0.203588 -0.239386 + 5 y 0.041440 0.293399 -0.030909 0.046295 -0.143317 -0.173845 + 5 z -0.016049 -0.028924 -0.296077 -0.335271 -0.048796 0.179865 + 6 x 0.294586 -0.042849 -0.011782 0.096075 -0.211051 0.270247 + 6 y 0.041440 0.293399 -0.030909 -0.368344 0.142048 -0.120392 + 6 z -0.016049 -0.028924 -0.296077 0.209894 -0.265956 0.179865 + 7 x 0.294586 -0.042849 -0.011782 -0.150630 0.225910 -0.030862 + 7 y 0.041440 0.293399 -0.030909 0.353487 -0.104649 -0.294238 + 7 z -0.016049 -0.028924 -0.296077 0.335275 -0.048791 -0.179865 + 8 x 0.294586 -0.042849 -0.011782 -0.367031 -0.228549 -0.239387 + 8 y 0.041440 0.293399 -0.030909 -0.100971 0.111751 0.173846 + 8 z -0.016049 -0.028924 -0.296077 -0.209891 -0.265961 -0.179865 + 9 x 0.294586 -0.042849 -0.011782 0.134742 -0.188728 0.270249 + 9 y 0.041440 0.293399 -0.030909 -0.061150 -0.390021 0.120392 + 9 z -0.016049 -0.028924 -0.296077 -0.125383 0.314752 -0.179865 + */ + /* + private void readFrequency() throws Exception { + discardLines(1); + readLine(); + + //for the time being it reads only phonons at the gamma point k (0, 0, 0) + if (line.contains("gamma")) { + discardLines(9); + if (line.contains("Frequency")) + ; + } else { + return; + } + } + */ +} Property changes on: trunk/Jmol/src/org/jmol/adapter/readers/xtal/GulpReader.java ___________________________________________________________________ Added: svn:mime-type + text/plain Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-12-17 04:15:22 UTC (rev 14793) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-12-17 12:07:23 UTC (rev 14794) @@ -52,7 +52,7 @@ "Molden;MopacGraphf;GenNBO;NWChem;Odyssey;Psi;Qchem;Spartan;SpartanSmol;" + "WebMO;", "simple.", ";Alchemy;Ampac;Cube;FoldingXyz;GhemicalMM;HyperChem;Jme;Mopac;V3000;", - "xtal.", ";Aims;Castep;Crystal;Shelx;VaspOutcar;Wien2k;" + "xtal.", ";Aims;Castep;Crystal;Gulp;Shelx;VaspOutcar;Wien2k;" }; public final static String getReaderClassBase(String type) { @@ -548,26 +548,27 @@ private final static int SPECIAL_AIMS = 11; private final static int SPECIAL_CRYSTAL = 12; private final static int SPECIAL_VASP = 13; - private final static int SPECIAL_GROMACS = 14; - private final static int SPECIAL_GENNBO = 15; + private final static int SPECIAL_GULP = 14; + private final static int SPECIAL_GROMACS = 15; + private final static int SPECIAL_GENNBO = 16; // these next are needed by the XML reader - public final static int SPECIAL_ARGUS_XML = 16; - public final static int SPECIAL_CML_XML = 17; - public final static int SPECIAL_CHEM3D_XML = 18; - public final static int SPECIAL_MOLPRO_XML = 19; - public final static int SPECIAL_ODYSSEY_XML = 20; - public final static int SPECIAL_XSD_XML = 21; - public final static int SPECIAL_VASP_XML = 22; + public final static int SPECIAL_ARGUS_XML = 17; + public final static int SPECIAL_CML_XML = 18; + public final static int SPECIAL_CHEM3D_XML = 19; + public final static int SPECIAL_MOLPRO_XML = 20; + public final static int SPECIAL_ODYSSEY_XML = 21; + public final static int SPECIAL_XSD_XML = 22; + public final static int SPECIAL_VASP_XML = 23; - public final static int SPECIAL_ARGUS_DOM = 23; - public final static int SPECIAL_CML_DOM = 24; - public final static int SPECIAL_CHEM3D_DOM = 25; - public final static int SPECIAL_MOLPRO_DOM = 26; - public final static int SPECIAL_ODYSSEY_DOM = 27; - public final static int SPECIAL_XSD_DOM = 28; // not implemented - public final static int SPECIAL_VASP_DOM = 29; + public final static int SPECIAL_ARGUS_DOM = 24; + public final static int SPECIAL_CML_DOM = 25; + public final static int SPECIAL_CHEM3D_DOM = 26; + public final static int SPECIAL_MOLPRO_DOM = 27; + public final static int SPECIAL_ODYSSEY_DOM = 28; + public final static int SPECIAL_XSD_DOM = 29; // not implemented + public final static int SPECIAL_VASP_DOM = 30; public final static String[][] specialTags = { { "Jme" }, @@ -586,6 +587,7 @@ { "Aims" }, { "Crystal" }, { "VaspOutcar" }, + { "Gulp" }, { "Gromacs" }, { "GenNBO" }, @@ -618,6 +620,8 @@ return specialTags[SPECIAL_CRYSTAL][0]; if (checkVasp(lines)) return specialTags[SPECIAL_VASP][0]; + if(checkGulp(lines)) + return specialTags[SPECIAL_GULP][0]; } if (nLines == 1 && lines[0].length() > 0 && Character.isDigit(lines[0].charAt(0))) @@ -679,7 +683,24 @@ } return false; } + + + private static boolean checkGulp(String[] lines) { + if (lines[2] + .startsWith("* GENERAL UTILITY LATTICE PROGRAM ")) + return true; + for (int i = 0; i < lines.length; i++) { + if (lines[i] + .startsWith("* GENERAL UTILITY LATTICE PROGRAM ")) { + return true; + } else if (lines[i].contains("Julian Gale")) { + return true; + } + } + return false; + } + private static boolean checkWien2k(String[] lines) { return (lines[2].startsWith("MODE OF CALC=") || lines[2].startsWith(" RELA") This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-12-17 22:29:37
|
Revision: 14813 http://jmol.svn.sourceforge.net/jmol/?rev=14813&view=rev Author: hansonr Date: 2010-12-17 22:29:28 +0000 (Fri, 17 Dec 2010) Log Message: ----------- version=12.1.26_dev # new feature: write MOL creates V2000 file # new feature: write SDF creates SDfile # new feature: write V3000 creates V3000 file; see http://www.symyx.com/downloads/public/ctfile/ctfile.pdf Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/molxyz/MolReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Removed Paths: ------------- trunk/Jmol/src/org/jmol/adapter/readers/simple/V3000Reader.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/molxyz/MolReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/molxyz/MolReader.java 2010-12-17 21:50:34 UTC (rev 14812) +++ trunk/Jmol/src/org/jmol/adapter/readers/molxyz/MolReader.java 2010-12-17 22:29:28 UTC (rev 14813) @@ -75,6 +75,7 @@ boolean is2D; private boolean isV3000; + private String dimension; @Override public void initializeReader() throws Exception { @@ -149,7 +150,7 @@ if (line == null) return; header += line + "\n"; - isV3000 = (line.indexOf("V3000") >= 0); + dimension = (line.length() < 22 ? "3D" : line.substring(20,22)); //line 3: comment readLine(); if (line == null) @@ -164,11 +165,13 @@ String[] tokens = null; if (isMDL) discardLinesUntilStartsWith("$CTAB"); - else if (isV3000) { + readLine(); + isV3000 = (line.indexOf("V3000") >= 0); + if (isV3000) { + is2D = (dimension.equals("2D")); discardLinesUntilContains("COUNTS"); tokens = getTokens(); } - readLine(); if (line == null) return; int atomCount = (isV3000 ? parseInt(tokens[3]) : parseInt(line, 0, 3)); @@ -202,6 +205,8 @@ else if (s.startsWith("MASS=")) isotope = parseInt(tokens[j].substring(5)); } + if (isotope > 1 && elementSymbol.equals("H")) + isotope = 1 - isotope; } else { if (line.length() > 34) { elementSymbol = line.substring(31, 34).trim(); @@ -230,27 +235,26 @@ isotope += code; } } - - switch (isotope) { - case 0: - break; - case -1: - elementSymbol = "D"; - break; - case -2: - elementSymbol = "T"; - break; - default: - elementSymbol = isotope + elementSymbol; - } - if (is2D && z != 0) - is2D = false; - Atom atom = atomSetCollection.addNewAtom(); - atom.elementSymbol = elementSymbol; - atom.formalCharge = charge; - setAtomCoord(atom, x, y, z); } } + switch (isotope) { + case 0: + break; + case -1: + elementSymbol = "D"; + break; + case -2: + elementSymbol = "T"; + break; + default: + elementSymbol = isotope + elementSymbol; + } + if (is2D && z != 0) + is2D = false; + Atom atom = atomSetCollection.addNewAtom(); + atom.elementSymbol = elementSymbol; + atom.formalCharge = charge; + setAtomCoord(atom, x, y, z); } } @@ -272,10 +276,10 @@ if (isV3000) { checkLineContinuation(); String[] tokens = getTokens(); - atomIndex1 = parseInt(tokens[3]); - atomIndex2 = parseInt(tokens[4]); - order = parseInt(tokens[5]); - for (int j = 6; j < tokens.length; j++) { + order = parseInt(tokens[3]); + atomIndex1 = parseInt(tokens[4]); + atomIndex2 = parseInt(tokens[5]); + for (int j = 6; j < tokens.length; j++) { String s = tokens[j].toUpperCase(); if (s.startsWith("CFG=")) { stereo = parseInt(tokens[j].substring(4)); Deleted: trunk/Jmol/src/org/jmol/adapter/readers/simple/V3000Reader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/simple/V3000Reader.java 2010-12-17 21:50:34 UTC (rev 14812) +++ trunk/Jmol/src/org/jmol/adapter/readers/simple/V3000Reader.java 2010-12-17 22:29:28 UTC (rev 14813) @@ -1,136 +0,0 @@ -/* $RCSfile$ - * $Author: hansonr $ - * $Date: 2006-03-15 08:52:29 -0500 (Wed, 15 Mar 2006) $ - * $Revision: 4614 $ - * - * Copyright (C) 2006 Miguel, Jmol Development, www.jmol.org - * - * Contact: jmo...@li... - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -package org.jmol.adapter.readers.simple; - -import org.jmol.adapter.smarter.*; -import org.jmol.api.JmolAdapter; - -/** - * A reader for MDL V3000 files - *<p> - * <a href='http://www.mdli.com/downloads/public/ctfile/ctfile.jsp'> - * http://www.mdli.com/downloads/public/ctfile/ctfile.jsp - * </a> - *<p> - */ -public class V3000Reader extends AtomSetCollectionReader { - - private int headerAtomCount; - private int headerBondCount; - - @Override - protected boolean checkLine() throws Exception { - if (!doGetModel(++modelNumber)) { - discardLinesUntilContains("$$$$"); - return checkLastModel(); - } - processCtab(); - return true; - } - - private void processCtab() throws Exception { - while (readLine() != null && - ! line.startsWith("$$$$") && - ! line.startsWith("M END")) { - if (line.startsWith("M V30 BEGIN ATOM")) { - processAtomBlock(); - continue; - } - if (line.startsWith("M V30 BEGIN BOND")) { - processBondBlock(); - continue; - } - if (line.startsWith("M V30 BEGIN CTAB")) { - newAtomSet(""); - } else if (line.startsWith("M V30 COUNTS")) { - headerAtomCount = parseInt(line, 13); - headerBondCount = parseInt(); - } - } - if (line != null && !line.startsWith("$$$$")) - discardLinesUntilStartsWith("$$$$"); - } - - private String processAtomBlock() throws Exception { - for (int i = headerAtomCount; --i >= 0; ) { - readLineWithContinuation(); - if (line == null || (! line.startsWith("M V30 "))) - throw new Exception("unrecognized atom"); - Atom atom = new Atom(); - String[] tokens = getTokens(); - atom.atomSerial = parseInt(tokens[2]); - atom.elementSymbol = tokens[3]; - setAtomCoord(atom, parseFloat(tokens[4]), parseFloat(tokens[5]), parseFloat(tokens[6])); - for (int j = 8; j < tokens.length; j++) { - String token = tokens[j]; - if (token.startsWith("CHG=")) { - int charge = parseInt(token, 4); - atom.formalCharge = (charge > 3 ? 4 - charge : charge); - break; - } else if (token.startsWith("MASS=")) { - int isotope = parseInt(token, 5); - atom.elementNumber = (short) ((isotope << 7) + JmolAdapter - .getElementNumber(atom.elementSymbol)); - } - } - atomSetCollection.addAtomWithMappedSerialNumber(atom); - } - readLine(); - if (line == null || ! line.startsWith("M V30 END ATOM")) - throw new Exception("M V30 END ATOM not found"); - return line; - } - - private void processBondBlock() throws Exception { - for (int i = headerBondCount; --i >= 0; ) { - readLineWithContinuation(); - if (line == null || (! line.startsWith("M V30 "))) - throw new Exception("unrecognized bond"); - /*int bondSerial = */parseInt(line, 7); // currently unused - int order = parseInt(); - int atomSerial1 = parseInt(); - int atomSerial2 = parseInt(); - atomSetCollection.addNewBondWithMappedSerialNumbers(atomSerial1, - atomSerial2, - order); - } - readLine(); - if (line == null || ! line.startsWith("M V30 END BOND")) - throw new Exception("M V30 END BOND not found"); - } - - private void readLineWithContinuation() throws Exception { - readLine(); - if (line != null && line.length() > 7) { - while (line.charAt(line.length() - 1) == '-') { - String line2 = readLine(); - if (line2 == null || ! line.startsWith("M V30 ")) - throw new Exception("Invalid line continuation"); - line += line2.substring(7); - } - } - } - -} Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-12-17 21:50:34 UTC (rev 14812) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-12-17 22:29:28 UTC (rev 14813) @@ -51,7 +51,7 @@ "quantum.", ";Adf;Csf;Dgrid;GamessUK;GamessUS;Gaussian;GausianWfn;Jaguar;" + "Molden;MopacGraphf;GenNBO;NWChem;Odyssey;Psi;Qchem;Spartan;SpartanSmol;" + "WebMO;", - "simple.", ";Alchemy;Ampac;Cube;FoldingXyz;GhemicalMM;HyperChem;Jme;Mopac;V3000;", + "simple.", ";Alchemy;Ampac;Cube;FoldingXyz;GhemicalMM;HyperChem;Jme;Mopac;", "xtal.", ";Aims;Castep;Crystal;Gulp;Shelx;VaspOutcar;Wien2k;" }; @@ -536,7 +536,7 @@ private final static int SPECIAL_JME = 0; private final static int SPECIAL_MOPACGRAPHF = 1; - private final static int SPECIAL_V3000 = 2; + private final static int SPECIAL_V3000 = 2; // implemented in MOL private final static int SPECIAL_ODYSSEY = 3; private final static int SPECIAL_MOL = 4; private final static int SPECIAL_XYZ = 5; @@ -628,8 +628,6 @@ return specialTags[SPECIAL_JME][0]; //only one line, and that line starts with a number if (checkMopacGraphf(lines)) return specialTags[SPECIAL_MOPACGRAPHF][0]; //must be prior to checkFoldingXyz and checkMol - if (checkV3000(lines)) - return specialTags[SPECIAL_V3000][0]; if (checkOdyssey(lines)) return specialTags[SPECIAL_ODYSSEY][0]; if (checkMol(lines)) @@ -803,15 +801,6 @@ return false; } - private static boolean checkV3000(String[] lines) { - if (lines[3].length() >= 6) { - String line4trimmed = lines[3].trim(); - if (line4trimmed.endsWith("V3000")) - return true; - } - return false; - } - private static boolean checkMol(String[] lines) { String line4trimmed = ("X" + lines[3]).trim().toUpperCase(); if (line4trimmed.length() < 7 || line4trimmed.indexOf(".") >= 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ha...@us...> - 2010-12-22 18:39:43
|
Revision: 14877 http://jmol.svn.sourceforge.net/jmol/?rev=14877&view=rev Author: hansonr Date: 2010-12-22 18:39:37 +0000 (Wed, 22 Dec 2010) Log Message: ----------- Modified Paths: -------------- trunk/Jmol/src/org/jmol/adapter/readers/xtal/EspressoReader.java trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java Modified: trunk/Jmol/src/org/jmol/adapter/readers/xtal/EspressoReader.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/readers/xtal/EspressoReader.java 2010-12-22 18:27:53 UTC (rev 14876) +++ trunk/Jmol/src/org/jmol/adapter/readers/xtal/EspressoReader.java 2010-12-22 18:39:37 UTC (rev 14877) @@ -33,13 +33,13 @@ if (line.contains("lattice parameter (a_0)")) { readAparam(); } else if (line.contains("crystal axes:")) { - readIntialCellParam(); + readCellParam(false); } else if (line.contains("Cartesian axes")) { readInitialAtomic(); } else if (line.contains("! total energy")) { readEnergy(); } else if (line.contains("CELL_PARAMETERS")) { - readCellParam(); + readCellParam(true); } else if (line.contains("ATOMIC_POSITIONS")) { readAtomic(); } else if(line.contains("End") && line.contains(" Geometry Optimization")){ @@ -52,8 +52,8 @@ private float aPar; private void readAparam() throws Exception { - String[] tokens = getTokens(line.substring(line.indexOf("=") + 1)); - aPar = parseFloat(tokens[0]) * ANGSTROMS_PER_BOHR; + String[] tokens = getTokens(); + aPar = parseFloat(tokens[4]) * ANGSTROMS_PER_BOHR; } /* @@ -69,71 +69,30 @@ */ - private float a, b, c, alpha, beta, gamma; - - private void readIntialCellParam() throws Exception { - readLine(); - String[] tokens = getTokens(); - float x, y, z; - for (int n = 0; n < 3; n++) { - if (tokens.length >= 3) { - x = parseFloat(tokens[3]) * aPar; - y = parseFloat(tokens[4]) * aPar; - z = parseFloat(tokens[5]) * aPar; - abc[n] = new Vector3f(x, y, z); - } - tokens = getTokens(readLine()); - } - a = abc[0].length(); - b = abc[1].length(); - c = abc[2].length(); - alpha = (float) Math.toDegrees(abc[1].angle(abc[2])); - beta = (float) Math.toDegrees(abc[2].angle(abc[0])); - gamma = (float) Math.toDegrees(abc[0].angle(abc[1])); - setCell(); - } - - -/* + /* CELL_PARAMETERS (alat= 17.62853047) 1.019135101 0.000000000 0.000000000 -0.509567550 0.882596887 0.000000000 0.000000000 0.000000000 0.737221415 -*/ private void readCellParam() throws Exception { - aPar = parseFloat(line.substring(line.indexOf("=") + 1, line - .lastIndexOf(")") - 1)) - * ANGSTROMS_PER_BOHR; - String[] tokens = getTokens(); - float x, y, z; - for (int n = 0; n < 3; n++) { - if (tokens.length >= 3) { - x = parseFloat(tokens[0]) * aPar; - y = parseFloat(tokens[1]) * aPar; - z = parseFloat(tokens[2]) * aPar; - abc[n] = new Vector3f(x, y, z); - } - tokens = getTokens(readLine()); +*/ + + float[] cellParams; + + private void readCellParam(boolean andAPar) throws Exception { + int i0 = (andAPar ? 0 : 3); + if (andAPar) + aPar = parseFloat(line.substring(line.indexOf("=") + 1)) * ANGSTROMS_PER_BOHR; + cellParams = new float[9]; + for (int n = 0, i = 0; n < 3; n++) { + String[] tokens = getTokens(readLine()); + cellParams[i++] = parseFloat(tokens[i0]) * aPar; + cellParams[i++] = parseFloat(tokens[i0 + 1]) * aPar; + cellParams[i++] = parseFloat(tokens[i0 + 2]) * aPar; } - a = abc[0].length(); - b = abc[1].length(); - c = abc[2].length(); - alpha = (float) Math.toDegrees(abc[1].angle(abc[2])); - beta = (float) Math.toDegrees(abc[2].angle(abc[0])); - gamma = (float) Math.toDegrees(abc[0].angle(abc[1])); - - - applySymmetryAndSetTrajectory(); - setSpaceGroupName("P1"); - setFractionalCoordinates(true); - setCell(); } - - private void setCell() throws Exception { - setUnitCell(a, b, c, alpha, beta, gamma); - applySymmetryAndSetTrajectory(); - } - + + /* Cartesian axes @@ -150,20 +109,33 @@ 10 Ca tau( 10) = ( 0.1171775 -0.2203283 -0.1867815 ) */ private void readInitialAtomic() throws Exception { + setCellParams(); discardLines(2); while (readLine() != null && line.length() > 1) { String[] tokens = getTokens(); Atom atom = atomSetCollection.addNewAtom(); atom.atomName = tokens[1]; - // here the cordinates are a_lat there fore expressed on base of cube of side a - float x = parseFloat(tokens[6])* aPar; - float y = parseFloat(tokens[7])* aPar; - float z = parseFloat(tokens[8])* aPar; + // here the coordinates are a_lat there fore expressed on base of cube of side a + float x = parseFloat(tokens[6]) * aPar; + float y = parseFloat(tokens[7]) * aPar; + float z = parseFloat(tokens[8]) * aPar; setAtomCoord(atom, x, y, z); - } } + private void setCellParams() throws Exception { + if (!doGetModel(++modelNumber)) + return; + applySymmetryAndSetTrajectory(); + atomSetCollection.newAtomSet(); + if (cellParams != null) { + setFractionalCoordinates(true); + addPrimitiveLatticeVector(0, cellParams, 0); + addPrimitiveLatticeVector(1, cellParams, 3); + addPrimitiveLatticeVector(2, cellParams, 6); + } + } + private void readAtomic() throws Exception { /* @@ -181,6 +153,7 @@ if(endOptimization){ condition = 22; } + setCellParams(); while (readLine() != null && line.length() > condition){ String[] tokens = getTokens(); Atom atom = atomSetCollection.addNewAtom(); Modified: trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java =================================================================== --- trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-12-22 18:27:53 UTC (rev 14876) +++ trunk/Jmol/src/org/jmol/adapter/smarter/Resolver.java 2010-12-22 18:39:37 UTC (rev 14877) @@ -685,7 +685,7 @@ return true; if (lines[i].contains("http://www.quantum-espresso.org")) return true; - if (lines[i].contains("Program PWSCF v")) + if (lines[i].contains("Program PWSCF")) return true; if (lines[i].contains("PHONON ")) return true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |