# Version 1.3.0¶

## OEChem 1.3.0¶

### New Features¶

• Added reaction parsing and processing including: OELibraryGen class for generating combinatorial libraries; OEUniMolecularRxn class primarily for applying normalizations; OEParseSmirks function for converting Daylight’s SMIRKS format to an OEQMolBase; and OEReadRxnFile that takes an OEMolBase for reading MDL’s rxn files.
• Added OEVectorBindings class to handle SMARTS vector bindings.
• Added ability to perceive symmetry classes useful for automorphism detection.
• Added factory methods for allocating molecules. Implemented OEGraphMol, OEMol and OEQMol in terms of the factory methods.
• Added int and float grid handlers to OEBinaryIOHandler.
• Added OEDisassembleExpressions function which converts query expressions into data directly on atoms/bonds.
• Added OEMiniMol – a small memory footprint molecule useful for in-memory graph searching.
• Added utility functors OEUnaryToBinaryAnd and OEUnaryToBinaryOr that turn a unary functor into a binary ‘or’ or ‘and’ functor.
• Add default 64 bit file support on Linux.
• Added functions to set and get comment on molecules. These comments are written to the appropriate fields of .sdf, .mol2 and .oeb file formats.
• New function OEMDLStereoFromParity that sets the OEChem stereochemistry of each atom from the MDL stereo parity flag stored in generic data.

### Improvements and Optimizations¶

• Performance enhancement to OESetDistance.
• Modified the implementation of the OEMCMolBase member function SetActive for significant performance gains in binary i/o.
• Optimization of copy construction of OEMCMolBase.
• Added warning when oemolistream and oemolostream fail to allocate a oeogzstream or oeigzstream .
• Made OEMol and OEMCMolBase contain a separate dimensionality (e.g. - the value returned by OEMolBase::GetDimension) for each conformer rather than a single value for the molecule. This allows depictions and conformers to be stored on the same molecules and still be handled correctly by the .sd writers.
• Numerous improvements/enhancements to OEChem‘s PDB file reader. The list of exceptional residue names has been updated to match the May 2004 list of public PDB files from RCSB.
• The MDL mol file reader is tweaked to record unrecognized atomic symbols (just like we do for 3-letter superatom codes) storing them in the atom’s name property/field.
• The routine OEMDLPerceiveParity (and thereby the MDL mol file writer) is improved to record chiral centers that don’t have stereo specified as the MDL parity value 3 (unspecified chiral center).
• Improved performance for OEMolBase member functions OEMolBase::GetAtom, OEMolBase::GetBond and OEMolBase::Sweep.
• All parity values were being stored for atoms (including value == 0) which was unnecessary, and was consuming both memory and space on disk in the form of OEB files.
• Added call to seed random number generator from the clock in OERandomizeTorsions.
• Added more float multi-grid handlers to be initialized by default.
• A warning message was added to the SMARTS parser to alert users in cases of attempted assignment of map index to zero.
• Moved implementation of OEInSamePart to a template class so that parts can be tested for bonds (and other objects) as well atoms.
• Extended to OEIsRotor constructor to allow the option of hydrogen rotors.
• Created and exposed OEMDLStereoFromBondStereo function from previously internal code.

### Major bug fixes¶

• Fixed bug in OECalcCartesianCoord when rotating around the y axis. Prior implementation would give wildly incorrect results.
• Removed dangerous allocation of too small a temporary array for use in writing conformer coordinates to OEBinary files.
• Fixed bug in .mol2 file format reader that resulted in connection tables occasionally being skipped when reading files from stdin, pipes and/or sockets. The OEReadMol2File function no longer requires the use of tell and seek on its input stream.
• Modified the heuristic in OERMSD for recognizing and dealing with degenerate roots. When the heuristic fails, inappropriate rotation matrices were generated.
• Fixed bug in OESet3DHydrogenGeom where memcmp was comparing coordinates of type double, but using sizeof(float), so only a partial comparison was being carried out.
• Modifications which provide the ability to read OEBinary v2 files which contain unrecognized data, without losing the data.
• Added 1 byte at the end of OEMolCT record for molecules with >255 && <65536 bonds to store the endianness of short integers which are used to store bond records. The extra byte won’t break old format readers, although oeb files written with old version writers won’t be portable. This change doesn’t break anything either direction, but does allow for portability of oeb files.

### Minor bug fixes¶

