From: Egon W. <eg...@us...> - 2003-09-22 13:18:36
|
Update of /cvsroot/cdk/cdk/src/org/openscience/cdk/io In directory sc8-pr-cvs1:/tmp/cvs-serv20256/src/org/openscience/cdk/io Modified Files: Gaussian98Reader.java Gaussian03Reader.java Log Message: Added reading of partial atomic charges Index: Gaussian98Reader.java =================================================================== RCS file: /cvsroot/cdk/cdk/src/org/openscience/cdk/io/Gaussian98Reader.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Gaussian98Reader.java 10 Sep 2003 12:42:54 -0000 1.6 +++ Gaussian98Reader.java 22 Sep 2003 13:18:31 -0000 1.7 @@ -176,6 +176,8 @@ // Found a set of vibrations // readFrequencies(frame); + } else if (line.indexOf("Total atomic charges") >= 0) { + readPartialCharges(model); } else if (line.indexOf("Magnetic shielding") >= 0) { // Found NMR data @@ -185,6 +187,8 @@ // Found calculation level of theory levelOfTheory = parseLevelOfTheory(line); + } else { + logger.debug("Skipping line: " + line); } line = input.readLine(); } @@ -262,6 +266,42 @@ } moleculeSet.addMolecule(molecule); model.setSetOfMolecules(moleculeSet); + } + + /** + * Reads partial atomic charges and add the to the given ChemModel. + */ + private void readPartialCharges(ChemModel model) throws CDKException, IOException { + logger.info("Reading partial atomic charges"); + SetOfMolecules moleculeSet = model.getSetOfMolecules(); + Molecule molecule = moleculeSet.getMolecule(0); + String line = input.readLine(); // skip first line after "Total atomic charges" + while (input.ready()) { + line = input.readLine(); + logger.debug("Read charge block line: " + line); + if ((line == null) || (line.indexOf("Sum of Mulliken charges") >= 0)) { + logger.debug("End of charge block found"); + break; + } + StringReader sr = new StringReader(line); + StreamTokenizer tokenizer = new StreamTokenizer(sr); + if (tokenizer.nextToken() == StreamTokenizer.TT_NUMBER) { + int atomCounter = (int) tokenizer.nval; + + tokenizer.nextToken(); // ignore the symbol + + double charge = 0.0; + if (tokenizer.nextToken() == StreamTokenizer.TT_NUMBER) { + charge = (double)tokenizer.nval; + logger.debug("Found charge for atom " + atomCounter + + ": " + charge); + } else { + throw new CDKException("Error while reading charge: expected double."); + } + Atom atom = molecule.getAtomAt(atomCounter-1); + atom.setCharge(charge); + } + } } /** Index: Gaussian03Reader.java =================================================================== RCS file: /cvsroot/cdk/cdk/src/org/openscience/cdk/io/Gaussian03Reader.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Gaussian03Reader.java 3 Sep 2003 07:58:31 -0000 1.3 +++ Gaussian03Reader.java 22 Sep 2003 13:18:31 -0000 1.4 @@ -27,6 +27,7 @@ import org.openscience.cdk.Atom; import org.openscience.cdk.AtomContainer; +import org.openscience.cdk.ChemFile; import org.openscience.cdk.ChemModel; import org.openscience.cdk.ChemObject; import org.openscience.cdk.ChemSequence; @@ -34,6 +35,7 @@ import org.openscience.cdk.SetOfMolecules; import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.tools.IsotopeFactory; +import org.openscience.cdk.tools.LoggingTool; import java.io.Reader; import java.io.BufferedReader; import java.io.StringReader; @@ -69,9 +71,11 @@ private IsotopeFactory isotopeFactory; private BufferedReader input; + private LoggingTool logger; public Gaussian03Reader(Reader reader) { input = new BufferedReader(reader); + logger = new LoggingTool(this.getClass().getName()); try { isotopeFactory = IsotopeFactory.getInstance(); } catch (Exception exception) { @@ -82,6 +86,8 @@ public boolean accepts(ChemObject object) { if (object instanceof ChemSequence) { return true; + } else if (object instanceof ChemFile) { + return true; } else { return false; } @@ -90,6 +96,8 @@ public ChemObject read(ChemObject object) throws CDKException { if (object instanceof ChemSequence) { return readChemSequence(); + } else if (object instanceof ChemFile) { + return readChemFile(); } else { throw new CDKException("Object " + object.getClass().getName() + " is not supported"); } @@ -99,6 +107,13 @@ input.close(); } + private ChemFile readChemFile() throws CDKException { + ChemFile chemFile = new ChemFile(); + ChemSequence sequence = readChemSequence(); + chemFile.addChemSequence(sequence); + return chemFile; + } + private ChemSequence readChemSequence() throws CDKException { ChemSequence sequence = new ChemSequence(); ChemModel model = null; @@ -143,6 +158,8 @@ } catch (IOException exception) { throw new CDKException("Error while reading frequencies: " + exception.toString()); } + } else if (line.indexOf("Mulliken atomic charges") >= 0) { + readPartialCharges(model); } else if (line.indexOf("Magnetic shielding") >= 0) { // Found NMR data try { @@ -232,6 +249,42 @@ SetOfMolecules moleculeSet = new SetOfMolecules(); moleculeSet.addMolecule(new Molecule(container)); model.setSetOfMolecules(moleculeSet); + } + + /** + * Reads partial atomic charges and add the to the given ChemModel. + */ + private void readPartialCharges(ChemModel model) throws CDKException, IOException { + logger.info("Reading partial atomic charges"); + SetOfMolecules moleculeSet = model.getSetOfMolecules(); + Molecule molecule = moleculeSet.getMolecule(0); + String line = input.readLine(); // skip first line after "Total atomic charges" + while (input.ready()) { + line = input.readLine(); + logger.debug("Read charge block line: " + line); + if ((line == null) || (line.indexOf("Sum of Mulliken charges") >= 0)) { + logger.debug("End of charge block found"); + break; + } + StringReader sr = new StringReader(line); + StreamTokenizer tokenizer = new StreamTokenizer(sr); + if (tokenizer.nextToken() == StreamTokenizer.TT_NUMBER) { + int atomCounter = (int) tokenizer.nval; + + tokenizer.nextToken(); // ignore the symbol + + double charge = 0.0; + if (tokenizer.nextToken() == StreamTokenizer.TT_NUMBER) { + charge = (double)tokenizer.nval; + logger.debug("Found charge for atom " + atomCounter + + ": " + charge); + } else { + throw new CDKException("Error while reading charge: expected double."); + } + Atom atom = molecule.getAtomAt(atomCounter-1); + atom.setCharge(charge); + } + } } /** |