# Module MMTK.Subspace

This module implements subspaces for infinitesimal (or finite small-amplitude) atomic motions. They can be used in normal mode calculations (see example NormalModes/constrained_modes.py) or for analyzing complex motions [Hinsen1999a].

## Class Subspace: Subspace of infinitesimal atomic motions

Constructor: Subspace(universe, vectors)

universe

  the universe for which the subspace is created

vectors

  a list of MMTK.ParticleVector objects that define the subspace. They need not be orthogonal or linearly independent.

Methods:

- getBasis()

  Returns a basis for the subspace, which is obtained by orthonormalization of the input vectors using Singular Value Decomposition. The basis consists of a sequence of MMTK.ParticleVector objects that are orthonormal in configuration space.

- projectionOf(vector)

  Returns the projection of vector (a MMTK.ParticleVector object) onto the subspace.

- projectionComplementOf(vector)

  Returns the projection of vector (a MMTK.ParticleVector object) onto the orthogonal complement of the subspace.

## Class RigidMotionSubspace: Subspace of rigid-body motions

A subclass of MMTK.Subspace.Subspace.

A rigid-body motion subspace is the subspace which contains the rigid-body motions of any number of chemical objects.

Constructor: RigidMotionSubspace(universe, objects)

universe

  the universe for which the subspace is created

objects

  a sequence of objects whose rigid-body motion is included in the subspace

## Class PairDistanceSubspace: Subspace of pair-distance motions

A subclass of MMTK.Subspace.Subspace.

A pair-distance motion subspace is the subspace which contains the relative motions of any number of atom pairs along their distance vector, e.g. bond elongation between two bonded atoms.

Constructor: PairDistanceSubspace(universe, atom_pairs)

universe

  the universe for which the subspace is created

atom_pairs

  a sequence of atom pairs whose distance-vector motion is included in the subspace