When I load a molecule from an SD file, the atoms have a valid (i.e., non-null) value for the exact mass field.
When I then percieve and configure atom types via AtomContainerManipulator.perceiveAndConfigureAtoms, the exact mass field of all the atoms becomes NULL.
This is because the CDKAtomTypeMatcher finds a matching atom type, the resulting IAtomType object has the exact mass field set to NULL.
So when AtomTypeManipulator.configure configures the current atom with the matching type, it overwrites the exact mass field of the original atom.
Why is the matcher returning a type with NULL for the exact mass?
More generally, what is the policy for configuring atoms. Right now, we just overwrite any previous configuration. I think a more correct approach would be for AtomTypeManipulator.configure to check whether the fields of a atom are UNSET - if so, then do the configuration. If the fields are not UNSET don't do the configuration.
This implies that AtomTypeManipulator should have a method that will 'clear' the configuratin related to atom types by setting the appropriate fields to UNSET