OEChem 1.4.0 is a major new feature release. OpenEye is introducing
OEBio, a new programming library extending OEChem‘s convenience in
handling biopolymers. In this initial release, OEBio‘s API is small
but useful. Over the life of the 1.4.x OEChem release series the
OEBio API will grow. The purpose of OEBio is not to cover
Bioinformatics, but to extend OEChem‘s strong cheminformatics
foundation to conveniently support protein modeling.
The source-code and examples in /openeye/examples/oechem have long
been caught in a conflict. They served both as very useful tools and
as didactic coding examples. To fulfill the role as tools, they
needed good command-line-interfaces and error reporting.
Unfortunately these features lead to more complex code. To fulfill a
role as code examples, these programs need to be as simple as
possible, highlighting one or two programming principles. In order to
better serve both purposes, the example programs have now been split
into /openeye/utilities and /openeye/examples, the first includes
programs with more complex code and better interfaces and the latter
with simple OEChem code examples. In addition, nine new example
programs have been included to demonstrate common uses of the OEBio
In addition to OEBio, the 1.4.0 release includes many new features
and bug fixes in the OEChem, OESystem and OEPlatform libraries.
- Split the programs previously in the examples directory into
examples and utilities. The utilities directory will contain
programs or versions of programs that may be useful and convenient
for modelers to carry out common tasks. The examples directory
will contain programs that may also be useful, but there primary
purpose will be to provide didactic code examples of how to program
common tasks using the OEChem library.
- New support for highly compact rotor-offset compressed oeb files.
- Added support for MDL ISIS Sketch file format with the .skc suffix.
- Added support for writing hydrogens that are required for specifying cis-trans stereo.
- Added support for [Ds] and [Rg] in SMILES and SMARTS.
- Added support for writing high-atomic number atoms in SMILES using
- New OEWriteConstMolecule function class to support high-level
writing of const molecules. Introduced return-codes for the high-level writers
that reflect that some molecules are inherently not supported by certain file
formats (e.g. >999 atoms in .sdf).
- Add an OEOFlavor::MOL2::Substructure high-level writer flavor to
force an @TRIPOS<SUBSTRUCTURE> idiom in the .mol2 file.
- New OEHasStereoHydrogens function that determines if
an atom has a proton that is required to specify stereochemistry.
- Added retainStereo=false default argument to
OESuppressHydrogens that keeps hydrogens indicated by the
- Added OEMatchBase::Clear method.
- Dramatically improved efficiency of
deleting large numbers of conformers in order. Worst case behavior of the
algorithm was changed from \(N*N\) to \(N\).
- Allow the SD file reader to handle a blank line between the M END and
the ‘$ $ $ $’ lines.
- Added convenience functions for getting and setting the MDL parity on
- Added new bitmask initialization parameters to
OEInitDefaultHandler that allow easy specification of which handlers to
- New support for h, d, t, [T] and [t] non-standard
- Improved support for multiple NMR models in PDB files by reading,
retaining and writing model number.
- Added fully supported OEPDBData and OEPDBDataPair
classes as well as the necessary function to store and retrieve them from molecules.
- Three new convenience functions for clearing tag data:
OEChem::OEClearTagData, OEClearSDData and
- Added support for determining whether the library is properly licensed
with OEChemIsLicensed function.
- Added OEResidueHydrogens function that will rename
hydrogens an a heavy atom to their proper PDB atom names.
Minor bug fixes
- Added PDBData readers and writers to OEBinary file handlers.
- Added defensive code to OEMolBase::DeleteAtom and
OEMolBase::DeleteBond to confirm that the atom or bond are owned by that
- Fixed rotation bug in inertial frame alignment.
- Converted inconsistent / and \ into a warning rather than
an error, allowing the molecule to be parsed in a racemic fashion.
- Added an upper bound to the degree of the atoms at either end of a
cis-trans chiral double bond.
- Added defensive code to prevent creation of atoms with atomic number
greater than 255.
- Improved perception of non-aromatic exo double-bonds. This corrects a
problem perceiving the progesterone in pdb1a28.
- Improved the exo-cyclic double bonds to sulfur. This improves the
connectivity perception in 1hnv, 1rev, 1usn, 1uwb,
2usn, 3usn and 1zxv.
- Improved the bond order perception of nitroso, oxime, azide, and
arylhydroxylamine functional groups.
- Improved bond order perception of clashed structures by allowing
hydrogens to only bond to their nearest heavy atoms.
- Prevent alternate conformation representations to be bonded to one
another during bond perception.
- Made Up/Down choice for the first stereo bond in each resonance system
canonical for writing isomeric smiles files.
- Made OECanonicalOrderBonds also order the bonds obtained with the
OEAtomBase::GetBonds function call.
- Fixed bug in binary search for atomic number 0 used in
OEIsCommonIsotope, OEGetAverageWeight and
- Fixed the high-level pdb writer to preserve residue information found on
- Corrected OEIsReadable to return false for the MOPAC file format.
- Added MOPAC flavors to the high-level molecule writers.
- Changed the hybridization assignment of negatively charged resonant
nitrogens such as *S(=O)(=O)[N-]C(=O)*.
- Fix bug in OESet3DHydrogenGeom the could use a hydrogen’s own
coordinates as a reference for determining its geometry.
- Fix ring perception bug in OEMCSMaxAtomsCompleteCycles.
- Eliminate the redundancy between OEChem::OEMDLSetBondStereo and
OE3DToBondStereo by allowing OE3DToBondStereo to take an
optional bond mask and work on 2D as well as 3D molecules.
- Correct a bug in the OEChem interpretation of MDL wedge and hash bonds.
In MDL connection tables, wedges and hashes only imply a specified stereo-center
at the thin end (i.e. OEBondBase::GetBgn). This has been confirmed by
comparing the wedge/hash bonds with the atom stereo parity bit in MDL ISIS
output (including large vendor databases such as the entire Asinex 2005
- Fixed MDL reader bug where unrecognized atomic symbols would ignore
subsequent fields in the atom block such as stereo parity, reaction role and
- Added copy constructors and assignment operators to OEMiniMols,
OEChem::OEMiniBonds and OEMiniAtoms.
- Fixed a sign error in OESetAngle.
- Added a length==0.0 check for OESetDistance and
New Example Programs
These examples show the best feature of OEChem. Though most are less than 100
lines of simple code they demonstrate protein-protein sequence alignment, 2D
and 3D structure manipulation, residue perception, robust multi-format I/O, stl
integration, canonicalization, chirality perception and manipulation and many
other complex cheminformatics tasks. While the main loop of each program is
often only 30 lines long, it brings to bear thousand of lines of OEChem code
and years of cumulative cheminformatics experience to easily combine 2D and 3D
structure analysis and manipulation.
- backbone.cpp: Code to show the use of functors to select and write the
backbone atoms of a protein.
- cischeck.cpp: Demonstrates how to loop over residues and checking the
omega torsion for cis amides.
- makealpha.cpp: A code example of protein structure manipulation. This
example modifies any protein into an alpha-helical structure with extended
- phipsi.cpp: Simple code to report the phi-psi angles of a protein.
- rescount.cpp: Demonstrates an easy way to loop over the residues of a
protein and query their information.
- reshist.cpp: Demonstrates and easy way to loop over a protein’s residues
and integrate the acquired data into an STL dictionary class.
- seqalign.cpp: This is perhaps the most complex program of the examples.
It carries out protein-protein sequence alignment, alignment evaluation and
printing as well as 3D structural alignment.
- subsetres.cpp: Simple code example of how to pull a specific residue out
of a protein using its common name(e.g. ARG B 52).
- swapaieres.cpp: Demonstrates how a user can select a residue using its
common name (e.g. GLN 252) and swap the ambiguous iso-electronic atoms.