Coverage for tests/testDegreesVersusRadians.py : 11%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from builtins import zip
2import unittest
3import numpy as np
4import lsst.utils.tests
5import lsst.sims.utils as utils
6from lsst.sims.utils import ObservationMetaData, Site, ModifiedJulianDate
9def setup_module(module):
10 lsst.utils.tests.init()
13class testDegrees(unittest.TestCase):
14 """
15 Test that all the pairs of methods that deal in degrees versus
16 radians agree with each other.
17 """
19 def setUp(self):
20 self.rng = np.random.RandomState(87334)
21 self.raList = self.rng.random_sample(100) * 2.0 * np.pi
22 self.decList = (self.rng.random_sample(100) - 0.5) * np.pi
23 self.lon = self.rng.random_sample(1)[0] * 360.0
24 self.lat = (self.rng.random_sample(1)[0] - 0.5) * 180.0
26 def testUnitConversion(self):
27 """
28 Test that arcsecFromRadians, arcsecFromDegrees,
29 radiansFromArcsec, and degreesFromArcsec are all
30 self-consistent
31 """
33 radList = self.rng.random_sample(100) * 2.0 * np.pi
34 degList = np.degrees(radList)
36 arcsecRadList = utils.arcsecFromRadians(radList)
37 arcsecDegList = utils.arcsecFromDegrees(degList)
39 np.testing.assert_array_equal(arcsecRadList, arcsecDegList)
41 arcsecList = self.rng.random_sample(100) * 1.0
42 radList = utils.radiansFromArcsec(arcsecList)
43 degList = utils.degreesFromArcsec(arcsecList)
44 np.testing.assert_array_equal(np.radians(degList), radList)
46 def testGalacticFromEquatorial(self):
47 raList = self.raList
48 decList = self.decList
50 lonRad, latRad = utils._galacticFromEquatorial(raList, decList)
51 lonDeg, latDeg = utils.galacticFromEquatorial(np.degrees(raList),
52 np.degrees(decList))
54 np.testing.assert_array_almost_equal(lonRad, np.radians(lonDeg), 10)
55 np.testing.assert_array_almost_equal(latRad, np.radians(latDeg), 10)
57 for ra, dec in zip(raList, decList):
58 lonRad, latRad = utils._galacticFromEquatorial(ra, dec)
59 lonDeg, latDeg = utils.galacticFromEquatorial(
60 np.degrees(ra), np.degrees(dec))
61 self.assertAlmostEqual(lonRad, np.radians(lonDeg), 10)
62 self.assertAlmostEqual(latRad, np.radians(latDeg), 10)
64 def testEquaorialFromGalactic(self):
65 lonList = self.raList
66 latList = self.decList
68 raRad, decRad = utils._equatorialFromGalactic(lonList, latList)
69 raDeg, decDeg = utils.equatorialFromGalactic(np.degrees(lonList),
70 np.degrees(latList))
72 np.testing.assert_array_almost_equal(raRad, np.radians(raDeg), 10)
73 np.testing.assert_array_almost_equal(decRad, np.radians(decDeg), 10)
75 for lon, lat in zip(lonList, latList):
76 raRad, decRad = utils._equatorialFromGalactic(lon, lat)
77 raDeg, decDeg = utils.equatorialFromGalactic(
78 np.degrees(lon), np.degrees(lat))
79 self.assertAlmostEqual(raRad, np.radians(raDeg), 10)
80 self.assertAlmostEqual(decRad, np.radians(decDeg), 10)
82 def testAltAzPaFromRaDec(self):
83 mjd = 57432.7
84 obs = ObservationMetaData(mjd=mjd, site=Site(
85 longitude=self.lon, latitude=self.lat, name='LSST'))
87 altRad, azRad, paRad = utils._altAzPaFromRaDec(
88 self.raList, self.decList, obs)
90 altDeg, azDeg, paDeg = utils.altAzPaFromRaDec(np.degrees(self.raList),
91 np.degrees(self.decList),
92 obs)
94 np.testing.assert_array_almost_equal(altRad, np.radians(altDeg), 10)
95 np.testing.assert_array_almost_equal(azRad, np.radians(azDeg), 10)
96 np.testing.assert_array_almost_equal(paRad, np.radians(paDeg), 10)
98 altRad, azRad, paRad = utils._altAzPaFromRaDec(
99 self.raList, self.decList, obs)
101 altDeg, azDeg, paDeg = utils.altAzPaFromRaDec(np.degrees(self.raList),
102 np.degrees(self.decList),
103 obs)
105 np.testing.assert_array_almost_equal(altRad, np.radians(altDeg), 10)
106 np.testing.assert_array_almost_equal(azRad, np.radians(azDeg), 10)
107 np.testing.assert_array_almost_equal(paRad, np.radians(paDeg), 10)
109 for ra, dec, in zip(self.raList, self.decList):
110 altRad, azRad, paRad = utils._altAzPaFromRaDec(ra, dec, obs)
111 altDeg, azDeg, paDeg = utils.altAzPaFromRaDec(np.degrees(ra),
112 np.degrees(dec),
113 obs)
115 self.assertAlmostEqual(altRad, np.radians(altDeg), 10)
116 self.assertAlmostEqual(azRad, np.radians(azDeg), 10)
117 self.assertAlmostEqual(paRad, np.radians(paDeg), 10)
119 def testRaDecFromAltAz(self):
120 azList = self.raList
121 altList = self.decList
122 mjd = 47895.6
123 obs = ObservationMetaData(mjd=mjd, site=Site(
124 longitude=self.lon, latitude=self.lat, name='LSST'))
126 raRad, decRad = utils._raDecFromAltAz(altList, azList, obs)
128 raDeg, decDeg = utils.raDecFromAltAz(np.degrees(altList),
129 np.degrees(azList), obs)
131 np.testing.assert_array_almost_equal(raRad, np.radians(raDeg), 10)
132 np.testing.assert_array_almost_equal(decRad, np.radians(decDeg), 10)
134 raRad, decRad = utils._raDecFromAltAz(altList, azList, obs)
136 raDeg, decDeg = utils.raDecFromAltAz(np.degrees(altList),
137 np.degrees(azList), obs)
139 np.testing.assert_array_almost_equal(raRad, np.radians(raDeg), 10)
140 np.testing.assert_array_almost_equal(decRad, np.radians(decDeg), 10)
142 for alt, az in zip(altList, azList):
143 raRad, decRad = utils._raDecFromAltAz(alt, az, obs)
144 raDeg, decDeg = utils.raDecFromAltAz(np.degrees(alt),
145 np.degrees(az), obs)
147 self.assertAlmostEqual(raRad, np.radians(raDeg), 10)
148 self.assertAlmostEqual(decRad, np.radians(decDeg), 10)
150 def testGetRotSkyPos(self):
151 rotTelList = self.rng.random_sample(len(self.raList)) * 2.0 * np.pi
152 mjd = 56321.8
154 obsTemp = ObservationMetaData(mjd=mjd, site=Site(
155 longitude=self.lon, latitude=self.lat, name='LSST'))
157 rotSkyRad = utils._getRotSkyPos(self.raList, self.decList,
158 obsTemp, rotTelList)
160 rotSkyDeg = utils.getRotSkyPos(np.degrees(self.raList),
161 np.degrees(self.decList),
162 obsTemp, np.degrees(rotTelList))
164 np.testing.assert_array_almost_equal(
165 rotSkyRad, np.radians(rotSkyDeg), 10)
167 rotSkyRad = utils._getRotSkyPos(self.raList, self.decList,
168 obsTemp, rotTelList[0])
170 rotSkyDeg = utils.getRotSkyPos(np.degrees(self.raList),
171 np.degrees(self.decList),
172 obsTemp, np.degrees(rotTelList[0]))
174 np.testing.assert_array_almost_equal(
175 rotSkyRad, np.radians(rotSkyDeg), 10)
177 for ra, dec, rotTel in \
178 zip(self.raList, self.decList, rotTelList):
180 rotSkyRad = utils._getRotSkyPos(ra, dec, obsTemp, rotTel)
182 rotSkyDeg = utils.getRotSkyPos(np.degrees(ra), np.degrees(dec),
183 obsTemp, np.degrees(rotTel))
185 self.assertAlmostEqual(rotSkyRad, np.radians(rotSkyDeg), 10)
187 def testGetRotTelPos(self):
188 rotSkyList = self.rng.random_sample(len(self.raList)) * 2.0 * np.pi
189 mjd = 56789.3
190 obsTemp = ObservationMetaData(mjd=mjd, site=Site(longitude=self.lon,
191 latitude=self.lat, name='LSST'))
193 rotTelRad = utils._getRotTelPos(self.raList, self.decList,
194 obsTemp, rotSkyList)
196 rotTelDeg = utils.getRotTelPos(np.degrees(self.raList),
197 np.degrees(self.decList),
198 obsTemp, np.degrees(rotSkyList))
200 np.testing.assert_array_almost_equal(
201 rotTelRad, np.radians(rotTelDeg), 10)
203 rotTelRad = utils._getRotTelPos(self.raList, self.decList,
204 obsTemp, rotSkyList[0])
206 rotTelDeg = utils.getRotTelPos(np.degrees(self.raList),
207 np.degrees(self.decList),
208 obsTemp, np.degrees(rotSkyList[0]))
210 np.testing.assert_array_almost_equal(
211 rotTelRad, np.radians(rotTelDeg), 10)
213 for ra, dec, rotSky in \
214 zip(self.raList, self.decList, rotSkyList):
216 obsTemp = ObservationMetaData(mjd=mjd, site=Site(
217 longitude=self.lon, latitude=self.lat, name='LSST'))
219 rotTelRad = utils._getRotTelPos(ra, dec, obsTemp, rotSky)
221 rotTelDeg = utils.getRotTelPos(np.degrees(ra), np.degrees(dec),
222 obsTemp, np.degrees(rotSky))
224 self.assertAlmostEqual(rotTelRad, np.radians(rotTelDeg), 10)
227class AstrometryDegreesTest(unittest.TestCase):
229 def setUp(self):
230 self.nStars = 10
231 self.rng = np.random.RandomState(8273)
232 self.raList = self.rng.random_sample(self.nStars) * 2.0 * np.pi
233 self.decList = (self.rng.random_sample(self.nStars) - 0.5) * np.pi
234 self.mjdList = self.rng.random_sample(10) * 5000.0 + 52000.0
235 self.pm_raList = utils.radiansFromArcsec(
236 self.rng.random_sample(self.nStars) * 10.0 - 5.0)
237 self.pm_decList = utils.radiansFromArcsec(
238 self.rng.random_sample(self.nStars) * 10.0 - 5.0)
239 self.pxList = utils.radiansFromArcsec(
240 self.rng.random_sample(self.nStars) * 2.0)
241 self.v_radList = self.rng.random_sample(self.nStars) * 500.0 - 250.0
243 def testApplyPrecession(self):
244 for mjd in self.mjdList:
245 raRad, decRad = utils._applyPrecession(self.raList,
246 self.decList,
247 mjd=ModifiedJulianDate(TAI=mjd))
249 raDeg, decDeg = utils.applyPrecession(np.degrees(self.raList),
250 np.degrees(self.decList),
251 mjd=ModifiedJulianDate(TAI=mjd))
253 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
254 np.testing.assert_array_almost_equal(dRa, np.zeros(self.nStars), 9)
256 dDec = utils.arcsecFromRadians(raRad - np.radians(raDeg))
257 np.testing.assert_array_almost_equal(
258 dDec, np.zeros(self.nStars), 9)
260 def testApplyProperMotion(self):
261 for mjd in self.mjdList:
262 raRad, decRad = utils._applyProperMotion(self.raList, self.decList,
263 self.pm_raList, self.pm_decList,
264 self.pxList, self.v_radList,
265 mjd=ModifiedJulianDate(TAI=mjd))
267 raDeg, decDeg = utils.applyProperMotion(np.degrees(self.raList),
268 np.degrees(self.decList),
269 utils.arcsecFromRadians(
270 self.pm_raList),
271 utils.arcsecFromRadians(
272 self.pm_decList),
273 utils.arcsecFromRadians(
274 self.pxList),
275 self.v_radList,
276 mjd=ModifiedJulianDate(TAI=mjd))
278 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
279 np.testing.assert_array_almost_equal(dRa, np.zeros(self.nStars), 9)
281 dDec = utils.arcsecFromRadians(raRad - np.radians(raDeg))
282 np.testing.assert_array_almost_equal(
283 dDec, np.zeros(self.nStars), 9)
285 for ra, dec, pm_ra, pm_dec, px, v_rad in \
286 zip(self.raList, self.decList, self.pm_raList, self.pm_decList,
287 self.pxList, self.v_radList):
289 raRad, decRad = utils._applyProperMotion(ra, dec, pm_ra, pm_dec, px, v_rad,
290 mjd=ModifiedJulianDate(TAI=self.mjdList[0]))
292 raDeg, decDeg = utils.applyProperMotion(np.degrees(ra), np.degrees(dec),
293 utils.arcsecFromRadians(pm_ra),
294 utils.arcsecFromRadians(pm_dec),
295 utils.arcsecFromRadians(px), v_rad,
296 mjd=ModifiedJulianDate(TAI=self.mjdList[0]))
298 self.assertAlmostEqual(utils.arcsecFromRadians(
299 raRad - np.radians(raDeg)), 0.0, 9)
300 self.assertAlmostEqual(utils.arcsecFromRadians(
301 decRad - np.radians(decDeg)), 0.0, 9)
303 def testAppGeoFromICRS(self):
304 mjd = 42350.0
305 for pmRaList in [self.pm_raList, None]:
306 for pmDecList in [self.pm_decList, None]:
307 for pxList in [self.pxList, None]:
308 for vRadList in [self.v_radList, None]:
309 raRad, decRad = utils._appGeoFromICRS(self.raList, self.decList,
310 pmRaList, pmDecList,
311 pxList, vRadList,
312 mjd=ModifiedJulianDate(TAI=mjd))
314 raDeg, decDeg = utils.appGeoFromICRS(np.degrees(self.raList),
315 np.degrees(self.decList),
316 utils.arcsecFromRadians(pmRaList),
317 utils.arcsecFromRadians(pmDecList),
318 utils.arcsecFromRadians(pxList),
319 vRadList,
320 mjd=ModifiedJulianDate(TAI=mjd))
322 dRa = utils.arcsecFromRadians(
323 raRad - np.radians(raDeg))
324 np.testing.assert_array_almost_equal(
325 dRa, np.zeros(self.nStars), 9)
327 dDec = utils.arcsecFromRadians(
328 raRad - np.radians(raDeg))
329 np.testing.assert_array_almost_equal(
330 dDec, np.zeros(self.nStars), 9)
332 def testObservedFromAppGeo(self):
333 obs = ObservationMetaData(pointingRA=35.0, pointingDec=-45.0,
334 mjd=43572.0)
336 for includeRefraction in [True, False]:
337 raRad, decRad = utils._observedFromAppGeo(self.raList, self.decList,
338 includeRefraction=includeRefraction,
339 altAzHr=False, obs_metadata=obs)
341 raDeg, decDeg = utils.observedFromAppGeo(np.degrees(self.raList),
342 np.degrees(self.decList),
343 includeRefraction=includeRefraction,
344 altAzHr=False, obs_metadata=obs)
346 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
347 np.testing.assert_array_almost_equal(dRa, np.zeros(self.nStars), 9)
349 dDec = utils.arcsecFromRadians(raRad - np.radians(raDeg))
350 np.testing.assert_array_almost_equal(
351 dDec, np.zeros(self.nStars), 9)
353 raDec, altAz = utils._observedFromAppGeo(self.raList, self.decList,
354 includeRefraction=includeRefraction,
355 altAzHr=True, obs_metadata=obs)
357 raRad = raDec[0]
358 altRad = altAz[0]
359 azRad = altAz[1]
361 raDec, altAz = utils.observedFromAppGeo(np.degrees(self.raList),
362 np.degrees(self.decList),
363 includeRefraction=includeRefraction,
364 altAzHr=True, obs_metadata=obs)
366 raDeg = raDec[0]
367 altDeg = altAz[0]
368 azDeg = altAz[1]
370 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
371 np.testing.assert_array_almost_equal(dRa, np.zeros(self.nStars), 9)
373 dDec = utils.arcsecFromRadians(raRad - np.radians(raDeg))
374 np.testing.assert_array_almost_equal(
375 dDec, np.zeros(self.nStars), 9)
377 dAz = utils.arcsecFromRadians(azRad - np.radians(azDeg))
378 np.testing.assert_array_almost_equal(dAz, np.zeros(self.nStars), 9)
380 dAlt = utils.arcsecFromRadians(altRad - np.radians(altDeg))
381 np.testing.assert_array_almost_equal(
382 dAlt, np.zeros(self.nStars), 9)
384 def testAppGeoFromObserved(self):
385 obs = ObservationMetaData(pointingRA=35.0, pointingDec=-45.0,
386 mjd=43572.0)
388 for includeRefraction in (True, False):
389 for wavelength in (0.5, 0.2, 0.3):
391 raRad, decRad = utils._appGeoFromObserved(self.raList, self.decList,
392 includeRefraction=includeRefraction,
393 wavelength=wavelength,
394 obs_metadata=obs)
396 raDeg, decDeg = utils.appGeoFromObserved(np.degrees(self.raList), np.degrees(self.decList),
397 includeRefraction=includeRefraction,
398 wavelength=wavelength,
399 obs_metadata=obs)
401 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
402 np.testing.assert_array_almost_equal(dRa, np.zeros(len(dRa)), 9)
404 dDec = utils.arcsecFromRadians(decRad - np.radians(decDeg))
405 np.testing.assert_array_almost_equal(dDec, np.zeros(len(dDec)), 9)
407 def testIcrsFromAppGeo(self):
409 for mjd in (53525.0, 54316.3, 58463.7):
410 for epoch in(2000.0, 1950.0, 2010.0):
412 raRad, decRad = utils._icrsFromAppGeo(self.raList, self.decList,
413 epoch=epoch,
414 mjd=ModifiedJulianDate(TAI=mjd))
416 raDeg, decDeg = utils.icrsFromAppGeo(np.degrees(self.raList),
417 np.degrees(self.decList),
418 epoch=epoch, mjd=ModifiedJulianDate(TAI=mjd))
420 dRa = utils.arcsecFromRadians(np.abs(raRad - np.radians(raDeg)))
421 self.assertLess(dRa.max(), 1.0e-9)
423 dDec = utils.arcsecFromRadians(np.abs(decRad - np.radians(decDeg)))
424 self.assertLess(dDec.max(), 1.0e-9)
426 def testObservedFromICRS(self):
427 obs = ObservationMetaData(pointingRA=35.0, pointingDec=-45.0, mjd=43572.0)
428 for pmRaList in [self.pm_raList, None]:
429 for pmDecList in [self.pm_decList, None]:
430 for pxList in [self.pxList, None]:
431 for vRadList in [self.v_radList, None]:
432 for includeRefraction in [True, False]:
434 raRad, decRad = utils._observedFromICRS(self.raList, self.decList,
435 pm_ra=pmRaList, pm_dec=pmDecList,
436 parallax=pxList, v_rad=vRadList,
437 obs_metadata=obs, epoch=2000.0,
438 includeRefraction=includeRefraction)
440 raDeg, decDeg = utils.observedFromICRS(np.degrees(self.raList),
441 np.degrees(self.decList),
442 pm_ra=utils.arcsecFromRadians(pmRaList),
443 pm_dec=utils.arcsecFromRadians(pmDecList),
444 parallax=utils.arcsecFromRadians(pxList),
445 v_rad=vRadList,
446 obs_metadata=obs, epoch=2000.0,
447 includeRefraction=includeRefraction)
449 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
450 np.testing.assert_array_almost_equal(dRa, np.zeros(self.nStars), 9)
452 dDec = utils.arcsecFromRadians(decRad - np.radians(decDeg))
453 np.testing.assert_array_almost_equal(dDec, np.zeros(self.nStars), 9)
455 def testIcrsFromObserved(self):
456 obs = ObservationMetaData(pointingRA=35.0, pointingDec=-45.0,
457 mjd=43572.0)
459 for includeRefraction in [True, False]:
461 raRad, decRad = utils._icrsFromObserved(self.raList, self.decList,
462 obs_metadata=obs, epoch=2000.0,
463 includeRefraction=includeRefraction)
465 raDeg, decDeg = utils.icrsFromObserved(np.degrees(self.raList), np.degrees(self.decList),
466 obs_metadata=obs, epoch=2000.0,
467 includeRefraction=includeRefraction)
469 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
470 np.testing.assert_array_almost_equal(dRa, np.zeros(self.nStars), 9)
472 dDec = utils.arcsecFromRadians(decRad - np.radians(decDeg))
473 np.testing.assert_array_almost_equal(dDec, np.zeros(self.nStars), 9)
475 def testraDecFromPupilCoords(self):
476 obs = ObservationMetaData(pointingRA=23.5, pointingDec=-115.0, mjd=42351.0, rotSkyPos=127.0)
478 xpList = self.rng.random_sample(100) * 0.25 * np.pi
479 ypList = self.rng.random_sample(100) * 0.25 * np.pi
481 raRad, decRad = utils._raDecFromPupilCoords(xpList, ypList, obs_metadata=obs, epoch=2000.0)
482 raDeg, decDeg = utils.raDecFromPupilCoords(xpList, ypList, obs_metadata=obs, epoch=2000.0)
484 dRa = utils.arcsecFromRadians(raRad - np.radians(raDeg))
485 np.testing.assert_array_almost_equal(dRa, np.zeros(len(xpList)), 9)
487 dDec = utils.arcsecFromRadians(decRad - np.radians(decDeg))
488 np.testing.assert_array_almost_equal(dDec, np.zeros(len(xpList)), 9)
490 def testpupilCoordsFromRaDec(self):
491 obs = ObservationMetaData(pointingRA=23.5, pointingDec=-115.0, mjd=42351.0, rotSkyPos=127.0)
493 # need to make sure the test points are tightly distributed around the bore site, or
494 # PALPY will throw an error
495 raList = self.rng.random_sample(self.nStars) * np.radians(1.0) + np.radians(23.5)
496 decList = self.rng.random_sample(self.nStars) * np.radians(1.0) + np.radians(-115.0)
498 xpControl, ypControl = utils._pupilCoordsFromRaDec(raList, decList,
499 obs_metadata=obs, epoch=2000.0)
501 xpTest, ypTest = utils.pupilCoordsFromRaDec(np.degrees(raList), np.degrees(decList),
502 obs_metadata=obs, epoch=2000.0)
504 dx = utils.arcsecFromRadians(xpControl - xpTest)
505 np.testing.assert_array_almost_equal(dx, np.zeros(self.nStars), 9)
507 dy = utils.arcsecFromRadians(ypControl - ypTest)
508 np.testing.assert_array_almost_equal(dy, np.zeros(self.nStars), 9)
511class MemoryTestClass(lsst.utils.tests.MemoryTestCase):
512 pass
514if __name__ == "__main__": 514 ↛ 515line 514 didn't jump to line 515, because the condition on line 514 was never true
515 lsst.utils.tests.init()
516 unittest.main()