From: <mig...@us...> - 2008-02-26 16:44:22
|
Revision: 10259 http://cdk.svn.sourceforge.net/cdk/?rev=10259&view=rev Author: miguelrojasch Date: 2008-02-26 08:43:29 -0800 (Tue, 26 Feb 2008) Log Message: ----------- updated all methods to MolecularFormulaManipulator. Removed the MFAnalyser. Modified Paths: -------------- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/applications/jchempaint/JChemPaintModel.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/config/IsotopeFactory.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/fingerprint/ExtendedFingerprinter.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/io/ShelXWriter.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/AutocorrelationDescriptorMass.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/MomentOfInertiaDescriptor.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/VAdjMaDescriptor.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/structgen/deterministic/GENMDeterministicGenerator.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/DeAromatizationTool.java branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/config/IsotopeFactoryTest.java branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/modulesuites/MformulaTests.java branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/structgen/SingleStructureRandomGeneratorTest.java branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/CDKHydrogenAdderTest.java branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/manipulator/AtomContainerManipulatorTest.java Removed Paths: ------------- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/MFAnalyser.java branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/MFAnalyserTest.java Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/applications/jchempaint/JChemPaintModel.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/applications/jchempaint/JChemPaintModel.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/applications/jchempaint/JChemPaintModel.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -35,13 +35,13 @@ import javax.swing.event.ChangeListener; import javax.swing.event.EventListenerList; -import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.controller.Controller2DModel; import org.openscience.cdk.event.ICDKChangeListener; +import org.openscience.cdk.formula.MolecularFormulaManipulator; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.renderer.Renderer2DModel; -import org.openscience.cdk.tools.MFAnalyser; import org.openscience.cdk.tools.manipulator.ChemModelManipulator; /** @@ -227,11 +227,11 @@ else if (position == 1) { // depict bruto formula IAtomContainer wholeModel = model.getBuilder().newAtomContainer(); - Iterator containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); + Iterator<IAtomContainer> containers = ChemModelManipulator.getAllAtomContainers(model).iterator(); while (containers.hasNext()) { - wholeModel.add((IAtomContainer)containers.next()); + wholeModel.add(containers.next()); } - String formula = new MFAnalyser(wholeModel,true).getHTMLMolecularFormulaWithCharge(); + String formula = MolecularFormulaManipulator.getHTML(MolecularFormulaManipulator.getMolecularFormula(wholeModel),true,false); int impliciths=0; for(int i=0;i<wholeModel.getAtomCount();i++){ if(wholeModel.getAtom(i).getHydrogenCount()==null) @@ -244,7 +244,7 @@ // depict brutto formula of the selected molecule or part of molecule if (rendererModel.getSelectedPart() != null) { IAtomContainer selectedPart = rendererModel.getSelectedPart(); - String formula = new MFAnalyser(selectedPart,true).getHTMLMolecularFormulaWithCharge(); + String formula = MolecularFormulaManipulator.getHTML(MolecularFormulaManipulator.getMolecularFormula(selectedPart),true,false); status = "<html>" + formula + "</html>"; } } Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/config/IsotopeFactory.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/config/IsotopeFactory.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/config/IsotopeFactory.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -335,6 +335,26 @@ configure(container.getAtom(f)); } } + /** + * Gets the natural mass of this element, defined as average of masses of isotopes, + * weighted by abundance. + * + * @param element Description of the Parameter + * @return The natural mass value + */ + @TestMethod("testGetNaturalMass_IElement") + public double getNaturalMass(IElement element){ + IIsotope[] isotopes = getIsotopes(element.getSymbol()); + double summedAbundances = 0; + double summedWeightedAbundances = 0; + double getNaturalMass = 0; + for (int i = 0; i < isotopes.length; i++) { + summedAbundances += isotopes[i].getNaturalAbundance(); + summedWeightedAbundances += isotopes[i].getNaturalAbundance() * isotopes[i].getExactMass(); + getNaturalMass = summedWeightedAbundances / summedAbundances; + } + return getNaturalMass; + } } Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/fingerprint/ExtendedFingerprinter.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/fingerprint/ExtendedFingerprinter.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/fingerprint/ExtendedFingerprinter.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -24,16 +24,16 @@ */ package org.openscience.cdk.fingerprint; +import java.util.BitSet; + import org.openscience.cdk.annotations.TestClass; import org.openscience.cdk.annotations.TestMethod; +import org.openscience.cdk.formula.MolecularFormulaManipulator; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IRing; import org.openscience.cdk.interfaces.IRingSet; import org.openscience.cdk.ringsearch.AllRingsFinder; -import org.openscience.cdk.tools.MFAnalyser; -import java.util.BitSet; - /** * Generates an extended fingerprint for a given AtomContainer, that * extends the Fingerprinter with additional bits describing ring @@ -107,8 +107,7 @@ public BitSet getFingerprint(IAtomContainer ac, IRingSet rs) throws Exception { BitSet bs = fingerprinter.getFingerprint(ac); int size = this.getSize(); - MFAnalyser mfa=new MFAnalyser(ac); - float weight=mfa.getNaturalMass(); + double weight = MolecularFormulaManipulator.getTotalNaturalAbundance(MolecularFormulaManipulator.getMolecularFormula(ac)); for(int i=1;i<11;i++){ if(weight>(100*i)) bs.set(size-26+i); // 26 := RESERVED_BITS+1 Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/io/ShelXWriter.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/io/ShelXWriter.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/io/ShelXWriter.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -36,14 +36,16 @@ import org.openscience.cdk.CDKConstants; import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.formula.IMolecularFormula; +import org.openscience.cdk.formula.MolecularFormulaManipulator; import org.openscience.cdk.geometry.CrystalGeometryTools; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IChemObject; import org.openscience.cdk.interfaces.ICrystal; +import org.openscience.cdk.interfaces.IElement; import org.openscience.cdk.io.formats.IResourceFormat; import org.openscience.cdk.io.formats.ShelXFormat; import org.openscience.cdk.tools.FormatStringBuffer; -import org.openscience.cdk.tools.MFAnalyser; /** * <p>Serializes a MoleculeSet or a Molecule object to ShelX code. @@ -169,15 +171,17 @@ write("SYMM -X , 1/2+Y , 1/2-Z\n"); write("SYMM 1/2-X , -Y , 1/2+Z\n"); } - MFAnalyser mfa = new MFAnalyser(crystal); +// MFAnalyser mfa = new MFAnalyser(crystal); String elemNames = ""; String elemCounts = ""; - List asortedElements = mfa.getElements(); - Iterator elements = asortedElements.iterator(); + IMolecularFormula formula = MolecularFormulaManipulator.getMolecularFormula(crystal); + List<IElement> asortedElements = MolecularFormulaManipulator.elements(formula); + Iterator<IElement> elements = asortedElements.iterator(); while (elements.hasNext()) { - String symbol = (String)elements.next(); + IElement element = elements.next(); + String symbol = element.getSymbol(); elemNames += symbol + " ".substring(symbol.length()); - String countS = new Integer(mfa.getAtomCount(symbol)).toString(); + String countS = new Integer(MolecularFormulaManipulator.getElementCount(formula, element)).toString(); elemCounts += countS + " ".substring(countS.length()); } write("SFAC " + elemNames + "\n"); Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/AutocorrelationDescriptorMass.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/AutocorrelationDescriptorMass.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/AutocorrelationDescriptorMass.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -20,6 +20,9 @@ */ package org.openscience.cdk.qsar.descriptors.molecular; +import org.openscience.cdk.ChemObject; +import org.openscience.cdk.Element; +import org.openscience.cdk.config.IsotopeFactory; import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.graph.matrix.TopologicalMatrix; import org.openscience.cdk.interfaces.IAtomContainer; @@ -30,7 +33,6 @@ import org.openscience.cdk.qsar.result.DoubleArrayResult; import org.openscience.cdk.qsar.result.DoubleArrayResultType; import org.openscience.cdk.qsar.result.IDescriptorResult; -import org.openscience.cdk.tools.MFAnalyser; /** * This class calculates ATS autocorrelation descriptor, where the weight equal @@ -56,7 +58,8 @@ private static double scaledAtomicMasses(IElement element) throws java.io.IOException, ClassNotFoundException { - double realmasses = MFAnalyser.getNaturalMass(element); + IsotopeFactory isofac = IsotopeFactory.getInstance(new ChemObject().getBuilder()); + double realmasses = isofac.getNaturalMass(new Element("H")); return (realmasses / CARBON_MASS); } Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/MomentOfInertiaDescriptor.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/MomentOfInertiaDescriptor.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/MomentOfInertiaDescriptor.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -23,6 +23,8 @@ import org.openscience.cdk.config.IsotopeFactory; import org.openscience.cdk.exception.CDKException; +import org.openscience.cdk.formula.IMolecularFormula; +import org.openscience.cdk.formula.MolecularFormulaManipulator; import org.openscience.cdk.geometry.GeometryToolsInternalCoordinates; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.qsar.DescriptorSpecification; @@ -32,7 +34,6 @@ import org.openscience.cdk.qsar.result.DoubleArrayResultType; import org.openscience.cdk.qsar.result.IDescriptorResult; import org.openscience.cdk.tools.LoggingTool; -import org.openscience.cdk.tools.MFAnalyser; import Jama.EigenvalueDecomposition; import Jama.Matrix; @@ -231,10 +232,10 @@ // finally get the radius of gyration double pri = 0.0; - MFAnalyser mfa = new MFAnalyser(container); + IMolecularFormula formula = MolecularFormulaManipulator.getMolecularFormula(container); if (Math.abs(eval[2]) > eps) pri = Math.pow(eval[0] * eval[1] * eval[2], 1.0 / 3.0); - else pri = Math.sqrt(eval[0] * ccf / mfa.getMass()); - retval.add(Math.sqrt(Math.PI * 2 * pri * ccf / mfa.getMass())); + else pri = Math.sqrt(eval[0] * ccf / MolecularFormulaManipulator.getTotalNaturalAbundance(formula)); + retval.add(Math.sqrt(Math.PI * 2 * pri * ccf / MolecularFormulaManipulator.getTotalNaturalAbundance(formula))); String[] names = { "MOMI-X", "MOMI-Y", "MOMI-Z", Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/VAdjMaDescriptor.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/VAdjMaDescriptor.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/qsar/descriptors/molecular/VAdjMaDescriptor.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -31,7 +31,7 @@ import org.openscience.cdk.qsar.IMolecularDescriptor; import org.openscience.cdk.qsar.result.DoubleResult; import org.openscience.cdk.qsar.result.IDescriptorResult; -import org.openscience.cdk.tools.MFAnalyser; +import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; /** * Vertex adjacency information (magnitude): @@ -113,8 +113,7 @@ *@exception CDKException Possible Exceptions */ public DescriptorValue calculate(IAtomContainer atomContainer) throws CDKException { - MFAnalyser formula = new MFAnalyser(atomContainer); - int magnitude = formula.getHeavyAtoms().size(); + int magnitude = AtomContainerManipulator.getHeavyAtoms(atomContainer).size(); double vadjMa = 0; if (magnitude > 0) { vadjMa += (Math.log(magnitude) / Math.log(2)) + 1; Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/structgen/deterministic/GENMDeterministicGenerator.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/structgen/deterministic/GENMDeterministicGenerator.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/structgen/deterministic/GENMDeterministicGenerator.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -25,6 +25,8 @@ import java.util.ArrayList; import java.util.List; +import org.openscience.cdk.formula.IMolecularFormula; +import org.openscience.cdk.formula.MolecularFormulaManipulator; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IBond; import org.openscience.cdk.interfaces.IChemObjectBuilder; @@ -32,7 +34,6 @@ import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; import org.openscience.cdk.structgen.IStructureGenerationListener; import org.openscience.cdk.tools.LoggingTool; -import org.openscience.cdk.tools.MFAnalyser; /** @@ -117,7 +118,6 @@ numberOfSetFragment=0; numberOfStructures=0; logger.debug(mf); - MFAnalyser mfa = new MFAnalyser(mf, builder.newAtomContainer()); molecularFormula=new int[12]; numberOfBasicUnit=new int[23]; numberOfBasicFragment=new int[34]; @@ -129,7 +129,7 @@ else structureout = null; initializeParameters(); - analyseMolecularFormula(mfa); + analyseMolecularFormula(MolecularFormulaManipulator.getMolecularFormula(mf)); } @@ -256,19 +256,19 @@ * * @param mfa MFAnalyser object to operate the molecular formula */ - public void analyseMolecularFormula(MFAnalyser mfa) throws java.lang.Exception + public void analyseMolecularFormula(IMolecularFormula formula) throws java.lang.Exception { - molecularFormula[1]=mfa.getAtomCount("C"); - molecularFormula[2]=mfa.getAtomCount("H"); - molecularFormula[3]=mfa.getAtomCount("O"); - molecularFormula[4]=mfa.getAtomCount("N"); - molecularFormula[5]=mfa.getAtomCount("S"); - molecularFormula[6]=mfa.getAtomCount("P"); - molecularFormula[7]=mfa.getAtomCount("Si"); - molecularFormula[8]=mfa.getAtomCount("F"); - molecularFormula[9]=mfa.getAtomCount("Cl"); - molecularFormula[10]=mfa.getAtomCount("Br"); - molecularFormula[11]=mfa.getAtomCount("I"); + molecularFormula[1]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("C")); + molecularFormula[2]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("H")); + molecularFormula[3]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("O")); + molecularFormula[4]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("N")); + molecularFormula[5]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("S")); + molecularFormula[6]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("P")); + molecularFormula[7]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("Si")); + molecularFormula[8]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("F")); + molecularFormula[9]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("Cl")); + molecularFormula[10]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("Br")); + molecularFormula[11]= MolecularFormulaManipulator.getElementCount(formula, builder.newElement("I")); molecularFormula[0]=2*molecularFormula[1]+molecularFormula[4]+molecularFormula[6]+ 2*molecularFormula[7]+2-molecularFormula[2]-molecularFormula[8]-molecularFormula[9]- Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/DeAromatizationTool.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/DeAromatizationTool.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/DeAromatizationTool.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -28,16 +28,18 @@ */ package org.openscience.cdk.tools; +import java.util.Iterator; + import org.openscience.cdk.CDKConstants; +import org.openscience.cdk.Element; import org.openscience.cdk.annotations.TestClass; import org.openscience.cdk.annotations.TestMethod; +import org.openscience.cdk.formula.IMolecularFormula; +import org.openscience.cdk.formula.MolecularFormulaManipulator; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IBond; import org.openscience.cdk.interfaces.IRing; -import java.util.Iterator; -import java.util.Map; - /** * Methods that takes a ring of which all bonds are aromatic, and assigns single * and double bonds. It does this in a non-general way by looking at the ring @@ -75,18 +77,19 @@ ring.getBond(i).setOrder(IBond.Order.SINGLE); } boolean result = false; - Map elementCounts = new MFAnalyser(ring).getFormulaHashtable(); + IMolecularFormula formula = MolecularFormulaManipulator.getMolecularFormula(ring); +// Map elementCounts = new MFAnalyser(ring).getFormulaHashtable(); if (ring.getRingSize() == 6) { - if (((Integer)elementCounts.get("C")).intValue() == 6) { + if (MolecularFormulaManipulator.getElementCount(formula, new Element("C")) == 6) { result = DeAromatizationTool.deAromatizeBenzene(ring); - } else if (((Integer)elementCounts.get("C")).intValue() == 5 && - ((Integer)elementCounts.get("N")).intValue() == 1) { + } else if (MolecularFormulaManipulator.getElementCount(formula, new Element("C")) == 5 && + MolecularFormulaManipulator.getElementCount(formula, new Element("N")) == 1) { result = DeAromatizationTool.deAromatizePyridine(ring); } } if (ring.getRingSize() == 5) { - if (((Integer)elementCounts.get("C")).intValue() == 4 && - ((Integer)elementCounts.get("N")).intValue() == 1) { + if (MolecularFormulaManipulator.getElementCount(formula, new Element("C")) == 4 && + MolecularFormulaManipulator.getElementCount(formula, new Element("N")) == 1) { result= deAromatizePyrolle(ring); } } Deleted: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/MFAnalyser.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/MFAnalyser.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/MFAnalyser.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -1,708 +0,0 @@ -/* $Revision$ $Author$ $Date$ - * - * Copyright (C) 2002-2007 Christoph Steinbeck - * - * 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. - * 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; - -import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.config.AtomTypeFactory; -import org.openscience.cdk.config.IsotopeFactory; -import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.formula.IMolecularFormula; -import org.openscience.cdk.interfaces.*; -import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; - -import java.io.IOException; -import java.util.*; - -/** - * Analyses a molecular formula given in String format and builds - * an AtomContainer with the Atoms in the molecular formula. - * - * About implict H handling: By default the methods to calculate formula, natural and canonical mass - * use the explicit Hs and only the explicit Hs if there is at least one in the molecule, implicit Hs are - * ignored. If there is no explicit H and only then the implicit Hs are used. If you use the constructor - * MFAnalyser(IAtomContainer ac, boolean useboth) and set useboth to true, all explicit Hs and all implicit Hs are used, - * the implicit ones also on atoms with explicit Hs. - * - * @author Christoph Steinbeck - * @author Stefan Kuhn - * @author Egon Willighagen - * @cdk.created MFAnalyser - * @cdk.module formula - * @cdk.svnrev $Revision$ - * @cdk.keyword molecule, molecular mass - * @cdk.keyword molecule, molecular formula - * @cdk.keyword molecule, double bond equivalents - */ -public class MFAnalyser { - - private final static String H_ELEMENT_SYMBOL = "H"; - - private String stringMF; - private IMolecularFormula molecularFormula; - private IAtomContainer atomContainer; - private int HCount = 0; - private boolean useboth=false; - - private LoggingTool logger = new LoggingTool(MFAnalyser.class); - - - /** - * Construct an instance of MFAnalyser, initialized with a molecular - * formula string. The string is immediatly analysed and a set of Nodes - * is built based on this analysis - * - * @param stringMF Description of the Parameter - * @param target TODO - */ - public MFAnalyser(String stringMF, IAtomContainer target) { - this.stringMF = stringMF; - this.atomContainer = analyseMF(stringMF, target); - } - - - /** - * Construct an instance of MFAnalyser, initialized with a set of Nodes - * The set is analysed and a molecular formular is constructed - * based on this analysis - * - * @param ac Description of the Parameter - */ - public MFAnalyser(IAtomContainer ac) { - this(ac,false); - } - - /** - * Construct an instance of MFAnalyser, initialized with a set of Nodes - * The set is analysed and a molecular formular is constructed - * based on this analysis - * - * @param ac Description of the Parameter - * @param useboth true=implicit and explicit hs will be used, false=explicit used, implicit only if no explicit - */ - public MFAnalyser(IAtomContainer ac, boolean useboth) { - this.useboth=useboth; - this.atomContainer = ac; - this.stringMF = analyseAtomContainer(ac); - } - - - /** - * returns the complete set of Nodes, as implied by the molecular - * formula, including all the hydrogens. - * - * @return The atomContainer value - */ - public IAtomContainer getAtomContainer() { - return atomContainer; - } - - - /** - * Returns the complete set of Nodes, as implied by the molecular - * formula, including all the hydrogens. - * - * @return The molecularFormula value - * @see #getHTMLMolecularFormula() - */ - public String getMolecularFormula() { - return stringMF; - } - - - /** - * Returns the string representation of the molecule formula with - * numbers wrapped in <sub></sub> tags. Useful for displaying - * formulae in Swing components or on the web. - * - * @return A HTML representation of the molecular formula. - */ - public String getHTMLMolecularFormula() { - boolean lastCharacterWasDigit = false; - boolean currentCharacterIsDigit; - StringBuffer htmlString = new StringBuffer(stringMF); - - for (int characterCounter = 0; characterCounter <= htmlString.length(); characterCounter++) { - try { - currentCharacterIsDigit = Character.isDigit(htmlString.charAt(characterCounter)); - } catch (StringIndexOutOfBoundsException oobe) { - currentCharacterIsDigit = false; - } - - if (currentCharacterIsDigit && !lastCharacterWasDigit) { - //Insert an opening sub and move the counter beyond it - htmlString.insert(characterCounter, "<sub>"); - characterCounter += 5; - } else if (lastCharacterWasDigit && !currentCharacterIsDigit) { - //Insert a closing sub and move the counter beyond it - htmlString.insert(characterCounter, "</sub>"); - characterCounter += 6; - } - - lastCharacterWasDigit = currentCharacterIsDigit; - } - - return htmlString.toString(); - } - - - /** - * Returns the number of double bond equivalents in this molecule. - * - * @return The number of DBEs - * @cdk.keyword DBE - * @cdk.keyword double bond equivalent - */ - public float getDBE() throws IOException, ClassNotFoundException, CDKException{ - int valencies[]=new int[5]; - AtomTypeFactory factory = AtomTypeFactory.getInstance("org/openscience/cdk/config/data/structgen_atomtypes.xml", getAtomContainer().getBuilder()); - IAtomContainer ac = getAtomContainer(); - for (int f = 0; f < ac.getAtomCount(); f++) { - IAtomType[] types = factory.getAtomTypes(ac.getAtom(f).getSymbol()); - if(types.length==0) - throw new CDKException("Calculation of double bond equivalents not possible due to problems with element "+ac.getAtom(f).getSymbol()); - valencies[(int)types[0].getBondOrderSum().intValue()+ac.getAtom(f).getFormalCharge()]++; - } - return 1 + (valencies[4]) + (valencies[3] /2) - (valencies[1] /2); - } - - - /** - * returns the exact mass for a given molecular formula, using major isotope for each element. - * - * @return The mass value - */ - public float getMass() { - float mass = 0; - IIsotope i; - IsotopeFactory si = null; - try { - si = IsotopeFactory.getInstance(getAtomContainer().getBuilder()); - } catch (Exception exception) { - System.err.println("Could not instantiate the IsotopeFactory: " + exception.getMessage()); - } - IAtomContainer ac = getAtomContainer(); - IIsotope h = si.getMajorIsotope(H_ELEMENT_SYMBOL); - for (int f = 0; f < ac.getAtomCount(); f++) { - i = si.getMajorIsotope(ac.getAtom(f).getSymbol()); - if (i != null) { - mass += i.getExactMass(); - } else { - return 0; - } - int hcount = 0; - if (ac.getAtom(f).getHydrogenCount() != CDKConstants.UNSET) hcount = ac.getAtom(f).getHydrogenCount(); - mass += hcount * h.getExactMass(); - } - return mass; - } - - - /** - * Gets the natural mass of this element, defined as average of masses of isotopes, weighted by abundance. - * - * @param element Description of the Parameter - * @return The natural mass value - * @exception java.io.IOException Description of the Exception - * @exception ClassNotFoundException Description of the Exception - */ - public static double getNaturalMass(IElement element) throws java.io.IOException, ClassNotFoundException { - IIsotope[] isotopes = IsotopeFactory.getInstance(element.getBuilder()).getIsotopes(element.getSymbol()); - double summedAbundances = 0; - double summedWeightedAbundances = 0; - double getNaturalMass = 0; - for (int i = 0; i < isotopes.length; i++) { - summedAbundances += isotopes[i].getNaturalAbundance(); - summedWeightedAbundances += isotopes[i].getNaturalAbundance() * isotopes[i].getExactMass(); - getNaturalMass = summedWeightedAbundances / summedAbundances; - } - return getNaturalMass; - } - - /** - * returns the exact mass for a given molecular formula, using weighted average of isotopes. - * - * @return The naturalMass value - * @exception java.io.IOException Description of the Exception - * @exception ClassNotFoundException Description of the Exception - */ - public float getNaturalMass() throws java.io.IOException, ClassNotFoundException { - float mass = 0; - IsotopeFactory si = null; - try { - si = IsotopeFactory.getInstance(getAtomContainer().getBuilder()); - } catch (Exception exception) { - System.err.println("Could not instantiate the IsotopeFactory: " + exception.getMessage()); - } - IAtomContainer ac = getAtomContainer(); - IIsotope h = si.getMajorIsotope("H"); - Map<String, Integer> symbols=this.getSymolMap(ac); - Iterator<String> it = symbols.keySet().iterator(); - while (it.hasNext()) { - String key = it.next(); - if (key.equals("H")){ - if(useboth){ - mass += MFAnalyser.getNaturalMass(h)*HCount; - }else{ - if (symbols.get(key) != null) { - mass += getNaturalMass(h)*symbols.get(key).intValue(); - } else { - mass += getNaturalMass(h)*HCount; - } - } - }else{ - IElement i = si.getElement(key); - mass += getNaturalMass(i)*symbols.get(key).intValue(); - } - } - return mass; - } - - - /** - * Produces an AtomContainer without explicit Hs but with H count from one with Hs. - * Hs bonded to more than one heavy atom are preserved. The new molecule is a deep copy. - * - * @return The mol without Hs. - * @cdk.keyword hydrogen, removal - */ - public IAtomContainer removeHydrogensPreserveMultiplyBonded() { - IAtomContainer ac = getAtomContainer(); - - List<IAtom> h = new ArrayList<IAtom>(); - // H list. - List<IAtom> multi_h = new ArrayList<IAtom>(); - // multiply bonded H - - // Find multiply bonded H. - int count = ac.getBondCount(); - for (int i = 0; - i < count; - i++) { - java.util.Iterator atoms = ac.getBond(i).atoms(); - while (atoms.hasNext()) { - final IAtom atom = (IAtom)atoms.next(); - if (atom.getSymbol().equals(H_ELEMENT_SYMBOL)) { - (h.contains(atom) ? multi_h : h).add(atom); - } - } - - // The short version (assumes atoms.length == 2 is always true). -// (h.contains(atoms[0]) ? multi_h : h).add(atoms[0]); -// (h.contains(atoms[1]) ? multi_h : h).add(atoms[1]); - } - - return removeHydrogens(multi_h); - } - - - /** - * Produces an AtomContainer without explicit Hs (except those listed) but with H count from one with Hs. - * The new molecule is a deep copy. - * - * @param preserve a list of H atoms to preserve. - * @return The mol without Hs. - * @cdk.keyword hydrogen, removal - */ - private IAtomContainer removeHydrogens(List<IAtom> preserve) { - IAtomContainer ac = getAtomContainer(); - - Map<IAtom,IAtom> map = new HashMap<IAtom,IAtom>(); - // maps original atoms to clones. - List<IAtom> remove = new ArrayList<IAtom>(); - // lists removed Hs. - - // Clone atoms except those to be removed. - IMolecule mol = ac.getBuilder().newMolecule(); - int count = ac.getAtomCount(); - for (int i = 0; - i < count; - i++) { - // Clone/remove this atom? - IAtom atom = ac.getAtom(i); - if (!atom.getSymbol().equals(H_ELEMENT_SYMBOL) || preserve.contains(atom)) { - IAtom a = null; - try { - a = (IAtom) atom.clone(); - } catch (CloneNotSupportedException e) { - logger.error("Could not clone: ", atom); - logger.debug(e); - } - a.setHydrogenCount(0); - mol.addAtom(a); - map.put(atom, a); - } else { - remove.add(atom); - // maintain list of removed H. - } - } - - // Clone bonds except those involving removed atoms. - count = ac.getBondCount(); - for (int i = 0; - i < count; - i++) { - // Check bond. - final IBond bond = ac.getBond(i); - IAtom atom0 = bond.getAtom(0); - IAtom atom1 = bond.getAtom(1); - java.util.Iterator atoms = bond.atoms(); - boolean remove_bond = false; - while (atoms.hasNext()){ - if (remove.contains((IAtom)atoms.next())) { - remove_bond = true; - break; - } - } - - // Clone/remove this bond? - if (!remove_bond) { - // if (!remove.contains(atoms[0]) && !remove.contains(atoms[1])) - - IBond clone = null; - try { - clone = (IBond) ac.getBond(i).clone(); - } catch (CloneNotSupportedException e) { - logger.error("Could not clone: ", ac.getBond(i)); - logger.debug(e); - } - clone.setAtoms(new IAtom[]{map.get(atom0), map.get(atom1)}); - mol.addBond(clone); - } - } - - // Recompute hydrogen counts of neighbours of removed Hydrogens. - for (Iterator<IAtom> i = remove.iterator(); - i.hasNext(); ) { - // Process neighbours. - for (Iterator n = ac.getConnectedAtomsList(i.next()).iterator(); - n.hasNext(); ) { - final IAtom neighb = map.get(n.next()); - neighb.setHydrogenCount(neighb.getHydrogenCount() + 1); - } - } - - return (mol); - } - - - /** - * Returns a set of nodes excluding all the hydrogens - * - * @return The heavyAtoms value - * @cdk.keyword hydrogen, removal - */ - public List<IAtom> getHeavyAtoms() { - List<IAtom> newAc = new ArrayList<IAtom>(); - IAtomContainer ac = getAtomContainer(); - for (int f = 0; f < ac.getAtomCount(); f++) { - if (!ac.getAtom(f).getSymbol().equals(H_ELEMENT_SYMBOL)) { - newAc.add(ac.getAtom(f)); - } - } - return newAc; - } - - - /** - * Method that actually does the work of analysing the molecular formula - * - * @param MF molecular formula to create an AtomContainer from - * @param ac AtomContainer in which the Atom's and Bond's will be stored - * @return the filled AtomContainer - */ - private IAtomContainer analyseMF(String MF, IAtomContainer ac) { - char ThisChar; - /* - * Buffer for - */ - String RecentElementSymbol = new String(); - String RecentElementCountString = new String("0"); - /* - * String to be converted to an integer - */ - int RecentElementCount; - - if (MF.length() == 0) { - return null; - } - - for (int f = 0; f < MF.length(); f++) { - ThisChar = MF.charAt(f); - if (f < MF.length()) { - if (ThisChar >= 'A' && ThisChar <= 'Z') { - /* - * New Element begins - */ - RecentElementSymbol = java.lang.String.valueOf(ThisChar); - RecentElementCountString = "0"; - } - if (ThisChar >= 'a' && ThisChar <= 'z') { - /* - * Two-letter Element continued - */ - RecentElementSymbol += ThisChar; - } - if (ThisChar >= '0' && ThisChar <= '9') { - /* - * Two-letter Element continued - */ - RecentElementCountString += ThisChar; - } - } - if (f == MF.length() - 1 || (MF.charAt(f + 1) >= 'A' && MF.charAt(f + 1) <= 'Z')) { - /* - * Here an element symbol as well as its number should have been read completely - */ - Integer RecentElementCountInteger = new Integer(RecentElementCountString); - RecentElementCount = RecentElementCountInteger.intValue(); - if (RecentElementCount == 0) { - RecentElementCount = 1; - } - for (int g = 0; g < RecentElementCount; g++) { - ac.addAtom(ac.getBuilder().newAtom(RecentElementSymbol)); - } - } - } - return ac; - } - - - /** - * creates a sorted hash map of elementsymbol-count of this ac - * - * @param ac the atomcontainer to calculate with - * @return the hashmap - */ - private Map<String, Integer> getSymolMap(IAtomContainer ac){ - String symbol; - SortedMap<String,Integer> symbols = new TreeMap<String,Integer>(); - IAtom atom = null; - HCount=0; - for (int f = 0; f < ac.getAtomCount(); f++) { - atom = ac.getAtom(f); - symbol = atom.getSymbol(); - if(useboth){ - - } - if (atom.getHydrogenCount() != CDKConstants.UNSET && atom.getHydrogenCount() > 0) { - HCount += atom.getHydrogenCount(); - } - if (symbols.get(symbol) != null) { - symbols.put(symbol, symbols.get(symbol) + 1); - } else { - symbols.put(symbol, 1); - } - } - if(useboth && symbols.get(H_ELEMENT_SYMBOL)!=null) - HCount+=symbols.get(H_ELEMENT_SYMBOL).intValue(); - return symbols; - } - - /** - * Analyses a set of Nodes that has been changed or recently loaded - * and returns a molecular formula - * - * @param ac Description of the Parameter - * @return a string containing the molecular formula. - */ - public String analyseAtomContainer(IAtomContainer ac) { - String mf = ""; - Map<String, Integer> symbols = this.getSymolMap(ac); - mf = addSymbolToFormula(symbols, "C", mf); - if(useboth){ - if (HCount > 0) - mf += H_ELEMENT_SYMBOL; - if (HCount > 1) { - mf += Integer.toString(HCount); - } - }else{ - if (symbols.get(H_ELEMENT_SYMBOL) != null) { - mf = addSymbolToFormula(symbols, H_ELEMENT_SYMBOL, mf); - } else { - if (HCount > 0) { - mf += H_ELEMENT_SYMBOL; - if (HCount > 1) { - mf += Integer.toString(HCount); - } - } - } - } - mf = addSymbolToFormula(symbols, "N", mf); - mf = addSymbolToFormula(symbols, "O", mf); - mf = addSymbolToFormula(symbols, "S", mf); - mf = addSymbolToFormula(symbols, "P", mf); - Iterator<String> it = symbols.keySet().iterator(); - while (it.hasNext()) { - Object key = it.next(); - if (!((String) key).equals("C") && !((String) key).equals(H_ELEMENT_SYMBOL) && !((String) key).equals("N") && !((String) key).equals("O") && !((String) key).equals("S") && !((String) key).equals("P")) { - mf = addSymbolToFormula(symbols, (String) key, mf); - } - } - return mf; - } - - - /** - * Adds an element to a chemical formual string - * - * @param sm The map containing the elements - * @param symbol The symbol to add - * @param formula The chemical formula - * @return Description of the Return Value - */ - private String addSymbolToFormula(Map<String, Integer> sm, String symbol, String formula) { - if (sm.get(symbol) != null) { - formula += symbol; - if (!sm.get(symbol).equals(new Integer(1))) { - formula += sm.get(symbol).toString(); - } - } - return (formula); - } - - - /** - * Checks a set of Nodes for the occurence of a particular - * element. - * - * @param thisElement Description of the Parameter - * @return The number of atoms for the particular element in the formula - */ - public int getAtomCount(String thisElement) { - int atomCount = 0; - if (thisElement.equals(H_ELEMENT_SYMBOL) && HCount > 0) { - return HCount; - } - for (int f = 0; f < atomContainer.getAtomCount(); f++) { - if (atomContainer.getAtom(f).getSymbol().equals(thisElement)) { - atomCount++; - } - } - return atomCount; - } - - - /** - * Returns a Vector (of Strings) with asorted element names. - * The order is determined by ElementComparator. - * - * @return The elements value - * @see ElementComparator - */ - public List<String> getElements() { - TreeSet<String> elements = new TreeSet<String>((Comparator<? super String>)new ElementComparator()); - for (int f = 0; f < atomContainer.getAtomCount(); f++) { - String symbol = atomContainer.getAtom(f).getSymbol(); - if (!elements.contains(symbol)) { - elements.add(symbol); - } - } - List<String> results = new ArrayList<String>(); - Iterator<String> iter = elements.iterator(); - while (iter.hasNext()) { - results.add(iter.next()); - } - return results; - } - - - /** - * Returns the number of distinct elements in the formula. - * - * @return The elementCount value - */ - public int getElementCount() { - return getElements().size(); - } - - - /** - * Gets a Molecule and an array of element symbols. Counts how many of each of these elements - * the molecule contains. Then it returns the elements followed by their number as a string, - * i.e. C15H8N3. - * - * @param mol The Molecule to be searched - * @param elements Description of the Parameter - * @return The element formula as a string - */ - public static String generateElementFormula(IMolecule mol, String[] elements) { - int num = elements.length; - StringBuffer formula = new StringBuffer(); - int[] elementCount = new int[num]; - for (int i = 0; i < mol.getAtomCount(); i++) { - for (int j = 0; j < num; j++) { - if (elements[j].equals(mol.getAtom(i).getSymbol())) { - elementCount[j]++; - } - } - } - for (int i = 0; i < num; i++) { - formula.append(elements[i] + elementCount[i]); - } - return formula.toString(); - } - - - /** - * Builds the elemental formula of a given molecule as a Hashtable. - * Keys are the elemental symbols (Strings) and values are the no. of occurrence (Integer objects). - * - * @return a Hashtable, keys are the elemental symbols and values are their no. - */ - public Map<String, Integer> getFormulaHashtable() { - Map<String, Integer> formula = new HashMap<String, Integer>(); - List<String> elements = this.getElements(); - for (int i = 0; i < elements.size(); i++) { - Integer numOfAtom = new Integer(this.getAtomCount(elements.get(i))); - formula.put(elements.get(i), numOfAtom); - } - return formula; - } - - /** - * - * Returns the string representation of the molecule formula with - * numbers wrapped in <sub></sub> tags and the total - * charge of AtomContainer in <sup></sup> tags - * Useful for displaying formulae in Swing components or on the web. - * - * @return The html-string representation of the sum formula with charge - * @see #getHTMLMolecularFormula() - */ - public String getHTMLMolecularFormulaWithCharge() { - String formula = new MFAnalyser(atomContainer,useboth).getHTMLMolecularFormula(); - int charge = AtomContainerManipulator.getTotalFormalCharge(atomContainer); - if (charge == 0) - { - return formula; - } else if (charge < 0) { - return formula + "<sup>" + charge * -1 + "-" + "</sup>"; - } else { - return formula + "<sup>" + charge +"+" + "</sup>"; - } - } -} - - Modified: branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java =================================================================== --- branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/main/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -572,10 +572,26 @@ return sum; } - @TestMethod("testGetMaxBondOrder") + @TestMethod("testGetMaxBondOrder_IAtomContainer") public static IBond.Order getMaximumBondOrder(IAtomContainer container) { return BondManipulator.getMaximumBondOrder(container.bonds()); } + /** + * Returns a set of nodes excluding all the hydrogens. + * + * @return The heavyAtoms value + * @cdk.keyword hydrogen, removal + */ + @TestMethod("testGetHeavyAtoms_IAtomContainer") + public static List<IAtom> getHeavyAtoms(IAtomContainer container) { + List<IAtom> newAc = new ArrayList<IAtom>(); + for (int f = 0; f < container.getAtomCount(); f++) { + if (!container.getAtom(f).getSymbol().equals("H")) { + newAc.add(container.getAtom(f)); + } + } + return newAc; + } } Modified: branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/config/IsotopeFactoryTest.java =================================================================== --- branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/config/IsotopeFactoryTest.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/config/IsotopeFactoryTest.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -30,6 +30,7 @@ import org.openscience.cdk.Atom; import org.openscience.cdk.AtomContainer; import org.openscience.cdk.ChemObject; +import org.openscience.cdk.Element; import org.openscience.cdk.config.AtomTypeFactory; import org.openscience.cdk.config.IsotopeFactory; import org.openscience.cdk.interfaces.IElement; @@ -291,5 +292,9 @@ } } + @Test public void testGetNaturalMass_IElement() throws Exception { + IsotopeFactory isofac = IsotopeFactory.getInstance(new ChemObject().getBuilder()); + Assert.assertEquals(1.0079760, isofac.getNaturalMass(new Element("H")), 0.1); + } } Modified: branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/modulesuites/MformulaTests.java =================================================================== --- branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/modulesuites/MformulaTests.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/modulesuites/MformulaTests.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -35,7 +35,6 @@ import org.openscience.cdk.formula.MolecularFormulaSetManipulatorTest; import org.openscience.cdk.formula.MolecularFormulaSetTest; import org.openscience.cdk.formula.MolecularFormulaTest; -import org.openscience.cdk.tools.MFAnalyserTest; /** * TestSuite that runs all the JUnit tests for the formula module. @@ -58,7 +57,6 @@ suite.addTest(new JUnit4TestAdapter(MolecularFormulaSetManipulatorTest.class)); suite.addTest(new JUnit4TestAdapter(MolecularFormulaSetTest.class)); suite.addTest(new JUnit4TestAdapter(MolecularFormulaTest.class)); - suite.addTest(new JUnit4TestAdapter(MFAnalyserTest.class)); return suite; } Modified: branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/structgen/SingleStructureRandomGeneratorTest.java =================================================================== --- branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/structgen/SingleStructureRandomGeneratorTest.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/structgen/SingleStructureRandomGeneratorTest.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -34,11 +34,10 @@ import org.openscience.cdk.Molecule; import org.openscience.cdk.applications.swing.MoleculeListViewer; import org.openscience.cdk.applications.swing.MoleculeViewer2D; +import org.openscience.cdk.formula.MolecularFormulaManipulator; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.layout.StructureDiagramGenerator; -import org.openscience.cdk.structgen.SingleStructureRandomGenerator; import org.openscience.cdk.templates.MoleculeFactory; -import org.openscience.cdk.tools.MFAnalyser; /** * @cdk.module test-structgen @@ -57,7 +56,7 @@ ssrg = new SingleStructureRandomGenerator(); System.out.println("Assining unbonded set of atoms"); AtomContainer ac = getBunchOfUnbondedAtoms(); - mf = new MFAnalyser(ac).getMolecularFormula(); + mf = MolecularFormulaManipulator.getString(MolecularFormulaManipulator.getMolecularFormula(ac)); System.out.println("Molecular Formula is: " + mf); ssrg.setAtomContainer(ac); } Modified: branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/CDKHydrogenAdderTest.java =================================================================== --- branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/CDKHydrogenAdderTest.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/CDKHydrogenAdderTest.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -20,29 +20,41 @@ */ package org.openscience.cdk.tools; +import java.io.InputStream; +import java.util.Iterator; +import java.util.List; + +import javax.vecmath.Point2d; + import junit.framework.Test; import junit.framework.TestSuite; -import org.openscience.cdk.*; + +import org.openscience.cdk.Atom; +import org.openscience.cdk.Bond; +import org.openscience.cdk.CDKConstants; +import org.openscience.cdk.CDKTestCase; +import org.openscience.cdk.ChemFile; +import org.openscience.cdk.ChemObject; +import org.openscience.cdk.Molecule; import org.openscience.cdk.atomtype.CDKAtomTypeMatcher; import org.openscience.cdk.config.Elements; import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.interfaces.*; +import org.openscience.cdk.formula.IMolecularFormula; +import org.openscience.cdk.formula.MolecularFormulaManipulator; +import org.openscience.cdk.interfaces.IAtom; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IAtomType; +import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IChemFile; +import org.openscience.cdk.interfaces.IMolecule; import org.openscience.cdk.io.MDLV2000Reader; import org.openscience.cdk.nonotify.NNAtom; import org.openscience.cdk.nonotify.NNMolecule; import org.openscience.cdk.nonotify.NoNotificationChemObjectBuilder; -import org.openscience.cdk.CDKTestCase; -import org.openscience.cdk.tools.CDKHydrogenAdder; -import org.openscience.cdk.tools.MFAnalyser; import org.openscience.cdk.tools.manipulator.AtomContainerManipulator; import org.openscience.cdk.tools.manipulator.AtomTypeManipulator; import org.openscience.cdk.tools.manipulator.ChemFileManipulator; -import javax.vecmath.Point2d; -import java.io.InputStream; -import java.util.Iterator; -import java.util.List; - /** * Tests CDK's hydrogen adding capabilities in terms of * example molecules. @@ -219,7 +231,8 @@ adder.addImplicitHydrogens(mol); assertEquals(1, mol.getAtomCount()); - assertEquals(1, new MFAnalyser(mol).getAtomCount("H")); + IMolecularFormula formula = MolecularFormulaManipulator.getMolecularFormula(mol); + assertEquals(1, MolecularFormulaManipulator.getElementCount(formula,mol.getBuilder().newElement("H"))); assertEquals(0, mol.getConnectedBondsCount(proton)); assertNotNull(proton.getHydrogenCount()); assertEquals(0, proton.getHydrogenCount().intValue()); @@ -236,7 +249,8 @@ adder.addImplicitHydrogens(mol); assertEquals(1, mol.getAtomCount()); - assertEquals(1, new MFAnalyser(mol).getAtomCount("H")); + IMolecularFormula formula = MolecularFormulaManipulator.getMolecularFormula(mol); + assertEquals(1, MolecularFormulaManipulator.getElementCount(formula,mol.getBuilder().newElement("H"))); assertEquals(0, mol.getConnectedBondsCount(proton)); assertNotNull(proton.getHydrogenCount()); assertEquals(1, proton.getHydrogenCount().intValue()); Deleted: branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/MFAnalyserTest.java =================================================================== --- branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/MFAnalyserTest.java 2008-02-26 16:29:17 UTC (rev 10258) +++ branches/miguelrojasch/removemfa/src/test/org/openscience/cdk/tools/MFAnalyserTest.java 2008-02-26 16:43:29 UTC (rev 10259) @@ -1,276 +0,0 @@ -/* $Revision$ $Author$ $Date$ - * - * Copyright (C) 1997-2007 The Chemistry Development Kit (CDK) project - * - * 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.tools; - -import java.io.IOException; -import java.util.Map; - -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.Element; -import org.openscience.cdk.Molecule; -import org.openscience.cdk.exception.CDKException; -import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.interfaces.IMolecule; -import org.openscience.cdk.nonotify.NNAtomContainer; -import org.openscience.cdk.smiles.SmilesParser; -import org.openscience.cdk.templates.MoleculeFactory; -import org.openscience.cdk.NewCDKTestCase; -import org.openscience.cdk.tools.MFAnalyser; - -/** - * @cdk.module test-formula - */ -public class MFAnalyserTest extends NewCDKTestCase { - static Molecule molecule; - - @BeforeClass - public static void setUp() - { - molecule = MoleculeFactory.makeAlphaPinene(); - } - - - @Test public void testMFAnalyser_String_IAtomContainer() { - Assert.assertNotNull(new MFAnalyser("C10H16", new org.openscience.cdk.AtomContainer())); - } - - @Test public void testMFAnalyser_IAtomContainer() { - Assert.assertNotNull(new MFAnalyser(new org.openscience.cdk.AtomContainer())); - } - - @Test public void testMFAnalyser_IAtomContainer_boolean() { - Assert.assertNotNull(new MFAnalyser(new org.openscience.cdk.AtomContainer(), true)); - Assert.assertNotNull(new MFAnalyser(new org.openscience.cdk.AtomContainer(), false)); - } - - @Test public void testGetMolecularFormula() { - MFAnalyser mfa = new MFAnalyser("C10H16", new org.openscience.cdk.AtomContainer()); - IAtomContainer ac = mfa.getAtomContainer(); - MFAnalyser mfa2 = new MFAnalyser(ac); - String mf = mfa2.getMolecularFormula(); - Assert.assertEquals("C10H16", mf); - } - - @Test public void testGetElements() { - MFAnalyser mfa = new MFAnalyser("C10H16", new NNAtomContainer()); - Assert.assertEquals(2, mfa.getElements().size()); - mfa = new MFAnalyser("C10H19N", new NNAtomContainer()); - Assert.assertEquals(3, mfa.getElements().size()); - } - - @Test public void testGetDBE() throws Exception{ - MFAnalyser mfa = new MFAnalyser("C10H22", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals(0, (int)mfa.getDBE()); - - mfa = new MFAnalyser("C10H16", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals(3, (int)mfa.getDBE()); - - mfa = new MFAnalyser("C10H16O", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals(3, (int)mfa.getDBE()); - - mfa = new MFAnalyser("C10H19N", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals(2, (int)mfa.getDBE()); - } - - @Test public void testGenerateElementFormula_IMolecule_arrayString() { - MFAnalyser mfa = new MFAnalyser("C10H19N", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals("C10N1H19", MFAnalyser.generateElementFormula( - new Molecule(mfa.getAtomContainer()), new String[] { "C", "N", "H" }) - ); - Assert.assertEquals("C10H19N1", MFAnalyser.generateElementFormula( - new Molecule(mfa.getAtomContainer()), new String[] { "C", "H", "N" }) - ); - Assert.assertEquals("N1H19C10", MFAnalyser.generateElementFormula( - new Molecule(mfa.getAtomContainer()), new String[] { "N", "H", "C" }) - ); - } - - @Test public void testAnalyseAtomContainer_IAtomContainer() { - MFAnalyser mfa = new MFAnalyser("C10H19N", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals("C10H19N", mfa.analyseAtomContainer( - new Molecule(mfa.getAtomContainer())) - ); - } - - @Test public void testElements() throws Exception{ - MFAnalyser mfa = new MFAnalyser("C10H22", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals(2, (int)mfa.getElements().size()); - - mfa = new MFAnalyser("C10H16O", DefaultChemObjectBuilder.getInstance().newAtomContainer()); - Assert.assertEquals(3, (int)mfa.getElements().size()); - } - - @Test public void testGetAtomContainer() { - MFAnalyser mfa = new MFAnalyser("C10H16", new org.openscience.cdk.AtomContainer()); - IAtomContainer ac = mfa.getAtomContainer(); - Assert.assertEquals(26, ac.getAtomCount()); - } - - @Test public void testGetElementCount() { - MFAnalyser mfa = new MFAnalyser("C10H16", new org.openscience.cdk.AtomContainer()); - Assert.assertEquals(2, mfa.getElementCount()); - } - - @Test public void testGetElementCount2() { - MFAnalyser mfa = new MFAnalyser("CH3OH", new org.openscience.cdk.AtomContainer()); - Assert.assertEquals(3, mfa.getElementCount()); - } - - @Test public void testGetAtomCount_String() { - MFAnalyser mfa = new MFAnalyser("C10H16", new org.openscience.cdk.AtomContainer()); - Assert.assertEquals(10, mfa.getAtomCount("C")); - Assert.assertEquals(16, mfa.getAtomCount("H")); - } - - @Test public void testGetAtomCount_String2() { - MFAnalyser mfa = new MFAnalyser("CH3OH", new org.openscience.cdk.AtomContainer()); - Assert.assertEquals(1, mfa.getAtomCount("C")); - Assert.assertEquals(1, mfa.getAtomCount("O")); - Assert.assertEquals(4, mfa.getAtomCount("H")); - } - - @Test public void testGetHeavyAtoms() { - MFAnalyser mfa = new MFAnalyser("C10H16", new org.openscience.cdk.AtomContainer()); - Assert.assertEquals(10, mfa.getHeavyAtoms().size()); - } - - @Test public void testGetHeavyAtoms2() { - MFAnalyser mfa = new MFAnalyser("CH3OH", new org.openscience.cdk.AtomContainer()); - Assert.assertEquals(2, mfa.getHeavyAtoms().size()); - } - - /** - * Test removeHydrogensPreserveMultiplyBonded for B2H6, which contains two multiply bonded H. - * - * @throws IOException - * @throws ClassNotFoundException - * @throws CDKException - */ - @Test public void testRemoveHydrogensPreserveMultiplyBonded() throws IOException, ClassNotFoundException, CDKException - {... [truncated message content] |