Coverage for python/lsst/geom/_SpherePoint.py: 36%

23 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-21 10:04 +0000

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 

24from lsst.utils import continueClass 

25 

26from ._geom import SpherePoint, _toUnitX, _toUnitY, _toUnitZ 

27 

28 

29def _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+) 

38class 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*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)