Version 1.8.0

OEChem 1.8.0

New features

  • OERMSD and its many related overloaded functions have been optimized using recent algorithms from the literature. The algorithm now solves a quaternion-based characteristic polynomial (Theobald-2005). For typical cases, this new algorithm runs 3-5 times faster than the prior algorithm for calculating either an optimum RMSD with or without an overlay transformation.

  • C++ comparison operators (=, !=, <, <=, >, >=) have been created for OEResidue objects, allowing OEResidues to be compared to each other directly, used for sorting, and as keys in a std::map.

  • A new PDB input flavor, OEIFlavor::PDB::SecStruct has been created, to control perception of protein secondary structure from PDB files. This flavor is on by default when using OEReadMolecule. When this flavor is on, secondary structure is automatically perceived using OEPerceiveSecondaryStructure. Otherwise, secondary structure information is taken from HELIX and SHEET records in a PDB file.

Major bug fixes

  • OEAssignAromaticFlags performance is significantly improved for molecules with a large number of rings, such as buckyballs. Since OEAssignAromaticFlags is called when reading from every file format OEChem supports this solves problems where OEChem would appear to hang indefinitely trying to read certain molecules. OEAssignAromaticFlags will now automatically adjust the maximum path considered for aromaticity perception based upon the following heuristics:

    • If a molecule has more than 15 rings, than the maximum path considered for aromaticity is 50.

    • If a molecule has more than 30 rings and is potentially a buckyball, than the maximum path considered for aromaticity is 30.

    In the case of buckyballs and other fused ring systems of 5 and 6 membered rings, this change has no effect other than to significantly improve the speed of the perception.

  • Isomeric canonical smiles improved in the following ways:

    • Performance improvement to isomeric canonical smiles generation by not performing the more expensive isomeric canonical smiles generation on disconnected components that do not contain stereo information.

    • Very complex ring system corner case fixed that would cause isomeric canonical smiles generation to run for longer than was required leading to slightly different isomeric canonical smiles.

Minor bug fixes

  • OEBuildMDLQueryExpressions fixed to properly evaluate expressions with zero charge as a valid atom property.

  • OEMDLStereoFromBondStereo no longer throws a spurious platform dependent warning about ‘’’Stereochemistry corrected on atom number # of #’’’ when the 2D atom coordinates around a tetrahedral center were all 90 degrees from each other.

  • OEParseSmiles no longer crashes when passed a NULL pointer as a string.

  • oemolistream::GetReadFailureCt now returns a non-garbage number. The internal counter was not always properly initialized to 0, requiring the user to first call oemolistream::ResetReadFailureCt to get meaningful results.

  • OEAssignAromaticFlags now resets all atom aromaticity flags to false if no rings are found in the molecule.

  • oemolistream::seek and oemolistream::tell now works as expected for MOL2 files. This was accomplished by making OEReadMol2File robust enough to not care whether @<TRIPOS>MOLECULE was encountered, and continue to read the rest of the molecule regardless of its existence. Additional checks are now done on subsequent lines to ensure the file is indeed in the MOL2 format.

  • OEResidueHydrogens has been fixed to remove a possible buffer overflow.

  • OEResidueHydrogens now preserves assigned atom names for UNL residues.

  • OEAltLocationFactory constructors now correctly processes the value of the constructor option OEAltLocFactOption::TrustInputBonds rather than always trusting input bonds.

OEBio 1.8.0

New features

OEGrid 1.4.0

New features

  • OEReadMTZ has been added. This allows reading of standard MTZ crystallographic data files where the default MTZ column names from popular refinement packages were used.

OESystem 1.8.0

Minor bug fixes

  • OEColorGradientBase::GetColorAt fixed to correctly round color components after interpolation.

  • OESystem::OEGeom3DGetOverlayRotTrans renamed from OEGeomGetOverlayRotTrans and argument order changed to mimic other 3D geometry functions.

  • The following OEColor functions and methods will automatically clamp color values to the range [0,255] and [0.0, 1.0] for integers and floating point numbers respectively:

    A warning will be thrown to OEThrow if a clamping occurs.

  • Valgrind warning silenced caused by mismatching new [] and delete in OEChem’s small object memory allocator. The proper delete [] is now used though no real issue was observed by this bug in production.

  • OEInterface no longer returns duplicate and confusing error messages by properly respecting the error_level argument in all failure conditions instead of using OEThrow.Error.

  • operator-= and operator+= now function properly for negative numbers for OEPredIter and OEConcatIter.

OEPlatform 1.8.0

New features

  • OEPlatform::OEMallocaPtr::IsValid added to provide a more straightforward way of testing whether the held pointer is NULL.

Major bug fixes

  • OEThreadLocal will now properly destroy thread local variables upon thread termination for Visual Studio 2005 and later.

  • oeostream::operator<< fixed to not crash when writing out a double that needs more than 80 characters to fully represent it.

  • OEPlatform::oeistream::pushline method removed as it was a hack to implement MOL2 file reading since the molecule delimiter comes at the beginning of the next molecule. oeistream::getline was the only other oeistream method that was aware of a pushline call. See the release note about the improvements to OEReadMol2File that justify the removal of this method.

Minor bug fixes

  • OEGetIPAddress should be more robust for grabbing the IP address, not returning the loopback interface or inactive interfaces.

  • OEDirectoryScan fixed to actually work on Windows.

  • OEThread no longer has a copy constructor or operator= as these were dangerous and undefined.

Documentation changes