For each *model* object (first molecule in our case or each molecule in
database) do:

- 1.
- Pick a reference frame.
- 2.
- Compute the 3D orthonormal basis associated with this reference frame and its shape signature (e.g. triangle sides length).
- 3.
- Compute the coordinates of all the other points (in a pre-specified neighborhood) in this reference frame.
- 4.
- Use each coordinate as an address to the hash (look-up) table. Store the entry [protein id, ref. frame, shape sign., point] at the hash table address.
- 5.
- Repeat above steps for each model reference frame (noncollinear triplet of model points).

Recognition stage of the algorithm uses the hash table, prepared in the preprocessing step.
The matching of a *target* object is accomplished as follows:

- 1.
- For each reference frame of the target:
- 2.
- Compute the 3D orthonormal basis and the shape signatureassociated with it.
- 3.
- Compute the coordinates of all other points in the current reference frame.
- 4.
- Use each coordinate to access the hash-table and retrieve all the records [protein id, ref. frame, shape sign.,point].
- 5.
- For records with matching shape signature ``vote'' for the pair [protein, ref. frame].
- 6.
- Compute the transformations of the ``high scoring'' hypotheses.
For each hypothesis one can also register the pairs of matching points.
This
*match list*along with the transformation comprise a*seed match*.

Now we can construct an alignment algorithm that uses Geometric Hashing as follows: