📄 gaussian98reader.java
字号:
if (token.nextToken() == StreamTokenizer.TT_NUMBER) { atomicNumber = (int) token.nval; if (atomicNumber == 0) { // Skip dummy atoms. Dummy atoms must be skipped // if frequencies are to be read because Gaussian // does not report dummy atoms in frequencies, and // the number of atoms is used for reading frequencies. continue; } } else { throw new CDKException("Error while reading coordinates: expected integer."); } token.nextToken(); // ignore third token double x; double y; double z; if (token.nextToken() == StreamTokenizer.TT_NUMBER) { x = token.nval; } else { throw new IOException("Error reading x coordinate"); } if (token.nextToken() == StreamTokenizer.TT_NUMBER) { y = token.nval; } else { throw new IOException("Error reading y coordinate"); } if (token.nextToken() == StreamTokenizer.TT_NUMBER) { z = token.nval; } else { throw new IOException("Error reading z coordinate"); } String symbol = "Du"; try { symbol = IsotopeFactory.getInstance(model.getBuilder()).getElementSymbol(atomicNumber); } catch (Exception exception) { throw new CDKException("Could not determine element symbol!", exception); } IAtom atom = model.getBuilder().newAtom(symbol); atom.setPoint3d(new Point3d(x, y, z)); molecule.addAtom(atom); } /* * this is the place where we store the atomcount to * be used as a counter in the nmr reading */ atomCount = molecule.getAtomCount(); moleculeSet.addMolecule(molecule); model.setMoleculeSet(moleculeSet); } /** * Reads partial atomic charges and add the to the given ChemModel. * * @param model Description of the Parameter * @throws CDKException Description of the Exception * @throws IOException Description of the Exception */ private void readPartialCharges(IChemModel model) throws CDKException, IOException { logger.info("Reading partial atomic charges"); IMoleculeSet moleculeSet = model.getMoleculeSet(); IMolecule 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; if (tokenizer.nextToken() == StreamTokenizer.TT_NUMBER) { charge = tokenizer.nval; logger.debug("Found charge for atom " + atomCounter + ": " + charge); } else { throw new CDKException("Error while reading charge: expected double."); } IAtom atom = molecule.getAtom(atomCounter - 1); atom.setCharge(charge); } } } /** * Reads a set of vibrations into ChemFrame. * *@param model Description of the Parameter *@exception IOException if an I/O error occurs */// private void readFrequencies(IChemModel model) throws IOException// { /* * FIXME: this is yet to be ported * String line; * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * while ((line != null) && line.startsWith(" Frequencies --")) { * Vector currentVibs = new Vector(); * StringReader vibValRead = new StringReader(line.substring(15)); * StreamTokenizer token = new StreamTokenizer(vibValRead); * while (token.nextToken() != StreamTokenizer.TT_EOF) { * Vibration vib = new Vibration(Double.toString(token.nval)); * currentVibs.addElement(vib); * } * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * for (int i = 0; i < frame.getAtomCount(); ++i) { * line = input.readLine(); * StringReader vectorRead = new StringReader(line); * token = new StreamTokenizer(vectorRead); * token.nextToken(); * / ignore first token * token.nextToken(); * / ignore second token * for (int j = 0; j < currentVibs.size(); ++j) { * double[] v = new double[3]; * if (token.nextToken() == StreamTokenizer.TT_NUMBER) { * v[0] = token.nval; * } else { * throw new IOException("Error reading frequency"); * } * if (token.nextToken() == StreamTokenizer.TT_NUMBER) { * v[1] = token.nval; * } else { * throw new IOException("Error reading frequency"); * } * if (token.nextToken() == StreamTokenizer.TT_NUMBER) { * v[2] = token.nval; * } else { * throw new IOException("Error reading frequency"); * } * ((Vibration) currentVibs.elementAt(j)).addAtomVector(v); * } * } * for (int i = 0; i < currentVibs.size(); ++i) { * frame.addVibration((Vibration) currentVibs.elementAt(i)); * } * line = input.readLine(); * line = input.readLine(); * line = input.readLine(); * } */// } /** * Reads NMR nuclear shieldings. */ private void readNMRData(IChemModel model, String labelLine) throws CDKException { List containers = ChemModelManipulator.getAllAtomContainers(model); if (containers.size() == 0) { // nothing to store the results into return; } // otherwise insert in the first AC IAtomContainer ac = (IAtomContainer)containers.get(0); // Determine label for properties String label; if (labelLine.indexOf("Diamagnetic") >= 0) { label = "Diamagnetic Magnetic shielding (Isotropic)"; } else if (labelLine.indexOf("Paramagnetic") >= 0) { label = "Paramagnetic Magnetic shielding (Isotropic)"; } else { label = "Magnetic shielding (Isotropic)"; } int atomIndex = 0; for (int i = 0; i < atomCount; ++i) { try { String line = input.readLine().trim(); while (line.indexOf("Isotropic") < 0) { if (line == null) { return; } line = input.readLine().trim(); } StringTokenizer st1 = new StringTokenizer(line); // Find Isotropic label while (st1.hasMoreTokens()) { if (st1.nextToken().equals("Isotropic")) { break; } } // Find Isotropic value while (st1.hasMoreTokens()) { if (st1.nextToken().equals("=")) break; } double shielding = Double.valueOf(st1.nextToken()).doubleValue(); logger.info("Type of shielding: " + label); ac.getAtom(atomIndex).setProperty(CDKConstants.ISOTROPIC_SHIELDING, new Double(shielding)); ++atomIndex; } catch (Exception exc) { logger.debug("failed to read line from gaussian98 file where I expected one."); } } } /** * Select the theory and basis set from the first archive line. * * @param line Description of the Parameter * @return Description of the Return Value */ private String parseLevelOfTheory(String line) { StringBuffer summary = new StringBuffer(); summary.append(line); try { do { line = input.readLine().trim(); summary.append(line); } while (!(line.indexOf("@") >= 0)); } catch (Exception exc) { logger.debug("syntax problem while parsing summary of g98 section: "); logger.debug(exc); } logger.debug("parseLoT(): " + summary.toString()); StringTokenizer st1 = new StringTokenizer(summary.toString(), "\\"); // Must contain at least 6 tokens if (st1.countTokens() < 6) { return null; } // Skip first four tokens for (int i = 0; i < 4; ++i) { st1.nextToken(); } return st1.nextToken() + "/" + st1.nextToken(); } private void initIOSettings() { readOptimizedStructureOnly = new BooleanIOSetting("ReadOptimizedStructureOnly", IOSetting.LOW, "Should I only read the optimized structure from a geometry optimization?", "false"); } private void customizeJob() { fireIOSettingQuestion(readOptimizedStructureOnly); } /** * Gets the iOSettings attribute of the Gaussian98Reader object * *@return The iOSettings value */ public IOSetting[] getIOSettings() { IOSetting[] settings = new IOSetting[1]; settings[0] = readOptimizedStructureOnly; return settings; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -