The FastROCS TK search algorithm performs an optimization to maximize the overlap between the query and the database molecule. This namespace defines a set of initial orientations for the optimization that are also referred to as alternative starts. The default orientation is OEFastROCSOrientation_Inertial, which can also be accessed via OEFastROCSOrientation_Default. As the optimization has a limited number of iterations, it may be beneficial to use alternative starting coordinates for some molecular systems. To set an alternative initial orientation use OEShapeDatabaseOptions.SetInitialOrientation.

At present there are 7 initial orientations available:


The default orientation is OEFastROCSOrientation_Inertial.


The query and the database molecule are aligned to the inertial frame and optimizations are performed for 4 inertial orientations of the database molecule, by rotating about its 2 major moments of inertia.


The database molecule is translated to each user-defined starting position and optimizations are performed for 4 inertial starts for each translation. See OEShapeDatabaseOptions.SetInitialOrientation and OEShapeDatabaseOptions.SetUserStarts for more details on setting the starting coordinates.


Currently, error checking is not performed for user-defined starting coordinates that fall out of scope of the molecule’s coordinate range therefore, bad starting coordinates will yield zero shape/color overlap.


The database molecule is translated to each heavy atom of the query molecule and optimizations are performed for 4 inertial starts for each translation. See OEShapeDatabaseOptions.SetInitialOrientation and OEShapeDatabaseOptions.GetInitialOrientation


The database molecule is translated to each color atom of the query molecule and optimizations are performed for 4 inertial starts for each translation. This method works for combo and shape-only searches. The only requirement is that the query molecule has color atoms. If the query molecule does not have color atoms the search will default to OEFastROCSOrientation_Inertial. See OEShapeDatabaseOptions.SetInitialOrientation, OEShapeDatabaseOptions.GetInitialOrientation and OEShapeDatabaseOptions.GetNumColorAtomStarts.


The query and database molecules are left AsIs. It is presumed that the conformers are already positioned in space (perhaps through docking) therefore they are not centered or set to the inertial frame of reference. This method carries out a single optimization at the query and database molecule’s original coordinates. No inertial orientations are optimized.


In order to use this method on a database the entire database is required to be reloaded with the OEShapeDatabase.Open or OEShapeDatabase.AddMol routine using unsigned int orient=OEFastROCSOrientation::AsIs as the last argument.


In order to use the OEShapeDatabaseScore.Constructors with this method it is required that the final argument to the constructor be unsigned int orient=OEFastROCSOrientation::AsIs.

See OEShapeDatabaseOptions.SetInitialOrientation, OEShapeDatabaseOptions.GetInitialOrientation, OEShapeDatabase.Open and OEShapeDatabaseScore.Constructors.


N random starts are generated by randomly orientating the database molecule N times. This method includes the ability to set the maximum random translation via the OEShapeDatabaseOptions.SetMaxRandomTranslation, option. The default maximum is 2 angstroms. The number of random starts can be set using the OEShapeDatabaseOptions.SetNumRandomStarts option. The default number of random starts is 10. The random seed can be set using the OEShapeDatabaseOptions.SetRandomSeed. The default random seed is based on the time.


The random API point is only deterministic when using the same seed if only one thread is set to open the database using OEShapeDatabase.SetNumOpenThreads between calls to GetScores or GetScores is called on the same opened database object.

See OEShapeDatabaseOptions.SetInitialOrientation OEShapeDatabaseOptions.GetInitialOrientation OEShapeDatabaseOptions.SetMaxRandomTranslation OEShapeDatabaseOptions.GetMaxRandomTranslation OEShapeDatabaseOptions.SetNumRandomStarts OEShapeDatabaseOptions.GetNumRandomStarts OEShapeDatabaseOptions.SetRandomSeed OEShapeDatabaseOptions.GetRandomSeed


Optimizations are carried for each inertial orientation at each heavy atom of the molecule with the most heavy atoms regardless of whether it is the query or the database molecule. This method is synonymous with OEFastROCSOrientation_InertialAtHeavyAtoms.

See OEShapeDatabaseOptions.SetInitialOrientation OEShapeDatabaseOptions.GetInitialOrientation

See the Starting positions for optimization section in the Shape TK theory documentation for a description of alternative starts.