PRELIMINARY-IMAGE This is a preliminary API until Spring 2021 and may be improved based on user feedback. It is currently available in C++ and Python.

This namespace contains constants representing how search data (molecules and pre-generated screens) are stored and searched in an OESubSearchDatabase object.

This namespace contains the following constants.


The default type is OESubSearchDatabaseType::InMemoryMultiThreaded.


When an OESubSearchDatabase is initialized with the OESubSearchDatabaseType::InMemoryMultiThreaded type, the search data, both molecules and pre-generated screens, are pre-loaded into memory.

This mode is memory intensive, but it provides the fastest way to search a dataset when utilizing all available processors on the machine.


When an OESubSearchDatabase is initialized with the OESubSearchDatabaseType::MolDatabaseMultiThreaded type, only the pre-generated screens are pre-loaded into memory. During the search, if a molecule can not be rejected based on its screen, then it has to be loaded from disk on-the-fly to perform atom-by-atom validation.

This mode is not as fast as OESubSearchDatabaseType::InMemoryMultiThreaded mode, however, it requires significantly less memory, allowing to searches on larger datasets. The performance loss is highly dependent on the query and its screening performance. If a significantly large number of hits can be pre-screened, searching only a couple thousands molecules can be done very fast even with the added I/O cost of loading molecules on the fly.


In both modes, searches can be executed in single or multi-treaded way based on the parameter (maximum number of processors) that was determined when the database was constructed.

See also