/** * Get the summed natural abundance of all isotopes from an MolecularFormula. Assumes * abundances to be preset, and will return 0.0 if not. * * @param formula The IMolecularFormula to calculate * @return The summed natural abundance of all isotopes in this MolecularFormula */ public static double getTotalNaturalAbundance(IMolecularFormula formula) { double abundance = 1.0; for (IIsotope isotope : formula.isotopes()) { if (isotope.getNaturalAbundance() == null) return 0.0; abundance = abundance * Math.pow(isotope.getNaturalAbundance(), formula.getIsotopeCount(isotope)); } return abundance / Math.pow(100, getAtomCount(formula)); }
@Test public void testGetMolecularFormula_String_IChemObjectBuilder() { IMolecularFormula molecularFormula = MolecularFormulaManipulator.getMolecularFormula("C10H16", builder); Assert.assertEquals(26, MolecularFormulaManipulator.getAtomCount(molecularFormula)); Assert.assertEquals(2, molecularFormula.getIsotopeCount()); }
/** Test formula summing */ @Test public void testGetMolecularFormula_String_IMolecularFormula() { IMolecularFormula mf1 = new MolecularFormula(); mf1.addIsotope(builder.newInstance(IIsotope.class, "C"), 10); mf1.addIsotope(builder.newInstance(IIsotope.class, "H"), 16); Assert.assertEquals(26, MolecularFormulaManipulator.getAtomCount(mf1)); Assert.assertEquals(2, mf1.getIsotopeCount()); IMolecularFormula mf2 = MolecularFormulaManipulator.getMolecularFormula("C11H17", mf1); Assert.assertEquals(54, MolecularFormulaManipulator.getAtomCount(mf2)); Assert.assertEquals(2, mf2.getIsotopeCount()); }
/** Test atom and isotope count for methyl-group. */ @Test public void testGetAtomCount_IMolecularFormula() { IMolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C")); formula.addIsotope(builder.newInstance(IIsotope.class, "H"), 3); Assert.assertEquals(2, formula.getIsotopeCount()); Assert.assertEquals(4, MolecularFormulaManipulator.getAtomCount(formula)); }
@Test public void testElements_IMolecularFormula() { IMolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C"), 1); formula.addIsotope(builder.newInstance(IIsotope.class, "H"), 2); IIsotope br1 = builder.newInstance(IIsotope.class, "Br"); br1.setNaturalAbundance(50.69); formula.addIsotope(br1); IIsotope br2 = builder.newInstance(IIsotope.class, "Br"); br2.setNaturalAbundance(50.69); formula.addIsotope(br2); List<IElement> elements = MolecularFormulaManipulator.elements(formula); Assert.assertEquals(5, MolecularFormulaManipulator.getAtomCount(formula)); Assert.assertEquals(3, elements.size()); }
/** Test formula mass calculation */ @Test public void testGetMajorIsotopeMolecularFormula_String_IChemObjectBuilder() throws Exception { IMolecularFormula mf2 = MolecularFormulaManipulator.getMajorIsotopeMolecularFormula("C11H17", builder); Assert.assertEquals(28, MolecularFormulaManipulator.getAtomCount(mf2)); Assert.assertEquals(2, mf2.getIsotopeCount()); IIsotope carbon = Isotopes.getInstance().getMajorIsotope("C"); IIsotope hydrogen = Isotopes.getInstance().getMajorIsotope("H"); double totalMass = carbon.getExactMass() * 11; totalMass += hydrogen.getExactMass() * 17; Assert.assertEquals(totalMass, MolecularFormulaManipulator.getTotalExactMass(mf2), 0.0000001); }
/** test @link {@link MolecularFormulaManipulator#removeElement(IMolecularFormula, IElement)} */ @Test public void testRemoveElement_IMolecularFormula_IElement() { IMolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C"), 1); IIsotope fl = builder.newInstance(IIsotope.class, "F"); IIsotope hy2 = builder.newInstance(IIsotope.class, "H"); IIsotope hy1 = builder.newInstance(IIsotope.class, "H"); hy2.setExactMass(2.014101778); formula.addIsotope(fl, 1); formula.addIsotope(hy1, 2); formula.addIsotope(hy2, 1); Assert.assertEquals(4, formula.getIsotopeCount()); formula = MolecularFormulaManipulator.removeElement(formula, builder.newInstance(IElement.class, "F")); Assert.assertEquals(3, formula.getIsotopeCount()); Assert.assertEquals(4, MolecularFormulaManipulator.getAtomCount(formula)); formula = MolecularFormulaManipulator.removeElement(formula, builder.newInstance(IElement.class, "H")); Assert.assertEquals(1, MolecularFormulaManipulator.getAtomCount(formula)); Assert.assertEquals(1, formula.getIsotopeCount()); }
@Test public void testGetMolecularFormula_IAtomContainer() { IAtomContainer ac = builder.newInstance(IAtomContainer.class); ac.addAtom(builder.newInstance(IAtom.class, "C")); ac.addAtom(builder.newInstance(IAtom.class, "C")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); IMolecularFormula mf1 = MolecularFormulaManipulator.getMolecularFormula(ac); IMolecularFormula mf2 = new MolecularFormula(); mf2.addIsotope(builder.newInstance(IIsotope.class, "C"), 2); mf2.addIsotope(builder.newInstance(IIsotope.class, "H"), 4); Assert.assertEquals(MolecularFormulaManipulator.getAtomCount(mf2), MolecularFormulaManipulator.getAtomCount(mf1)); Assert.assertEquals(mf2.getIsotopeCount(), mf1.getIsotopeCount()); IElement elemC = builder.newInstance(IElement.class, "C"); IElement elemH = builder.newInstance(IElement.class, "H"); Assert.assertEquals(mf2.getIsotopeCount(builder.newInstance(IIsotope.class, elemC)), mf1.getIsotopeCount(builder.newInstance(IIsotope.class, elemC))); Assert.assertEquals(mf2.getIsotopeCount(builder.newInstance(IIsotope.class, elemH)), mf1.getIsotopeCount(builder.newInstance(IIsotope.class, elemH))); Assert.assertEquals(MolecularFormulaManipulator.getElementCount(mf2, elemC), MolecularFormulaManipulator.getElementCount(mf1, elemC)); Assert.assertEquals(MolecularFormulaManipulator.getElementCount(mf2, elemH), MolecularFormulaManipulator.getElementCount(mf1, elemH)); }
@Test public void testGetMolecularFormula_IAtomContainer_IMolecularFormula() { IAtomContainer ac = builder.newInstance(IAtomContainer.class); ac.addAtom(builder.newInstance(IAtom.class, "C")); ac.addAtom(builder.newInstance(IAtom.class, "C")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); IMolecularFormula mf1 = MolecularFormulaManipulator.getMolecularFormula(ac, new MolecularFormula()); IMolecularFormula mf2 = new MolecularFormula(); mf2.addIsotope(builder.newInstance(IIsotope.class, "C"), 2); mf2.addIsotope(builder.newInstance(IIsotope.class, "H"), 4); Assert.assertEquals(MolecularFormulaManipulator.getAtomCount(mf2), MolecularFormulaManipulator.getAtomCount(mf1)); Assert.assertEquals(mf2.getIsotopeCount(), mf1.getIsotopeCount()); IElement elemC = builder.newInstance(IElement.class, "C"); IElement elemH = builder.newInstance(IElement.class, "H"); Assert.assertEquals(mf2.getIsotopeCount(builder.newInstance(IIsotope.class, elemC)), mf1.getIsotopeCount(builder.newInstance(IIsotope.class, elemC))); Assert.assertEquals(mf2.getIsotopeCount(builder.newInstance(IIsotope.class, elemH)), mf1.getIsotopeCount(builder.newInstance(IIsotope.class, elemH))); Assert.assertEquals(MolecularFormulaManipulator.getElementCount(mf2, elemC), MolecularFormulaManipulator.getElementCount(mf1, elemC)); Assert.assertEquals(MolecularFormulaManipulator.getElementCount(mf2, elemH), MolecularFormulaManipulator.getElementCount(mf1, elemH)); }
@Test public void testGetMolecularFormula_IAtomContainerIMolecularFormula_2() { IAtomContainer ac = builder.newInstance(IAtomContainer.class); ac.addAtom(builder.newInstance(IAtom.class, "C")); ac.addAtom(builder.newInstance(IAtom.class, "C")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); ac.addAtom(builder.newInstance(IAtom.class, "H")); IMolecularFormula mf0 = new MolecularFormula(); mf0.addIsotope(builder.newInstance(IIsotope.class, "C"), 2); mf0.addIsotope(builder.newInstance(IIsotope.class, "H"), 5); IMolecularFormula mf1 = MolecularFormulaManipulator.getMolecularFormula(ac, mf0); IMolecularFormula mf2 = new MolecularFormula(); mf2.addIsotope(builder.newInstance(IIsotope.class, "C"), 4); mf2.addIsotope(builder.newInstance(IIsotope.class, "H"), 9); Assert.assertEquals(MolecularFormulaManipulator.getAtomCount(mf2), MolecularFormulaManipulator.getAtomCount(mf1)); Assert.assertEquals(mf2.getIsotopeCount(), mf1.getIsotopeCount()); IElement elemC = builder.newInstance(IElement.class, "C"); IElement elemH = builder.newInstance(IElement.class, "H"); Assert.assertEquals(mf2.getIsotopeCount(builder.newInstance(IIsotope.class, elemC)), mf1.getIsotopeCount(builder.newInstance(IIsotope.class, elemC))); Assert.assertEquals(mf2.getIsotopeCount(builder.newInstance(IIsotope.class, elemH)), mf1.getIsotopeCount(builder.newInstance(IIsotope.class, elemH))); Assert.assertEquals(MolecularFormulaManipulator.getElementCount(mf2, elemC), MolecularFormulaManipulator.getElementCount(mf1, elemC)); Assert.assertEquals(MolecularFormulaManipulator.getElementCount(mf2, elemH), MolecularFormulaManipulator.getElementCount(mf1, elemH)); }
/** * Test molecular formula's generated from IIsotopes, including hydrogen/deuterium handling. */ @Test public void testGetElementCount_IMolecularFormula_IElement() { IMolecularFormula formula = new MolecularFormula(); IIsotope carb = builder.newInstance(IIsotope.class, "C"); IIsotope flu = builder.newInstance(IIsotope.class, "F"); IIsotope h1 = builder.newInstance(IIsotope.class, "H"); IIsotope h2 = builder.newInstance(IIsotope.class, "H"); h2.setExactMass(2.014101778); formula.addIsotope(carb, 2); formula.addIsotope(flu); formula.addIsotope(h1, 3); formula.addIsotope(h2, 4); Assert.assertEquals(10, MolecularFormulaManipulator.getAtomCount(formula)); Assert.assertEquals(4, formula.getIsotopeCount()); Assert.assertEquals(3, formula.getIsotopeCount(h1)); Assert.assertEquals(4, formula.getIsotopeCount(h2)); Assert.assertEquals(2, MolecularFormulaManipulator.getElementCount(formula, builder.newInstance(IElement.class, carb))); Assert.assertEquals(1, MolecularFormulaManipulator.getElementCount(formula, builder.newInstance(IElement.class, flu))); Assert.assertEquals(7, MolecularFormulaManipulator.getElementCount(formula, builder.newInstance(IElement.class, h1))); }
Assert.assertEquals(12, MolecularFormulaManipulator.getAtomCount(molecularFormula)); Assert.assertEquals(4, molecularFormula.getIsotopeCount()); Assert.assertEquals(4, molecularFormula.getIsotopeCount(builder.newInstance(IIsotope.class, "C")));
Assert.assertEquals(40, MolecularFormulaManipulator.getAtomCount(molecularFormula)); Assert.assertEquals(4, molecularFormula.getIsotopeCount()); Assert.assertEquals(9, molecularFormula.getIsotopeCount(builder.newInstance(IIsotope.class, "C")));