From: <mig...@us...> - 2007-11-07 14:04:58
|
Revision: 9395 http://cdk.svn.sourceforge.net/cdk/?rev=9395&view=rev Author: miguelrojasch Date: 2007-11-07 06:04:55 -0800 (Wed, 07 Nov 2007) Log Message: ----------- Manipulator of MolecularFormulaSet. Added two methods for extract the maximim and minimum occurrence of IElements from a set of IMolecularFormula. And tests. Modified Paths: -------------- branches/miguelrojasch/mf/src/org/openscience/cdk/tools/manipulator/MolecularFormulaSetManipulator.java Added Paths: ----------- branches/miguelrojasch/mf/src/org/openscience/cdk/test/tools/manipulator/FormulaMolecularManipulatorSetTest.java Added: branches/miguelrojasch/mf/src/org/openscience/cdk/test/tools/manipulator/FormulaMolecularManipulatorSetTest.java =================================================================== --- branches/miguelrojasch/mf/src/org/openscience/cdk/test/tools/manipulator/FormulaMolecularManipulatorSetTest.java (rev 0) +++ branches/miguelrojasch/mf/src/org/openscience/cdk/test/tools/manipulator/FormulaMolecularManipulatorSetTest.java 2007-11-07 14:04:55 UTC (rev 9395) @@ -0,0 +1,155 @@ +/* $Revision: 8975 $ $Author: egonw $ $Date: 2007-09-26 21:14:28 +0200 (Wed, 26 Sep 2007) $ + * + * Copyright (C) 2005-2007 Miguel Rojasch <mig...@us...> + * + * Contact: cdk...@li... + * + * 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. + * + * 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.test.tools.manipulator; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.openscience.cdk.DefaultChemObjectBuilder; +import org.openscience.cdk.interfaces.IMolecularFormula; +import org.openscience.cdk.interfaces.IMolecularFormulaSet; +import org.openscience.cdk.test.CDKTestCase; +import org.openscience.cdk.tools.manipulator.MolecularFormulaSetManipulator; + +/** + * @cdk.module test-standard + */ +public class FormulaMolecularManipulatorSetTest extends CDKTestCase { + + private DefaultChemObjectBuilder builder; + + /** + * Constructor for the FormulaMolecularManipulatorSetTest object + * + *@param name Description of the Parameter + */ + public FormulaMolecularManipulatorSetTest(String name){ + + super(name); + } + + /** + * The JUnit setup method + */ + public void setUp(){ + builder = DefaultChemObjectBuilder.getInstance(); + } + + /** + * A unit test suite for JUnit + * + * @return The test suite + */ + public static Test suite() { + + TestSuite suite = new TestSuite(FormulaMolecularManipulatorSetTest.class); + return suite; + } + + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + public void testGetMaxOccurrenceElements() { + IMolecularFormula mf1 = builder.newMolecularFormula(); /*C4H12NO4*/ + mf1.addElement(builder.newElement("C"), 4); + mf1.addElement(builder.newElement("H"), 12); + mf1.addElement(builder.newElement("N"), 1); + mf1.addElement(builder.newElement("O"), 4); + + + IMolecularFormula mf2 = builder.newMolecularFormula(); /*C7H20N4O2*/ + mf2.addElement(builder.newElement("C"), 7); + mf2.addElement(builder.newElement("H"), 20); + mf2.addElement(builder.newElement("N"), 4); + mf2.addElement(builder.newElement("O"), 2); + + + IMolecularFormula mf3 = builder.newMolecularFormula(); /*C9H5O7*/ + mf3.addElement(builder.newElement("C"), 9); + mf3.addElement(builder.newElement("H"), 5); + mf3.addElement(builder.newElement("O"), 7); + + IMolecularFormulaSet mfSet = builder.newMolecularFormulaSet(); + mfSet.addMolecularFormula(mf1); + mfSet.addMolecularFormula(mf2); + mfSet.addMolecularFormula(mf3); + + IMolecularFormula molecularFormula = MolecularFormulaSetManipulator.getMaxOccurrenceElements(mfSet); + + /* Result: C9H20N4O7 */ + + assertEquals(4, molecularFormula.getElementCount()); + assertEquals(40, molecularFormula.getAtomCount()); + assertEquals(9, molecularFormula.getAtomCount(builder.newElement("C"))); + assertEquals(20, molecularFormula.getAtomCount(builder.newElement("H"))); + assertEquals(4, molecularFormula.getAtomCount(builder.newElement("N"))); + assertEquals(7, molecularFormula.getAtomCount(builder.newElement("O"))); + + } + + + + /** + * A unit test suite for JUnit. + * + * @return The test suite + */ + public void testGetMinOccurrenceElements() { + IMolecularFormula mf1 = builder.newMolecularFormula(); /*C4H12NO4*/ + mf1.addElement(builder.newElement("C"), 4); + mf1.addElement(builder.newElement("H"), 12); + mf1.addElement(builder.newElement("N"), 1); + mf1.addElement(builder.newElement("O"), 4); + + + IMolecularFormula mf2 = builder.newMolecularFormula(); /*C7H20N4O2*/ + mf2.addElement(builder.newElement("C"), 7); + mf2.addElement(builder.newElement("H"), 20); + mf2.addElement(builder.newElement("N"), 4); + mf2.addElement(builder.newElement("O"), 2); + + + IMolecularFormula mf3 = builder.newMolecularFormula(); /*C9H5O7*/ + mf3.addElement(builder.newElement("C"), 9); + mf3.addElement(builder.newElement("H"), 5); + mf3.addElement(builder.newElement("O"), 7); + + IMolecularFormulaSet mfSet = builder.newMolecularFormulaSet(); + mfSet.addMolecularFormula(mf1); + mfSet.addMolecularFormula(mf2); + mfSet.addMolecularFormula(mf3); + + IMolecularFormula molecularFormula = MolecularFormulaSetManipulator.getMinOccurrenceElements(mfSet); + + /* Result: C4H5NO2 */ + + assertEquals(4, molecularFormula.getElementCount()); + assertEquals(12, molecularFormula.getAtomCount()); + assertEquals(4, molecularFormula.getAtomCount(builder.newElement("C"))); + assertEquals(5, molecularFormula.getAtomCount(builder.newElement("H"))); + assertEquals(1, molecularFormula.getAtomCount(builder.newElement("N"))); + assertEquals(2, molecularFormula.getAtomCount(builder.newElement("O"))); + + } +} + Modified: branches/miguelrojasch/mf/src/org/openscience/cdk/tools/manipulator/MolecularFormulaSetManipulator.java =================================================================== --- branches/miguelrojasch/mf/src/org/openscience/cdk/tools/manipulator/MolecularFormulaSetManipulator.java 2007-11-07 13:22:43 UTC (rev 9394) +++ branches/miguelrojasch/mf/src/org/openscience/cdk/tools/manipulator/MolecularFormulaSetManipulator.java 2007-11-07 14:04:55 UTC (rev 9395) @@ -27,22 +27,89 @@ * */ package org.openscience.cdk.tools.manipulator; +import java.util.Iterator; +import org.openscience.cdk.interfaces.IElement; +import org.openscience.cdk.interfaces.IMolecularFormula; +import org.openscience.cdk.interfaces.IMolecularFormulaSet; + + /** * Class with convenience methods that provide methods to manipulate * MolecularFormulaSet's. For example: * <pre> - * MolecularManipulatorSet.getMaxElements(molecularFormula); + * IMolecularFormula molecularFormula = MolecularManipulatorSet.getMaxOccurrenceElements(molecularFormulaSet); * </pre> * . * * @cdk.module standard * - * @author Miguel Rojas + * @author rojasm * @cdk.created 2007-11-01 */ public class MolecularFormulaSetManipulator { + /** + * Extract from a set of MolecularFormula the maximum occurrence of each element found and + * put the element and occurrence in a new IMolecularFormula. + * + * @param mfSet The set of molecularFormules to inspect + * @return A IMolecularFormula containing the maximum occurrence of the elements + * @see #getMinOccurrenceElements(IMolecularFormulaSet) + */ + public static IMolecularFormula getMaxOccurrenceElements(IMolecularFormulaSet mfSet){ + Iterator<IMolecularFormula> iterMF = mfSet.molecularFormulas(); + IMolecularFormula molecularFormula = mfSet.getBuilder().newMolecularFormula(); + while(iterMF.hasNext()){ + IMolecularFormula mf = iterMF.next(); + Iterator<IElement> iterEle = mf.elements(); + while(iterEle.hasNext()){ + IElement element = iterEle.next(); + int occur_new = mf.getAtomCount(element); + if(!molecularFormula.contains(element)){ + molecularFormula.addElement(element,occur_new); + }else{ + int occur_old = molecularFormula.getAtomCount(element); + if(occur_new > occur_old){ + molecularFormula.removeElement(element); + molecularFormula.addElement(element, occur_new); + } + } + } + } + return molecularFormula; + } + /** + * Extract from a set of MolecularFormula the minimal occurrence of each element found and + * put the element and occurrence in a new IMolecularFormula. + * + * @param mfSet The set of molecularFormules to inspect + * @return A IMolecularFormula containing the minimal occurrence of the elements + * @see #getMaxOccurrenceElements(IMolecularFormulaSet) + */ + public static IMolecularFormula getMinOccurrenceElements(IMolecularFormulaSet mfSet){ + Iterator<IMolecularFormula> iterMF = mfSet.molecularFormulas(); + IMolecularFormula molecularFormula = mfSet.getBuilder().newMolecularFormula(); + while(iterMF.hasNext()){ + IMolecularFormula mf = iterMF.next(); + Iterator<IElement> iterEle = mf.elements(); + while(iterEle.hasNext()){ + IElement element = iterEle.next(); + int occur_new = mf.getAtomCount(element); + if(!molecularFormula.contains(element)){ + molecularFormula.addElement(element,occur_new); + }else{ + int occur_old = molecularFormula.getAtomCount(element); + if(occur_new < occur_old){ + molecularFormula.removeElement(element); + molecularFormula.addElement(element, occur_new); + } + } + } + } + return molecularFormula; + } + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |