summaryrefslogtreecommitdiff
path: root/lib/vector.py
diff options
context:
space:
mode:
authorsienkiew <sienkiew@stsci.edu>2014-03-25 10:53:08 -0400
committersienkiew <sienkiew@stsci.edu>2014-03-25 10:53:08 -0400
commit5d00dcb1a0123389d9759698a5c42828e17af9bc (patch)
treeecef07881ea7b6b661ee5f59847b00dafecf3409 /lib/vector.py
parent64be292044c4428b5908acf5cc2dda6693ed1afb (diff)
downloadstsci.sphere-5d00dcb1a0123389d9759698a5c42828e17af9bc.tar.gz
mod for d2to1 install
git-svn-id: http://svn.stsci.edu/svn/ssb/stsci_python/stsci.sphere/trunk@30670 fe389314-cf27-0410-b35b-8c050e845b92 Former-commit-id: 91667828b7e01b5aae55679093564473a976e8a9
Diffstat (limited to 'lib/vector.py')
-rw-r--r--lib/vector.py243
1 files changed, 0 insertions, 243 deletions
diff --git a/lib/vector.py b/lib/vector.py
deleted file mode 100644
index c6887c4..0000000
--- a/lib/vector.py
+++ /dev/null
@@ -1,243 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (C) 2011 Association of Universities for Research in
-# Astronomy (AURA)
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above
-# copyright notice, this list of conditions and the following
-# disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following
-# disclaimer in the documentation and/or other materials
-# provided with the distribution.
-#
-# 3. The name of AURA and its representatives may not be used to
-# endorse or promote products derived from this software without
-# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT,
-# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-# OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""
-The `sphere.vector` module contains the basic operations for handling
-vectors and converting them to and from other representations.
-"""
-
-from __future__ import unicode_literals
-
-# THIRD-PARTY
-import numpy as np
-
-
-__all__ = ['radec_to_vector', 'vector_to_radec', 'normalize_vector',
- 'rotate_around']
-
-
-def radec_to_vector(ra, dec, degrees=True):
- r"""
- Converts a location on the unit sphere from right-ascension and
- declination to an *x*, *y*, *z* vector.
-
- Parameters
- ----------
- ra, dec : scalars or 1-D arrays
-
- degrees : bool, optional
-
- If `True`, (default) *ra* and *dec* are in decimal degrees,
- otherwise in radians.
-
- Returns
- -------
- x, y, z : tuple of scalars or 1-D arrays of the same length
-
- Notes
- -----
- Where right-ascension is *α* and declination is *δ*:
-
- .. math::
- x = \cos\alpha \cos\delta
-
- y = \sin\alpha \cos\delta
-
- z = \sin\delta
- """
- ra = np.asanyarray(ra)
- dec = np.asanyarray(dec)
-
- if degrees:
- ra_rad = np.deg2rad(ra)
- dec_rad = np.deg2rad(dec)
- else:
- ra_rad = ra
- dec_rad = dec
-
- cos_dec = np.cos(dec_rad)
-
- return (
- np.cos(ra_rad) * cos_dec,
- np.sin(ra_rad) * cos_dec,
- np.sin(dec_rad))
-
-
-def vector_to_radec(x, y, z, degrees=True):
- r"""
- Converts a vector to right-ascension and declination.
-
- Parameters
- ----------
- x, y, z : scalars or 1-D arrays
- The input vectors
-
- degrees : bool, optional
- If `True` (default) the result is returned in decimal degrees,
- otherwise radians.
-
- Returns
- -------
- ra, dec : tuple of scalars or arrays of the same length
-
- Notes
- -----
- Where right-ascension is *α* and declination is
- *δ*:
-
- .. math::
- \alpha = \arctan2(y, x)
-
- \delta = \arctan2(z, \sqrt{x^2 + y^2})
- """
- x = np.asanyarray(x)
- y = np.asanyarray(y)
- z = np.asanyarray(z)
-
- result = (
- np.arctan2(y, x),
- np.arctan2(z, np.sqrt(x ** 2 + y ** 2)))
-
- if degrees:
- return np.rad2deg(result[0]), np.rad2deg(result[1])
- else:
- return result
-
-
-def normalize_vector(x, y, z, inplace=False):
- r"""
- Normalizes a vector so it falls on the unit sphere.
-
- *x*, *y*, *z* may be scalars or 1-D arrays
-
- Parameters
- ----------
- x, y, z : scalars or 1-D arrays of the same length
- The input vectors
-
- inplace : bool, optional
- When `True`, the original arrays will be normalized in place,
- otherwise a normalized copy is returned.
-
- Returns
- -------
- X, Y, Z : scalars of 1-D arrays of the same length
- The normalized output vectors
- """
- x = np.asanyarray(x)
- y = np.asanyarray(y)
- z = np.asanyarray(z)
-
- l = np.sqrt(x ** 2 + y ** 2 + z ** 2)
-
- if inplace:
- x /= l
- y /= l
- z /= l
- return (x, y, z)
- else:
- return (x / l, y / l, z / l)
-
-
-def rotate_around(x, y, z, u, v, w, theta, degrees=True):
- r"""
- Rotates the vector (*x*, *y*, *z*) around the arbitrary axis defined by
- vector (*u*, *v*, *w*) by *theta*.
-
- It is assumed that both (*x*, *y*, *z*) and (*u*, *v*, *w*) are
- already normalized.
-
- Parameters
- ----------
- x, y, z : doubles
- The normalized vector to rotate
-
- u, v, w : doubles
- The normalized vector to rotate around
-
- theta : double, or array of doubles
- The amount to rotate
-
- degrees : bool, optional
- When `True`, *theta* is given in degrees, otherwise radians.
-
- Returns
- -------
- X, Y, Z : doubles
- The rotated vector
- """
- if degrees:
- theta = np.deg2rad(theta)
-
- costheta = np.cos(theta)
- sintheta = np.sin(theta)
- icostheta = 1.0 - costheta
-
- det = (-u*x - v*y - w*z)
- X = (-u*det)*icostheta + x*costheta + (-w*y + v*z)*sintheta
- Y = (-v*det)*icostheta + y*costheta + ( w*x - u*z)*sintheta
- Z = (-w*det)*icostheta + z*costheta + (-v*x + u*y)*sintheta
-
- return X, Y, Z
-
-
-def equal_area_proj(x, y, z):
- """
- Transform the coordinates to a 2-dimensional plane using the
- Lambert azimuthal equal-area projection.
-
- Parameters
- ----------
- x, y, z : scalars or 1-D arrays
- The input vectors
-
- Returns
- -------
- X, Y : tuple of scalars or arrays of the same length
-
- Notes
- -----
-
- .. math::
-
- X = \sqrt{\frac{2}{1-z}}x
-
- .. math::
-
- Y = \sqrt{\frac{2}{1-z}}y
- """
- scale = np.sqrt(2.0 / (1.0 - z))
- X = scale * x
- Y = scale * y
- return X, Y