LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
_SpherePoint.py
Go to the documentation of this file.
1 #
2 # Developed for the LSST Data Management System.
3 # This product includes software developed by the LSST Project
4 # (https://www.lsst.org).
5 # See the COPYRIGHT file at the top-level directory of this distribution
6 # for details of code ownership.
7 #
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12 #
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <https://www.gnu.org/licenses/>.
20 #
21 
22 __all__ = []
23 
24 from lsst.utils import continueClass
25 
26 from ._geom import SpherePoint, _toUnitX, _toUnitY, _toUnitZ
27 
28 
29 def _pickExactlyOne(a, b, message):
30  if a is None and b is not None:
31  return b
32  if a is not None and b is None:
33  return a
34  raise ValueError(message)
35 
36 
37 @continueClass # noqa: F811 (FIXME: remove for py 3.8+)
38 class SpherePoint: # noqa: F811
39 
40  def __iter__(self):
41  for i in (0, 1):
42  yield self[i]
43 
44  def __repr__(self):
45  argList = ["%r*geom.degrees" % (pos.asDegrees(),) for pos in self]
46  return "SpherePoint(%s)" % (", ".join(argList))
47 
48  @staticmethod
49  def toUnitXYZ(*, longitude=None, latitude=None, ra=None, dec=None, units):
50  """Compute the unit 3-vectors (as separate arrays) corresponding to
51  arrays of longitude and latitude.
52 
53  Parameters
54  ----------
55  longitude : `float` or `numpy.ndarray`
56  Longitude coordinate of input points.
57  latitude : `float` or `numpy.ndarray`
58  Latitude coordinate of input points.
59  ra : `float` or `numpy.ndarray`
60  Synonym for `longitude`.
61  dec : `float` or `numpy.ndarray`
62  Synonym for `latitude`.
63  units : `AngleUnit`
64  Angle unit for inputs.
65 
66  Returns
67  -------
68  x : `float` or numpy.ndarray`
69  X coordinates of unit 3-vectors.
70  y : `float` or numpy.ndarray`
71  Y coordinates of unit 3-vectors.
72  z : `float` or numpy.ndarray`
73  Z coordinates of unit 3-vectors.
74 
75  Notes
76  -----
77  The returned Cartesian coordinate values are not guaranteed to be
78  normalized according to the conventions of `sphgeom.UnitVector3d`, but
79  are nevertheless compatible with the various vectorized `contains`
80  methods in `sphgeom` because those apply that normalization
81  internally.
82  """
83  factor = (1.0*units).asRadians()
84  lon = factor*_pickExactlyOne(longitude, ra, "Exactly one of ra and longitude must be provided.")
85  lat = factor*_pickExactlyOne(latitude, dec, "Exactly one of dec and latitude must be provided.")
86  return _toUnitX(lon, lat), _toUnitY(lon, lat), _toUnitZ(lon, lat)
def toUnitXYZ(*longitude=None, latitude=None, ra=None, dec=None, units)
Definition: _SpherePoint.py:49