• OEB files now properly store and read conformer energy.
• Fixed bug that prevented OEB’s large molecules (>255 atoms) from being cross platform.
• Reading and writing molecules in OEB format no longer fails if a string of 0 length has been tagged to the molecules generic data.
• Fixed bug in OEMolBase::Sweep to ensure that atoms/bonds are reindexed sequentially even if there have been no deletions.
• Fixed bug in OEParseSmiles that incorrectly parsed atom map indices.
• Fixed bug that OEAtomBase::SetStereo was returning false even when the stereo was set correctly.
• Fixed a bug in the copy constructor of OEMolTmplt that was only apparent for OEDBMols.
• Bug fixes to MDL superatom expansion to avoid problems with the order in which superatoms expanded.
• Fixed the return value of the DeleteAtom and DeleteBond member functions of OEMolBase and OEMol. The behavior of these functions was not changed.
• Added missing IsDeleted(OEAtomBase*) and IsDeleted(OEBondBase*) methods to OEMolBase.
• Fixed API misspelling of OESuppressHydrogens
• Fixed OEAddExplicitHydrogens to return bool rather than void to reflect its failures.
• Fixed OESet3DHydrogenGeom to return an appropriate boolean value rather than always returning true.
• In bool OERMSD (const OEMolBase&, const OEMCMolBase&, double *rmsdArray, const OEMatchBase &match, bool overlay = false, double *rot = 0, double *trans = 0) fixed bug that the first conformer of the OEMCMolBase was used repeatedly rather than using each conformer in succession.
• Corrected behavior of OESubsetMol in the case when a ring bond it the only item removed from the original molecule.
• Fixed a bug in OEChem‘s default OEAtomBase implementation that caused problems for an atom after 65536 neighboring bonds had been deleted. This occurred in codes repeatedly created temporary bonds then deleted them without calling OEAtomBase::Sweep.
• Fixes to atom naming bugs in OEChem‘s peptide reside perception routines. Also adds support for the PTR residue, representing phosphotyrosine. Additional fixes to tie splitting of C-terminal serine residues. Use  H’  to name C-terminal aldehyde hydrogens ( H ` denotes the backbone amide nitrogen’s hydrogen).
• Changed OEFuzzy::operator!= and OEFuzzy::operator== to return bool instead of OEFuzzy.
• Removed overloaded OEChem::OEMatch::operator new as it was incompatible with some versions of STL.

## OESystem 1.3.0¶

### New Features¶

• Added two functions OESystem::OEFizzGrid::GetFloatsSet and OESystem::OEFizzGrid::GetIntegersSet to determine if the floats and integers are set for this grid.
• Added the new functions OEBitVector::SetRangeOn and OEBitVector::SetRangeOff to OEBitVector.
• Classes to handle grid I/O in OEB files.
• Add default 64 bit file support on Linux.
• Added OEIter::Sort member function to iterators. This allows arbitrary sorting of the order in which objects come out of any OEIter.
• Added two functions: OEFileExtension and OEFileExtensions which return a string containing the specified filenames file extension or list of extensions respectively.

### Minor bug fixes¶

• Removed a bug where OESystem::OEFizzGrid::IsDataType calls OEBase::IsDataType as well
• Fixed a bug in OEConcatIter that would cause the iterator to appear to have only part of its contents of two empty iterators were pushed back onto the concat iterator.
• OEB read and write functions now return with meaningful values (previously the writers always returned false regardless and the readers always returned success regardless).
• Fixed problem with some interface parameters calling new on zero bytes, then reset the pointer, causing small leaks on some platforms.
• Corrected the error descriptor for FATAL errors.
• Fixed MSVC 7.1 ambiguity in operator && (const OEIter<T>&,  bool).
• Added endianness test for short integers to fix problems with small number of OEB files.
• Fixed recurring compile problem in cygwin where ssize_t isn’t defined.

## OEPlatform 1.3.0¶

### Improvements and Optimizations¶

• OEMutex implementation now uses pthreads for icc 8.0
• Add default 64 bit file support on Linux.

### Major bug fixes¶

• Defined NONMINMAX in openeye.h under win32, which prevents conflicts between STL min/max and windows min/max macros.

### Minor bug fixes¶

• Made gzip set and initialization functions work with std::cin.
• Fixed a bug in the gzip seek function.
• Fixed a few minor issues with the handling of trailing separators in path names.
• Fix bug in OEPlatform::OEStreamManager::openInput function. When there was no protocol part of the filename parameter, the internal protocol string was not properly NULL-terminated.
• Added code to properly initialize OEMutex.
• Used && to replace and for more consistent compiler support in OEMutex.
• Implemented copy constructor and assignment operator for oeisstream.