Source code for gala.coordinates.poincarepolar

# coding: utf-8

from __future__ import division, print_function

__author__ = "adrn <adrn@astro.columbia.edu>"

# Third-party
import numpy as np

__all__ = ["cartesian_to_poincare_polar"]

[docs]def cartesian_to_poincare_polar(w): r""" Convert an array of 6D Cartesian positions to Poincaré symplectic polar coordinates. These are similar to cylindrical coordinates. Parameters ---------- w : array_like Input array of 6D Cartesian phase-space positions. Should have shape ``(norbits,6)``. Returns ------- new_w : :class:`~numpy.ndarray` Points represented in 6D Poincaré polar coordinates. """ R = np.sqrt(w[...,0]**2 + w[...,1]**2) # phi = np.arctan2(w[...,1], w[...,0]) phi = np.arctan2(w[...,0], w[...,1]) vR = (w[...,0]*w[...,0+3] + w[...,1]*w[...,1+3]) / R vPhi = w[...,0]*w[...,1+3] - w[...,1]*w[...,0+3] # pg. 437, Papaphillipou & Laskar (1996) sqrt_2THETA = np.sqrt(np.abs(2*vPhi)) pp_phi = sqrt_2THETA * np.cos(phi) pp_phidot = sqrt_2THETA * np.sin(phi) z = w[...,2] zdot = w[...,2+3] new_w = np.vstack((R.T, pp_phi.T, z.T, vR.T, pp_phidot.T, zdot.T)).T return new_w