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

📄 chemmodelmanipulator.java

📁 化学图形处理软件
💻 JAVA
字号:
/* $RCSfile$ * $Author: egonw $  * $Date: 2007-05-01 22:13:10 +0200 (Tue, 01 May 2007) $ * $Revision: 8295 $ *  * Copyright (C) 2003-2007  The Chemistry Development Kit (CDK) project *  * Contact: cdk-devel@lists.sourceforge.net *  * This program 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. * All we ask is that proper credit is given for our work, which includes * - but is not limited to - adding the above copyright notice to the beginning * of your source code files, and to any copyright notice that you may distribute * with programs based on this work. *  * This program 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 program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. *  */package org.openscience.cdk.tools.manipulator;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.openscience.cdk.interfaces.IAtom;import org.openscience.cdk.interfaces.IAtomContainer;import org.openscience.cdk.interfaces.IBond;import org.openscience.cdk.interfaces.IChemModel;import org.openscience.cdk.interfaces.ICrystal;import org.openscience.cdk.interfaces.IElectronContainer;import org.openscience.cdk.interfaces.IMolecule;import org.openscience.cdk.interfaces.IMoleculeSet;import org.openscience.cdk.interfaces.IReaction;import org.openscience.cdk.interfaces.IReactionSet;/** * Class with convenience methods that provide methods from * methods from ChemObjects within the ChemModel. For example: * <pre> * ChemModelManipulator.removeAtomAndConnectedElectronContainers(chemModel, atom); * </pre> * will find the Atom in the model by traversing the ChemModel's * MoleculeSet, Crystal and ReactionSet fields and remove * it with the removeAtomAndConnectedElectronContainers(Atom) method. * * @cdk.module standard * * @see org.openscience.cdk.AtomContainer#removeAtomAndConnectedElectronContainers(IAtom) */public class ChemModelManipulator {    	/**	 * Get the total number of atoms inside an IChemModel.	 * 	 * @param chemModel  The IChemModel object.	 * @return           The number of Atom object inside.	 */    public static int getAtomCount(IChemModel chemModel) {    	int count = 0;        ICrystal crystal = chemModel.getCrystal();        if (crystal != null) {            count += crystal.getAtomCount();        }        IMoleculeSet moleculeSet = chemModel.getMoleculeSet();        if (moleculeSet != null) {            count += MoleculeSetManipulator.getAtomCount(moleculeSet);        }        IReactionSet reactionSet = chemModel.getReactionSet();        if (reactionSet != null) {            count += ReactionSetManipulator.getAtomCount(reactionSet);        }        return count;    }        /**	 * Get the total number of bonds inside an IChemModel.	 * 	 * @param chemModel  The IChemModel object.	 * @return           The number of Bond object inside.	 */    public static int getBondCount(IChemModel chemModel) {    	int count = 0;        ICrystal crystal = chemModel.getCrystal();        if (crystal != null) {            count += crystal.getBondCount();        }        IMoleculeSet moleculeSet = chemModel.getMoleculeSet();        if (moleculeSet != null) {            count += MoleculeSetManipulator.getBondCount(moleculeSet);        }        IReactionSet reactionSet = chemModel.getReactionSet();        if (reactionSet != null) {            count += ReactionSetManipulator.getBondCount(reactionSet);        }        return count;    }        /**     * Remove an Atom and the connected ElectronContainers from all AtomContainers     * inside an IChemModel.     *      * @param chemModel  The IChemModel object.     * @param atom       The Atom object to remove.     */    public static void removeAtomAndConnectedElectronContainers(IChemModel chemModel, IAtom atom) {        ICrystal crystal = chemModel.getCrystal();        if (crystal != null) {            if (crystal.contains(atom)) {                crystal.removeAtomAndConnectedElectronContainers(atom);            }            return;        }        IMoleculeSet moleculeSet = chemModel.getMoleculeSet();        if (moleculeSet != null) {            MoleculeSetManipulator.removeAtomAndConnectedElectronContainers(moleculeSet, atom);        }        IReactionSet reactionSet = chemModel.getReactionSet();        if (reactionSet != null) {            ReactionSetManipulator.removeAtomAndConnectedElectronContainers(reactionSet, atom);        }    }        /**     * Remove an ElectronContainer from all AtomContainers     * inside an IChemModel.     *      * @param chemModel  The IChemModel object.     * @param electrons  The ElectronContainer to remove.     */    public static void removeElectronContainer(IChemModel chemModel, IElectronContainer electrons) {        ICrystal crystal = chemModel.getCrystal();        if (crystal != null) {            if (crystal.contains(electrons)) {                crystal.removeElectronContainer(electrons);            }            return;        }        IMoleculeSet moleculeSet = chemModel.getMoleculeSet();        if (moleculeSet != null) {            MoleculeSetManipulator.removeElectronContainer(moleculeSet, electrons);        }        IReactionSet reactionSet = chemModel.getReactionSet();        if (reactionSet != null) {            ReactionSetManipulator.removeElectronContainer(reactionSet, electrons);        }    }        /**     * Adds a new Molecule to the MoleculeSet inside a given ChemModel.     * Creates a MoleculeSet if none is contained.     *      * @param chemModel  The ChemModel object.     * @return           The created Molecule object.     */    public static IAtomContainer createNewMolecule(IChemModel chemModel) {        // Add a new molecule either the set of molecules        IMolecule molecule = chemModel.getBuilder().newMolecule();        if (chemModel.getMoleculeSet() != null) {            IMoleculeSet moleculeSet = chemModel.getMoleculeSet();            moleculeSet.addMolecule(molecule);        } else {            IMoleculeSet moleculeSet = chemModel.getBuilder().newMoleculeSet();            moleculeSet.addMolecule(molecule);            chemModel.setMoleculeSet(moleculeSet);        }        return molecule;    }    /**     * Create a new ChemModel containing an IAtomContainer.     *      * @param  atomContainer  The AtomContainer to have inside the ChemModel.     * @return                The new IChemModel object.     */    public static IChemModel newChemModel(IAtomContainer atomContainer) {        IChemModel model = atomContainer.getBuilder().newChemModel();        IMoleculeSet moleculeSet = model.getBuilder().newMoleculeSet();        moleculeSet.addAtomContainer(atomContainer);        model.setMoleculeSet(moleculeSet);        return model;    }    /**     * This badly named methods tries to determine which AtomContainer in the     * ChemModel is best suited to contain added Atom's and Bond's.     */    public static IAtomContainer getRelevantAtomContainer(IChemModel chemModel, IAtom atom) {        IAtomContainer result = null;        if (chemModel.getMoleculeSet() != null) {            IMoleculeSet moleculeSet = chemModel.getMoleculeSet();            result = MoleculeSetManipulator.getRelevantAtomContainer(moleculeSet, atom);            if (result != null) {                return result;            }        }        if (chemModel.getReactionSet() != null) {            IReactionSet reactionSet = chemModel.getReactionSet();            return ReactionSetManipulator.getRelevantAtomContainer(reactionSet, atom);        }        // This should never happen.        return null;    }    /**     * Retrieves the first IAtomContainer containing a given IBond from an     * IChemModel.     *      * @param chemModel  The IChemModel object.     * @param bond       The IBond object to search.     * @return           The IAtomContainer object found, null if none is found.     */    public static IAtomContainer getRelevantAtomContainer(IChemModel chemModel, IBond bond) {        IAtomContainer result = null;        if (chemModel.getMoleculeSet() != null) {            IMoleculeSet moleculeSet = chemModel.getMoleculeSet();            result = MoleculeSetManipulator.getRelevantAtomContainer(moleculeSet, bond);            if (result != null) {                return result;            }        }        if (chemModel.getReactionSet() != null) {            IReactionSet reactionSet = chemModel.getReactionSet();            return ReactionSetManipulator.getRelevantAtomContainer(reactionSet, bond);        }        // This should never happen.        return null;    }        /**     * Retrieves the first IReaction containing a given IAtom from an     * IChemModel.     *      * @param chemModel  The IChemModel object.     * @param atom       The IAtom object to search.     * @return           The IAtomContainer object found, null if none is found.     */    public static IReaction getRelevantReaction(IChemModel chemModel, IAtom atom) {        IReaction reaction = null;        if (chemModel.getReactionSet() != null) {            IReactionSet reactionSet = chemModel.getReactionSet();            reaction = ReactionSetManipulator.getRelevantReaction(reactionSet, atom);        }        return reaction;    }    /**     * Returns all the AtomContainer's of a ChemModel.     */    public static List getAllAtomContainers(IChemModel chemModel) {        IMoleculeSet moleculeSet = chemModel.getBuilder().newMoleculeSet();        if (chemModel.getMoleculeSet() != null) {            moleculeSet.add(chemModel.getMoleculeSet());        }        if (chemModel.getReactionSet() != null) {            moleculeSet.add(                ReactionSetManipulator.getAllMolecules(                    chemModel.getReactionSet()                )            );        }        return MoleculeSetManipulator.getAllAtomContainers(moleculeSet);    }    /**     * Sets the AtomProperties of all Atoms inside an IChemModel.     *      * @param chemModel  The IChemModel object.     * @param propKey    The key of the property.     * @param propVal    The value of the property.     */    public static void setAtomProperties(IChemModel chemModel, Object propKey, Object propVal) {        if (chemModel.getMoleculeSet() != null) {            MoleculeSetManipulator.setAtomProperties(                chemModel.getMoleculeSet(), propKey, propVal            );        }        if (chemModel.getReactionSet() != null) {            ReactionSetManipulator.setAtomProperties(                chemModel.getReactionSet(), propKey, propVal            );        }        if (chemModel.getCrystal() != null) {            AtomContainerManipulator.setAtomProperties(                chemModel.getCrystal(), propKey, propVal            );        }    }        /**     * Retrieve a List of all ChemObject objects within an IChemModel.     *      * @param chemModel  The IChemModel object.     * @return           A List of all ChemObjects inside.     */	public static List getAllChemObjects(IChemModel chemModel) {		ArrayList list = new ArrayList();        // list.add(chemModel); // only add ChemObjects contained within        ICrystal crystal = chemModel.getCrystal();        if (crystal != null) {            list.add(crystal);        }        IMoleculeSet moleculeSet = chemModel.getMoleculeSet();        if (moleculeSet != null) {        	list.add(moleculeSet);        	List current = MoleculeSetManipulator.getAllChemObjects(moleculeSet);        	for (Iterator iter = current.iterator(); iter.hasNext();) {        		Object o = iter.next();        		if (!list.contains(o)) list.add(o);        	}        }        IReactionSet reactionSet = chemModel.getReactionSet();        if (reactionSet != null) {        	list.add(reactionSet);            List current = ReactionSetManipulator.getAllChemObjects(reactionSet);        	for (Iterator iter = current.iterator(); iter.hasNext();) {        		Object o = iter.next();        		if (!list.contains(o)) list.add(o);        	}        }		return list;	}	public static List getAllIDs(IChemModel chemModel) {		ArrayList list = new ArrayList();		if (chemModel.getID() != null) list.add(chemModel.getID());        ICrystal crystal = chemModel.getCrystal();        if (crystal != null) {            list.addAll(AtomContainerManipulator.getAllIDs(crystal));        }        IMoleculeSet moleculeSet = chemModel.getMoleculeSet();        if (moleculeSet != null) {        	list.addAll(MoleculeSetManipulator.getAllIDs(moleculeSet));        }        IReactionSet reactionSet = chemModel.getReactionSet();        if (reactionSet != null) {        	list.addAll(ReactionSetManipulator.getAllIDs(reactionSet));        }		return list;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -