A crash that occurred when explicitly calling
oemolostream::Setgz after opening a file that was
implicitly gzipped has been fixed.

Water hydrogens created by OEAddExplicitHydrogens
had previously been assigned the incorrect names "H2" and "H3".
This has been corrected to give these hydrogens the expected names
"H1" and "H2".
The PDBatomindicesOEPDBAtomName::H1 and
OEPDBAtomName::H2 can be used to refer to them.
The constant OEChem::OEPDBAtomName::H has been deprecated.

The algorithm used by the OEPerceiveBondOrders function
for detecting sp2 hybridized planar ring systems has been improved.

For certain complex ring systems, the function
OECreateSmiString previously attempted to write a SMILES
with more than 99 ring closures and output an invalid SMILES. It now throws
a warning and returns an empty string.

If the function OECreateSmiString cannot generate a
valid SMILES for a molecule, a molecule title will no longer be output.

When extracting ring templates for depiction, the
OE2DRingDictionary class’s normalization process
no longer rejects long or short bonds. This allows the creation of
non-regular ring templates.

The OECenter overload for OEMCMolBase
now optionally accepts an array which, when present, returns the
translations applied for each conformer during the centering operation.
The additional overload does not affect any existing usage.

The OESymmetryNumber overload that works with
OEMCMolBase had previously not properly calculated the
symmetry numbers for all conformers. This has been fixed.

A new scoring system, MMFF-NIE (“MMFF Neighbor Interaction
Energies”), has been added to improve optimizing hydrogen bonding
networks and avoiding clashes in the function
OEPlaceHydrogens. This physics-based scoring system
includes Coulombic
and Van der Waals terms from MMFF94, including MMFF partial charges.
Interactions are scored between moveable functional groups
(see OEPlaceHydrogensMoverClass) as well as
between moveable functional groups and non-moving neighboring background
atoms. The optimizer has also been improved to be much more memory-efficient.

OEPlaceHydrogens now samples waters more densely by default.
A new constant, OEPlaceHydrogensWaterProcessing::Focused,
can be used to revert to the more limited sampling. Waters are processed
individually, in order, starting at the molecular surface and moving outward,
after all other moveable functional groups have been optimized.

OEPlaceHydrogens now deprotonates certain acidic groups
(e.g., SH) in the presence of a metal. In addition, imidazoles can now be
doubly deprotonated when between two metals. A new constant,
OEPlaceHydrogensMoverClass::AroN, has been
added to describe aromatic nitrogens that can be deprotonated by metals.

OEPlaceHydrogens now recognizes neutral carboxylic acids.
Hydrogen positions are sampled on both oxygens.

The Preparing a Protein example has been modified to
cover the expanded range of options in water processing as well as the
maximum number of optimization substates. It also now repairs bonding
mistakes when the command line option -altcompare is used to retain
all alternates
by calling the method OEAltLocationFactory::GetSourceMol.
This is a recommended approach for other workflows that read
OEFormat::PDB files and
retain all alternate location atoms.

The SWIG Java wrapper no longer creates finalizers for OpenEye objects
that do not own memory: OEBase, OEAtomBase, OEBondBase,
OEConfBase, and OEGroupBase. Previously, the SWIG wrapper created
empty finalizers, which resulted in garbage collection bottlenecks for
processes that used a lot of objects (e.g., looping over atoms and bonds in
a protein). This fix improves overall throughput for Java toolkit programs.