/** * Converts a formula string (like "C2H4") into an atom container with atoms * but no bonds. * * @param formulaString the formula to convert * @param builder a chem object builder * @return atoms wrapped in an atom container */ public static IAtomContainer getAtomContainer(String formulaString, IChemObjectBuilder builder) { return MolecularFormulaManipulator.getAtomContainer(MolecularFormulaManipulator.getMolecularFormula( formulaString, builder)); }
/** * Method that actually does the work of convert the IMolecularFormula * to IAtomContainer. * <p> The hydrogens must be implicit. * * @param formula IMolecularFormula object * @return the filled AtomContainer * @see #getAtomContainer(IMolecularFormula, IAtomContainer) */ public static IAtomContainer getAtomContainer(IMolecularFormula formula) { IAtomContainer atomContainer = formula.getBuilder().newInstance(IAtomContainer.class); return getAtomContainer(formula, atomContainer); }
@Test public void testGetAtomContainer_String_IChemObjectBuilder() { String mf = "C2H4"; IAtomContainer atomContainer = MolecularFormulaManipulator.getAtomContainer(mf, DefaultChemObjectBuilder.getInstance()); Assert.assertEquals(6, atomContainer.getAtomCount()); }
/** * Returns the number of double bond equivalents in this molecule. * * @param formula The IMolecularFormula to calculate * @return The number of DBEs * @throws CDKException if DBE cannot be be evaluated * * @cdk.keyword DBE * @cdk.keyword double bond equivalent */ public static double getDBE(IMolecularFormula formula) throws CDKException { int valencies[] = new int[5]; IAtomContainer ac = getAtomContainer(formula); AtomTypeFactory factory = AtomTypeFactory.getInstance( "org/openscience/cdk/config/data/structgen_atomtypes.xml", ac.getBuilder()); 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() + ac.getAtom(f).getFormalCharge())]++; valencies[types[0].getBondOrderSum().intValue()]++; } return 1 + (valencies[4]) + (valencies[3] / 2) - (valencies[1] / 2); }
@Test public void testGetAtomContainer_IMolecularFormula() { IMolecularFormula mf2 = new MolecularFormula(); mf2.addIsotope(builder.newInstance(IIsotope.class, "C"), 2); mf2.addIsotope(builder.newInstance(IIsotope.class, "H"), 4); IAtomContainer ac = MolecularFormulaManipulator.getAtomContainer(mf2); Assert.assertEquals(6, ac.getAtomCount()); }
@Test public void testGetAtomContainer_IMolecularFormula_IAtomContainer() { IMolecularFormula mf2 = new MolecularFormula(); mf2.addIsotope(builder.newInstance(IIsotope.class, "C"), 2); mf2.addIsotope(builder.newInstance(IIsotope.class, "H"), 4); IAtomContainer ac = MolecularFormulaManipulator .getAtomContainer(mf2, builder.newInstance(IAtomContainer.class)); Assert.assertEquals(6, ac.getAtomCount()); }
/** * @cdk.bug 1296 */ @Test public void testGetAtomContainer_AddsAtomicNumbers() { IMolecularFormula mf2 = new MolecularFormula(); mf2.addIsotope(builder.newInstance(IIsotope.class, "C"), 2); mf2.addIsotope(builder.newInstance(IIsotope.class, "H"), 4); IAtomContainer ac = MolecularFormulaManipulator .getAtomContainer(mf2, builder.newInstance(IAtomContainer.class)); Assert.assertEquals(6, ac.getAtomCount()); Assert.assertNotNull(ac.getAtom(0).getAtomicNumber()); for (IAtom atom : ac.atoms()) { if ("C".equals(atom.getSymbol())) Assert.assertEquals(6, atom.getAtomicNumber().intValue()); else if ("H".equals(atom.getSymbol())) Assert.assertEquals(1, atom.getAtomicNumber().intValue()); else Assert.fail("Unexcepted element: " + atom.getSymbol()); } }
@Test public void testCalculate_ZnO() throws Exception { ISubstance material = new Substance(); material.addAtomContainer( MolecularFormulaManipulator.getAtomContainer( "ZnO", DefaultChemObjectBuilder.getInstance() ) ); DescriptorValue value = descriptor.calculate(material); Assert.assertNotNull(value); IDescriptorResult result = value.getValue(); Assert.assertNotNull(result); Assert.assertEquals(1, ((IntegerResult)result).intValue()); }
@Test public void testCalculate_IronOxide() throws Exception { ISubstance material = new Substance(); material.addAtomContainer( MolecularFormulaManipulator.getAtomContainer( "Fe3O4", DefaultChemObjectBuilder.getInstance() ) ); DescriptorValue value = descriptor.calculate(material); Assert.assertNotNull(value); IDescriptorResult result = value.getValue(); Assert.assertNotNull(result); Assert.assertEquals(4, ((IntegerResult)result).intValue()); }
@Test public void testMolecularFormulaIAtomContainer_to_IAtomContainer2() { 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 mf2 = new MolecularFormula(); mf2.addIsotope(builder.newInstance(IIsotope.class, "C"), 2); mf2.addIsotope(builder.newInstance(IIsotope.class, "H"), 4); IAtomContainer ac2 = MolecularFormulaManipulator.getAtomContainer(mf2, builder.newInstance(IAtomContainer.class)); Assert.assertEquals(ac2.getAtomCount(), ac2.getAtomCount()); Assert.assertEquals(ac2.getAtom(0).getSymbol(), ac2.getAtom(0).getSymbol()); Assert.assertEquals(ac2.getAtom(5).getSymbol(), ac2.getAtom(5).getSymbol()); }