relative_positions_and_velocities¶
- halotools.mock_observables.relative_positions_and_velocities(x1, x2, period=None, **kwargs)[source]¶
Return the vector pointing from x2 towards x1, that is, x1 - x2, accounting for periodic boundary conditions.
If keyword arguments
v1
andv2
are passed in, additionally return the velocityv1
with respect tov2
, with sign convention such that positive (negative) values correspond to receding (approaching) points.- Parameters:
- x1array
1-d array of length Npts. If period is not None, all values must be contained in [0, Lbox)
- x2array
1-d array of length Npts. If period is not None, all values must be contained in [0, Lbox)
- periodfloat, optional
Size of the periodic box. Default is None for non-periodic case.
- Returns:
- xrelarray
1-d array of length Npts storing x1 - x2. If x1 > x2 and abs(x1 - x2) > period/2, the sign of d will be negative.
- vrelarray, optional
1-d array of length Npts storing v1 relative to v2. Only returned if
v1
andv2
are passed in.
Examples
>>> Lbox = 250.0 >>> x1 = 1. >>> x2 = 249. >>> result = relative_positions_and_velocities(x1, x2, period=Lbox) >>> assert np.isclose(result, 2)
>>> result = relative_positions_and_velocities(x1, x2, period=None) >>> assert np.isclose(result, -248)
>>> npts = 100 >>> x1 = np.random.uniform(0, Lbox, npts) >>> x2 = np.random.uniform(0, Lbox, npts) >>> result = relative_positions_and_velocities(x1, x2, period=Lbox)
Now let’s frame this result in terms of a physically motivated example. Suppose we have a central galaxy with position xc and velocity vc, and a satellite galaxy with position xs and velocity vs. We can calculate the vector pointing from the central to the satellite, as well as the satellites’s host-centric velocity:
>>> xcen, vcen = 249.9, 100 >>> xsat, vsat = 0.1, -300 >>> xrel, vrel = relative_positions_and_velocities(xsat, xcen, v1=vsat, v2=vcen, period=Lbox) >>> assert np.isclose(xrel, +0.2) >>> assert np.isclose(vrel, -400)
>>> xcen, vcen = 0.1, 100 >>> xsat, vsat = 249.9, -300 >>> xrel, vrel = relative_positions_and_velocities(xsat, xcen, v1=vsat, v2=vcen, period=Lbox) >>> assert np.isclose(xrel, -0.2) >>> assert np.isclose(vrel, +400)