⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gaussian98reader.java

📁 化学图形处理软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            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 + -