# Version 1.7.2¶

## OEChem 1.7.2¶

• OEPDBIFlag, OEPDBOFlag, OEMDLOFlag, OEMOPACFlag constants namespaces are deprecated.

### New features¶

• OEReadMDLQueryFile now sets the title of the query molecule.
• OEChem now recognizes the MDL “wavy” bond. An OEBondBase can be queried for its stereo type by querying its generic data for the OEProperty_BondStereo tag. The returned unsigned int will be from the OEBondStereo namespace.
• OEChem now supports MDL query file R group definitions. These are lines starting with M RGP. The R group is represented as a OEQAtomBase with a map index the same as the R group number in the file.
• OEChem will now correct amidine and guanidinium functional groups where the bonds between C and N are marked as aromatic in MOL2 files.
• Significant performance improvement to reading single-conformer molecules from OEB files. Other minor performance improvements were made to OEB as well (including multi-conformer molecules). This speeds up OEDBMol compression and uncompression as well.
• Removed OECopyHistory function. OEChem::OEReadHeader is now smart enough to read the header into the OEHeader history if it is already populated with another header’s information.
• Support for the copy module interface (__copy__ and __deepcopy__) for objects that inherit from OEBase. This makes OEChem molecules behave a little more pythonic allowing the user to care a little less that they are C++ based objects.

• Added support for OEBase.GetData. This improves the ability to use OEBase.AddData and OEBase.GetDataIter from python.

• Added partial support for OEBase.AddData in python. Only primitive data types will work. More complex data types (Molecules, Surfaces, etc) will fall back to OEBase.SetData.

• OESmartsLexReplace is now properly wrapped for python.

• Added OEChem::OEAtomArray and OEChem::OEBondArray classes (similar to OEChem::OEFloatArray) for dealing with arrays of atom and bond pointers from python.

• Fixed an inconsistency of using OEIter.Target. Prior to 1.7.1 if Target was used inside a python iteration the Target would point to the next item in the iterator, not the current one. Therefore, the following assertion always holds:

atomiter = mol.GetAtoms()
for atom in atomiter:
assert atom == atomiter.Target()


This fix was implemented to support lazy iterators as returned by the new alternate location utilities: OEAltLocationFactory.GetGroups and OEAltGroup.GetLocations.

Note

Since the fix was implemented as a reimplementation of the OEIter.__iter__ method to make it return a python generator instead of the iterator object itself there is now a slight difference in the above code snippet and the alternative way of using the OEIter.next python iteration protocol as shown in the following code:

atomiter = mol.GetAtoms()
try:
while True:
atom = atomiter.next()
assert atom != atomiter.Target()
except StopIteration:
pass


This previous code snippet will behave the same in 1.7.0 and 1.7.1. However, note that now OEIter.Target returns the next item in the iterator. This is fundamentally how OEIter.next is required to work.

We could have not provided OEIter.next at all since the only requirement for python iteration is the __iter__ method. However, we choose to leave a OEIter.next implementation in order to not break code that was written like the following:

atomiter = mol.GetAtoms()
atom = atomiter.next() # grab the first atom


### Major bug fixes¶

• Fixed a OEReadMDLQueryFile segmentation fault when perceiving aromaticity with spirane rings containing generic atoms.
• Fixed a bug where atom parity was ignored when reading a 3D MOL file.
• Fixed a memory leak when initializing an OEMCSSearch with its constructor. The workaround in 1.7.0 is to use the OEMCSSearch.Init method instead.
• Fixed a memory leak with OEMCSSearch when OEMCSSearch.SetMaxMatches was set to a number lower than the total number of matches found.
• Fixed memory leak when creating and destroying multiple OELingoSim objects.
• Some OEOFlavor_PDB flavor combinations would generate corrupt data.
• OESmilesAtomCount now includes atoms of the form [#6] in its count.
• Fixed a bug where map indices on explicit hydrogens would be ignored when generating SMILES. For example, [CH] would get generated even if the hydrogen had a map index specified. Now [H:1][C] will be generated.
• The feature added in 1.7.0 of retrieving a python dictionary of the contents of an OEBase with the OEBase.GetData method was leaking memory. This has been fixed in this release.

### Minor bug fixes¶

• Energy set on an OEGraphMol using OEMolBase.SetEnergy would not get written out to OEB files. Energy data will now round-trip through the OEB format.
• Automatic conformer combining through the oemolistream.SetConfTest interface will now combine separate single-conformer molecules in an OEB into a multi-conformer molecule similar to the other file formats OEChem supports for that behavior (MOL2, SDF, etc).
• OEPerceiveBondOrders is more stable to pre-existing bond orders on the molecule.
• Rare non-deterministic bug fixed for sulfur monoxide bug in OEPerceiveBondOrders.
• OEChem now recognizes the DU residue name and the mythical DT residue which is synonym for  T.
• The new overload of OEIsReadable to take a string would return true if there was no periods (‘.’) in the string and the string began with a readable file extension, for example, “MDL-FOO”.
• Fixed a bug when OELibraryGen failed to generated products with correct Kekulé-form.

## OESystem 1.7.2¶

### Major bug fixes¶

• Fixed a memory leak with OEConstIter.

### Minor bug fixes¶

• Renamed the OEMakeFP function to OEParseHex to be more explicit about what is does.
• Valgrind would throw warnings about a change made in 1.7.0 for thread safety issues. Though this was not a true memory leak the code has been slightly changed to silence this warning.
• Fixed an exponential growth bug when adding history to an OEHeader.
• Assignment operators for OEMultiGrid now properly copy the titles of the subgrids.

## OEPlatform 1.7.2¶

### Minor bug fixes¶

• Revised the oestream.length and oestream.size documentation to be more accurate.

• oefpos_t now works for files greater than 4GB on 64-bit windows.

• Fixed an infinite loop that would occur from the following code:

oeosstream sfs;
sfs.open("foobar");
sfs.write("blah");


oeosstream.open will return false. Ignoring the false return value would cause oeosstream.write to loop indefinitely.

## OEBio 1.7.2¶

### New features¶

• Introduced new OEBio classes to manage alternate locations in protein data bank structures along with a new PDB input flavor OEIFlavor_PDB_ALTLOC to retain alternate location atoms on input.

### Major bug fixes¶

• The crystal symmetry routines were broken in the 1.7.0 release by a corrupted matrix.

• When reading symmetry from external sources (i.e. PDB files or maps) a warning is thrown when reading out of date space groups rather than fail to read symmetry.

• Setting space groups will fail unless the most current space group constraints are used.

• Added the following space group aliases for older style space groups.

I 1 2 1 -> C 1 2 1
P 1-    -> P -1


## OEGrid 1.3.3¶

### Major bug fixes¶

• Fixed a rare crash in OEMakeRegularGrid that was caused by floating point round-off error.