## Matching Pharmacophores

For maximum efficiency, a mapping is checked for whether it can match a pharmacophore in a series of steps ordered by increasing computational complexity:

1. The 2D limits are checked: this test ensures that the topological distances between the features (or between the atoms in the features) do not exceed the pharmacophores threshold values.
2. The 3D limits are checked: in this test the molecular distance bounds matrix is compared to the pharmacophore's distance requirements. If the molecular bounds matrix is compatible for this mapping, the matrix is updated.
3. Triangle bounds smoothing is attempted to ensure that the updated bounds matrix still satisfies the triangle inequality.

Any mapping which passes all three tests is considered to be a likely candidate for matching the pharmacophore and is reported as a "hit".
Note: Bounds matrices that pass triangle bounds smoothing are not absolutely guaranteed to be physically embeddable (i.e. they will not produce valid 3D geometries). This means that some small number of hits from the pharmacophore matching process will be false positives. This will become apparent when the user actually attempts to generate structures for these hits.