/** * Clones this MolecularFormula object and its content. I should * integrate into ChemObject. * * @return The cloned object */ @Override public Object clone() throws CloneNotSupportedException { // /* it is not a super class of chemObject */ // MolecularFormula clone = (MolecularFormula) super.clone(); // // start from scratch // clone.removeAllIsotopes(); // // clone all isotopes // Iterator<IIsotope> iterIso = this.isotopes(); // while(iterIso.hasNext()){ // IIsotope isotope = iterIso.next(); // clone.addIsotope((IIsotope) isotope.clone(),getIsotopeCount(isotope)); // } MolecularFormula clone = new MolecularFormula(); for (IIsotope isotope : isotopes()) { clone.addIsotope((IIsotope) isotope.clone(), getIsotopeCount(isotope)); } clone.setCharge(getCharge()); return clone; }
/** * Checks a set of Nodes for the occurrence of the isotope in the * IMolecularFormula from a particular isotope. It returns 0 if the does not exist. * * @param isotope The IIsotope to look for * @return The occurrence of this isotope in this IMolecularFormula * @see #getIsotopeCount() */ @Override public int getIsotopeCount(IIsotope isotope) { return !contains(isotope) ? 0 : isotopes.get(getIsotope(isotope)); }
/** * Get the isotope instance given an IIsotope. The instance is those * that has the isotope with the same symbol, natural abundance and * exact mass. * * @param isotope The IIsotope for looking for * @return The IIsotope instance * @see #isotopes */ private IIsotope getIsotope(IIsotope isotope) { for (IIsotope thisIsotope : isotopes()) { if (isTheSame(isotope, thisIsotope)) return thisIsotope; } return null; }
@Test public void testValidate_IMolecularFormula() throws Exception { IRule rule = getRule(); IMolecularFormula mf = new MolecularFormula(); mf.addIsotope(new Isotope("C", 13)); mf.addIsotope(new Isotope("H", 2), 4); rule.validate(mf); // can it handle an empty MF? rule.validate(new MolecularFormula()); } }
@Test public void testGetHTML_IMolecularFormula_boolean_boolean() { MolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C"), 10); Assert.assertEquals("C<sub>10</sub>", MolecularFormulaManipulator.getHTML(formula, true, false)); formula.setCharge(1); Assert.assertEquals("C<sub>10</sub><sup>+</sup>", MolecularFormulaManipulator.getHTML(formula, true, false)); formula.setCharge(formula.getCharge() - 2); Assert.assertEquals("C<sub>10</sub><sup>–</sup>", MolecularFormulaManipulator.getHTML(formula, true, false)); }
@Test public void testGetHTML_IMolecularFormula() { MolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C"), 8); formula.addIsotope(builder.newInstance(IIsotope.class, "H"), 10); formula.addIsotope(builder.newInstance(IIsotope.class, "Cl"), 2); formula.addIsotope(builder.newInstance(IIsotope.class, "O"), 2); Assert.assertEquals("C<sub>8</sub>H<sub>10</sub>Cl<sub>2</sub>O<sub>2</sub>", MolecularFormulaManipulator.getHTML(formula)); }
@Test public void testGetHTML_IMolecularFormulaWithIsotopeAndCharge() { MolecularFormula formula = new MolecularFormula(); formula.addIsotope(ifac.getMajorIsotope("C"), 2); formula.addIsotope(ifac.getMajorIsotope("H"), 6); formula.setCharge(1); Assert.assertEquals("<sup>12</sup>C<sub>2</sub><sup>1</sup>H<sub>6</sub><sup>+</sup>", MolecularFormulaManipulator.getHTML(formula, true, true)); }
/** * Adds an Isotope to this MolecularFormula one time. * * @param isotope The isotope to be added to this MolecularFormula * @see #addIsotope(IIsotope, int) */ @Override public IMolecularFormula addIsotope(IIsotope isotope) { return this.addIsotope(isotope, 1); }
@Test public void testIsTheSame_IIsotope_IIsotope() throws IOException { MolecularFormula mf = new MolecularFormula(); IIsotope carb = getBuilder().newInstance(IIsotope.class, "C"); IIsotope anotherCarb = getBuilder().newInstance(IIsotope.class, "C"); IIsotope h = getBuilder().newInstance(IIsotope.class, "H"); carb.setExactMass(12.0); anotherCarb.setExactMass(12.0); h.setExactMass(1.0); carb.setNaturalAbundance(34.0); anotherCarb.setNaturalAbundance(34.0); h.setNaturalAbundance(99.0); Assert.assertTrue(mf.isTheSame(carb, carb)); Assert.assertTrue(mf.isTheSame(carb, anotherCarb)); Assert.assertFalse(mf.isTheSame(carb, h)); } }
/** {@inheritDoc} */ @Override public Integer getCharge() { Integer charge = super.getCharge(); logger.debug("Getting charge: ", charge); return charge; }
/** {@inheritDoc} */ @Override public void setCharge(Integer charge) { logger.debug("Setting the charge to: ", charge); super.setCharge(charge); }
/** {@inheritDoc} */ @Override public int getIsotopeCount() { logger.debug("Getting isotope count: ", super.getIsotopeCount()); return super.getIsotopeCount(); }
/** {@inheritDoc} */ @Override public boolean contains(IIsotope isotope) { logger.debug("Contains isotope?: ", isotope); return super.contains(isotope); }
/** {@inheritDoc} */ @Override public Iterable<IIsotope> isotopes() { logger.debug("Getting isotope iterator.."); return super.isotopes(); }
@Test public void testGetString_IMolecularFormula_Empty() { String stringMF = MolecularFormulaManipulator.getString(new MolecularFormula()); Assert.assertNotNull(stringMF); Assert.assertEquals("", stringMF); }
@Test public void nullIsotopeLabels() { MolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C"), 10); Assert.assertEquals("C<sub>10</sub>", MolecularFormulaManipulator.getHTML(formula, true, false)); formula.setCharge(1); Assert.assertEquals("C<sub>10</sub><sup>+</sup>", MolecularFormulaManipulator.getHTML(formula, true, true)); formula.setCharge(formula.getCharge() - 2); Assert.assertEquals("C<sub>10</sub><sup>–</sup>", MolecularFormulaManipulator.getHTML(formula, true, true)); }
@Test public void htmlFormulaDoesNotAddSubscriptForSingleElements() { MolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C"), 1); formula.addIsotope(builder.newInstance(IIsotope.class, "H"), 4); Assert.assertEquals("CH<sub>4</sub>", MolecularFormulaManipulator.getHTML(formula)); }
/** * Adds an Isotope to this MolecularFormula one time. * * @param isotope The isotope to be added to this MolecularFormula * @see #addIsotope(IIsotope, int) */ @Override public IMolecularFormula addIsotope(IIsotope isotope) { return this.addIsotope(isotope, 1); }
/** {@inheritDoc} */ @Override public int getIsotopeCount(IIsotope isotope) { logger.debug("Getting isotope count for: ", isotope); return super.getIsotopeCount(isotope); }
@Test public void testGetHeavyElements_IMolecularFormula() { IMolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C"), 10); formula.addIsotope(builder.newInstance(IIsotope.class, "H"), 16); Assert.assertEquals(1, MolecularFormulaManipulator.getHeavyElements(formula).size()); }