Version 1.3.4

OEChem 1.3.4

New Features

  • A new OEChemIsLicensed API point has been provided to allow an application to check whether the OEChem, OESystem and OEPlatform libraries have managed to find a suitable run-time license. This function can safely be called from programs to determine a priori whether using OEChem functionality may trigger a fatal error, allowing a warning to be issued and/or calls the affected functionality to be avoided.
  • A new MOL2::Substructure flavor has been added to the high-level writers (and a new default argument to the low-level OEWriteMol2File) to force the writer to emit a suitable @TRIPOS<SUBSTRUCTURE> record even for molecules having only a single substructure. The default behavior remains the same (to omit the record for small molecules) to save space in the common case.
  • OEChem‘s SMILES format parser, OEParseSmiles, has been tweaked to treat SMILES with inconsistent cis/trans bond stereo, such as C/C=C(/C)/C, as a soft warning rather than as a hard error. Previously, OEChem followed the Daylight toolkits, treating this as a serious error, and returning an empty molecule. The new behavior is that a warning is now thrown to OESystem::OEThrow, but the molecule is returned, just without specified stereochemistry for the problematic bond(s). This allows OEChem to be used to correct/recover SMILES generated by buggy SMILES writers.
  • The functions OEAtomSetMDLParity and OEAtomGetMDLParity have been introduced, to simplify the task of storing and retrieving the MDL parity value associated with each atom.
  • The OEB file format readers and writers will now preserve PDB file header records, if they are present on the original molecule.
  • A new function OEGetCenterAndExtents can be used to retrieve the center and 3D extents of a given OEMolBase.
  • The file format extension .isosmi is now treated as a synonym for .ism, indicating isomeric SMILES.
  • The OEQMolBase::BuildExpressions function now avoids constructing an atomic hybridization constraint if the query atom’s OEAtomBase::GetHyb method returns zero.

Major bug fixes ——————————————————————————–^

  • A problem with the generation of canonical isomeric SMILES has been fixed, that for pathological molecules with specified cis/trans stereochemistry could cause the canonical SMILES string to be written using / (forward slash) for some input orderings and / (backslash) for others. The resulting SMILES weren’t incorrect (and the perceived symmetry invariants were fine), but this allowed equivalent isomers to be given non-identical isomeric SMILES strings.
  • Fixed a bug in the 1.3.3 changes to the OEPerceiveResidues function. The new functionality to identify an acetyl as an N-terminal blocking group, PDB code ACE, could get confused when pattern matching some pathological graphs, such as proteins with N-terminal proline residues.
  • Fixed a bug in the OEB file format writer that could result in the coordinates of a multiconformer molecule becoming scrambled if the atoms of the OEMolBase has been reordered, with OEMolBase::OrderAtoms, (and no atoms had been deleted) before writing the molecule. This could also affected the OEMolBase::Compress and OEMolBase::UnCompress methods.
  • Fixed a bug that could cause a core dump when making a copy of an OESubSearch instance that contains atom or bond stereo.

