# LocalCoordinatesSite¶

class simtk.openmm.openmm.LocalCoordinatesSite(*args)

This is a VirtualSite that uses the locations of three other particles to compute a local coordinate system, then places the virtual site at a fixed location in that coordinate system. The origin of the coordinate system and the directions of its x and y axes are each specified as a weighted sum of the locations of the three particles:

origin = w<sub>1</sub>r<sub>1</sub> + w<sub>2</sub>r<sub>2</sub> + w<sub>3</sub>r<sub>3</sub>

xdir = w<sub>1</sub>r<sub>1</sub> + w<sub>2</sub>r<sub>2</sub> + w<sub>3</sub>r<sub>3</sub>

ydir = w<sub>1</sub>r<sub>1</sub> + w<sub>2</sub>r<sub>2</sub> + w<sub>3</sub>r<sub>3</sub>

For the origin, the three weights must add to one. For example if (w<sub>1</sub>, w<sub>2</sub>, w<sub>3</sub>) = (1.0, 0.0, 0.0), the origin of the local coordinate system is at the location of particle 1. For xdir and ydir, the weights must add to zero. For excample, if (w<sub>1</sub>, w<sub>2</sub>, w<sub>3</sub>) = (-1.0, 0.5, 0.5), the x axis points from particle 1 toward the midpoint between particles 2 and 3.

The z direction is computed as zdir = xdir x ydir. To ensure the axes are all orthogonal, ydir is then recomputed as ydir = zdir x xdir. All three axis vectors are then normalized, and the virtual site location is set to

origin + x*xdir + y*ydir + z*zdir

__init__(self, particle1, particle2, particle3, originWeights, xWeights, yWeights, localPosition) → LocalCoordinatesSite

__init__(self, other) -> LocalCoordinatesSite

Create a new LocalCoordinatesSite virtual site.

Parameters: particle1 (int) – the index of the first particle particle2 (int) – the index of the second particle particle3 (int) – the index of the third particle originWeights (Vec3) – the weight factors for the three particles when computing the origin location xWeights (Vec3) – the weight factors for the three particles when computing xdir yWeights (Vec3) – the weight factors for the three particles when computing ydir localPosition (Vec3) – the position of the virtual site in the local coordinate system

Methods

 __init__((self, particle1, particle2, ...) __init__(self, other) -> LocalCoordinatesSite getLocalPosition((self) -> Vec3 const &) Get the position of the virtual site in the local coordinate system. getNumParticles((self) -> int) Get the number of particles this virtual site depends on. getOriginWeights((self) -> Vec3 const &) Get the weight factors for the three particles when computing the origin location. getParticle((self, particle) -> int) Get the index of a particle this virtual site depends on. getXWeights((self) -> Vec3 const &) Get the weight factors for the three particles when computing xdir. getYWeights((self) -> Vec3 const &) Get the weight factors for the three particles when computing ydir.
getOriginWeights(self) → Vec3 const &

Get the weight factors for the three particles when computing the origin location.

getXWeights(self) → Vec3 const &

Get the weight factors for the three particles when computing xdir.

getYWeights(self) → Vec3 const &

Get the weight factors for the three particles when computing ydir.

getLocalPosition(self) → Vec3 const &

Get the position of the virtual site in the local coordinate system.

getNumParticles(self) → int

Get the number of particles this virtual site depends on.

getParticle(self, particle) → int

Get the index of a particle this virtual site depends on.

Parameters: particle (int) – the particle to get (between 0 and getNumParticles()) the index of the particle in the System int