From 0e85729059561ce277945c0517081158e176875a Mon Sep 17 00:00:00 2001 From: John May Date: Fri, 4 Apr 2014 11:59:23 +0100 Subject: [PATCH] Consider implicit hydrogens in exact mass utility. Signed-off-by: Egon Willighagen --- .../manipulator/AtomContainerManipulator.java | 18 ++++++++++++++---- .../AtomContainerManipulatorTest.java | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/base/standard/src/main/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java b/base/standard/src/main/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java index cadb71e438d..0425af10d5d 100644 --- a/base/standard/src/main/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java +++ b/base/standard/src/main/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulator.java @@ -196,11 +196,21 @@ public static double getTotalCharge(IAtomContainer atomContainer) { */ @TestMethod("testGetTotalExactMass_IAtomContainer") public static double getTotalExactMass(IAtomContainer atomContainer) { - double mass = 0.0; - for (IAtom atom : atomContainer.atoms()) { - mass += atom.getExactMass(); + try { + + Isotopes isotopes = Isotopes.getInstance(); + double mass = 0.0; + double hExactMass = isotopes.getMajorIsotope(1).getExactMass(); + for (IAtom atom : atomContainer.atoms()) { + if (atom.getImplicitHydrogenCount() == null) + throw new IllegalArgumentException("an atom had with unknown (null) implicit hydrogens"); + mass += atom.getExactMass(); + mass += atom.getImplicitHydrogenCount() * hExactMass; + } + return mass; + } catch (IOException e) { + throw new RuntimeException("Isotopes definitions could not be loaded", e); } - return mass; } /** diff --git a/base/test-standard/src/test/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulatorTest.java b/base/test-standard/src/test/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulatorTest.java index 385c9f61bdc..d155e2ae86a 100644 --- a/base/test-standard/src/test/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulatorTest.java +++ b/base/test-standard/src/test/java/org/openscience/cdk/tools/manipulator/AtomContainerManipulatorTest.java @@ -528,7 +528,7 @@ private IAtomContainer getChiralMolTemplate() { mol.getAtom(1).setExactMass(34.96885268); double totalExactMass = AtomContainerManipulator.getTotalExactMass(mol); - Assert.assertEquals(46.96885268,totalExactMass,0.000001); + Assert.assertEquals(49.992327775,totalExactMass,0.000001); } @Test(expected = IllegalArgumentException.class)