@Test public void noNullPointerExceptionForMassOfRGroups() throws Exception { IMolecularFormula formula = new MolecularFormula(); formula.addIsotope(new Isotope("C")); formula.addIsotope(new Isotope("H"), 3); formula.addIsotope(new Isotope("R")); assertThat(MolecularFormulaManipulator.getTotalMassNumber(formula), closeTo(15.0, 0.01)); }
@Test public void testGetTotalMassNumber_IMolecularFormula() throws Exception { IMolecularFormula formula = new MolecularFormula(); formula.addIsotope(builder.newInstance(IIsotope.class, "C")); formula.addIsotope(builder.newInstance(IIsotope.class, "O")); double totalExactMass = MolecularFormulaManipulator.getTotalMassNumber(formula); Assert.assertEquals(28, totalExactMass, 0.000001); }
/** * Validate the nitrogen rule of this IMolecularFormula. * * @param formula Parameter is the IMolecularFormula * @return A double value meaning 1.0 True, 0.0 False */ @Override public double validate(IMolecularFormula formula) throws CDKException { logger.info("Start validation of ", formula); double mass = MolecularFormulaManipulator.getTotalMassNumber(formula); if (mass == 0) return 0.0; int numberN = MolecularFormulaManipulator.getElementCount(formula, formula.getBuilder().newInstance(IElement.class, "N")); numberN += getOthers(formula); if (formula.getCharge() == null || formula.getCharge() == 0 || !isOdd(Math.abs(formula.getCharge()))) { if (isOdd(mass) && isOdd(numberN)) { return 1.0; } else if (!isOdd(mass) && (numberN == 0 || !isOdd(numberN))) { return 1.0; } else return 0.0; } else { if (!isOdd(mass) && isOdd(numberN)) { return 1.0; } else if (isOdd(mass) && (numberN == 0 || !isOdd(numberN))) { return 1.0; } else return 0.0; } }