bool OEPrepareFastROCSMol(OEChem::OEMCMolBase &mol)
bool OEPrepareFastROCSMol(OEChem::OEMCMolBase &mol,
                          const OEShape::OEColorForceField &cff)

Prepares the molecule mol to improve the performance of loading the molecule into memory as a OEShapeDatabase object from a OEFormat.OEB file. The following steps are taken to improve the performance of OEShapeDatabase.Open by as much as 10-fold:

  • Sets the energy of each conformer to 0.0 to avoid writing it to OEB.
  • Suppresses hydrogens and reorders reference conformers for compression.
  • Pre-calculates color atoms.
  • Pre-calculates self-color and self-shape terms for all conformers.

It is also recommended to call OEPRECompress on the oemolostream before writing out to OEB. This will cause conformers to be stored in “PRE-compressed” form. This alleviates the need to Gzip the OEB file as well as it is also recommended to store the molecule in uncompressed form to improve the performance of OEMolDatabase.Open. In general, calling OEPrepareFastROCSMol and OEPRECompress will result in a smaller OEB file than the default OEB.GZ output from OMEGA.

If OEB file-size is the chief concern, a further reduction in file-size can be achieved by using a OEMCMolType.HalfFloatCartesian molecule to store reference coordinates and torsions as 16-bit floating point. To do this, make a copy of the output molecule from OEPrepareFastROCSMol like the following:

OEMol halfMol(mol, OEMCMolType::HalfFloatCartesian);
OEWriteMolecule(ofs, mol);
halfMol = OEMol(mol, OEMCMolType_HalfFloatCartesian)
OEWriteMolecule(ofs, mol)

Currently, 16-bit floating point has been measured to have a %12 file size savings while only costing about %7 more performance when loading the OEB from disk into memory.


By default, OEPrepareFastROCSMol will cache color atoms and self color terms for the OEColorFFType.ImplicitMillsDean color force field. The second overload that takes a OEColorForceField can be used to override this default.