Minor bug fixes ——————————————————————————–^

  • Fixed a segmentation fault when calling either OEIsCommonIsotope or OEGetIsotopicWeight with both atomic number and atomic mass of zero. If ever OEIsCommonIsotope is called with a mass of zero (for any element) it now returns false, and whenever OEGetIsotopicWeight is called with a mass of zero, it now returns the corresponding isotopically averaged atomic weight, i.e. via OEGetAverageWeight.
  • The OEMatch class was missing an explicit assignment operator, which could cause memory corruption if one OEMatch was ever assigned to another. This has now been implemented.
  • Improved OEChem‘s OEDetermineConnectivity functionality to restrict proximity-based bonding of hydrogen atoms preferably to their nearest suitable heavy (non-hydrogen) neighbor. Previously, hydrogens only bonded to their nearest neighbor, which for all-atom molecules with bad clashes caused the overlapping protons to sublimate as molecular hydrogen, leaving their original parents in strange charge (or radical) states.
  • The generation of @TRIPOS<SUBSTRUCTURE> records in Sybyl .mol2 files has been rewritten to ensure that ligands, solvent molecules and non-standard amino acids are correctly placed in their own Tripos substructure. Previously, PDB HETATM s would be placed in substructure 1, sharing it with a valid RESIDUE. Each OEResidue is now allocated a unique Tripos substructure, and non-standard (or unrecognized) residues are marked as GROUP.
  • The geometry functions OESetAngle and OESetDistance have both been made more robust to molecules without coordinates (and zero bond lengths).
  • A refactoring of the SMILES generation routines in the OEChem source code means that the non-canonical SMILES created by the function OECreateAbsSmiString are now identical to those created by OECreateSmiString with just the OESMILESFlag::AtomMaps and OESMILESFlag::RGroups flags.
  • Tweaks OEDetermineConnectivity to avoid generating bonds between atoms in alternate locations/conformations. This is only a problem for PDB files read with the ALL input flavor. There are still multiple bonds between invariant hinge atoms and the multiple copies of its neighbors in alternate conformations.
  • Fixed a potential performance problem in OEMolBase‘s OEChem::OEMolBase::operator+=, and the equivalent OEAddMols function calls, when concatenating large molecules with coordinates.
  • The performance of reading MDL SD files containing a large quantity of SD tag data and for PDB files containing a large amount of header information (with the DATA flavor) has been improved. Instead of attaching each data item to the molecule as it’s encountered, the file format readers now accumulate the data first, and then attach it to the molecule on encountering the end of the connection table.
  • The performance of handling generic data tags when reading OEB files containing large numbers of atoms or bonds has been improved.
  • The consistency of file format flavors have been improved. The SMILES OEOFlavor::SMI::ExtBonds flavor that was previously only available to the OEFormat::SMI file format, is now also available to the OEFormat::CAN and OEFormat::ISM formats. Likewise, the flavors available to the OEFormat::MOL2 and OEFormat::MOL2H file formats have been synchronized, with OEFormat::MOL2H becoming a flavor of OEFormat::MOL2 (i.e. the file extension effectively specifies a different default flavor).
  • The OEMCSMaxAtomsCompleteCycles objective function requires that ring atoms and bonds of the query molecule have been perceived (using OEFindRingAtomsAndBonds) before the corresponding OEMCSSearch instance is constructed. To avoid unexpected behavior, the OEMCSSearch constructors now call OEFindRingAtomsAndBonds themselves if allowed to make a copy of the query molecule (the default), or issue a warning to OESystem::OEThrow otherwise.

OESystem 1.3.4

New Features ——————————————————————————–^

Minor bug fixes ——————————————————————————–^

  • A complete new implementation of OEConcatIter to avoid potential problems caused by the fact that appending items to an STL std::vector invalidates iterators over it. The new implementation uses offsets rather than pointers to avoid problems. This also fixes a crash of OEConcatIter::operator++ on an empty iterator.
  • Fixed a bug in OEIter::Push that caused problems if the iterator was previously empty.
  • Fixed a bug in OEFileExtension that was causing crashes when no extension was present.
  • Fixed a bug in OEInterface::GetParameters that caused parameters in sub sub interfaces to appear multiple times in the returned iterator.
  • The OEWriteSettings function now takes a const OEInterface reference.

OEPlatform 1.3.4

New Features ——————————————————————————–^

Minor bug fixes ——————————————————————————–^

  • Fixed a problem in the oeigzstream constructor, that could cause problems determining the size of a file using size, as zlib was not being correctly initialized.
  • Fixed a minor bug in OEFileCreate that was failing to close the file descriptor for the newly created file.
  • The return type of the OEFile::Size method and the OEFileSize function have been changed from size_t to oefpos_t to allow correct handling of large files on 32-bit platforms.
  • Fixed some minor bugs in oeistream and oeostream when these classes are used directly.