Coverage for tests/testCosmology.py : 7%

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
1import unittest
2import lsst.utils.tests
3import numpy as np
4import scipy
5from lsst.sims.photUtils import CosmologyObject
6from lsst.sims.photUtils.utils import comovingDistanceIntegrand, cosmologicalOmega
9def setup_module(module):
10 lsst.utils.tests.init()
13class CosmologyUnitTest(unittest.TestCase):
15 def setUp(self):
16 self.speedOfLight = 2.9979e5 # in km/sec
18 def tearDown(self):
19 del self.speedOfLight
21 def testFlatLCDM(self):
22 """
23 Test the evolution of H and Omega_i as a function of redshift for
24 flat Lambda CDM models
25 """
26 H0 = 50.0
27 for Om0 in np.arange(start=0.1, stop=0.91, step=0.4):
28 universe = CosmologyObject(H0=H0, Om0=Om0)
30 Og0 = universe.OmegaPhotons(redshift=0.0)
31 Onu0 = universe.OmegaNeutrinos(redshift=0.0)
33 self.assertAlmostEqual(universe.OmegaMatter(redshift=0.0), Om0, 10)
34 self.assertAlmostEqual(1.0 - Om0 - universe.OmegaDarkEnergy(redshift=0.0), Og0+Onu0, 6)
35 self.assertAlmostEqual(universe.H(redshift=0.0), H0, 10)
36 self.assertEqual(universe.OmegaCurvature(), 0.0)
38 Om0 = universe.OmegaMatter(redshift=0.0)
40 for zz in np.arange(start=0.0, stop=4.1, step=2.0):
42 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \
43 OkControl, = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0)
45 self.assertAlmostEqual(OmControl, universe.OmegaMatter(redshift=zz), 6)
46 self.assertAlmostEqual(OdeControl, universe.OmegaDarkEnergy(redshift=zz), 6)
47 self.assertAlmostEqual(OgControl, universe.OmegaPhotons(redshift=zz), 6)
48 self.assertAlmostEqual(OnuControl, universe.OmegaNeutrinos(redshift=zz), 6)
49 self.assertAlmostEqual(Hcontrol, universe.H(redshift=zz), 6)
51 del universe
53 def testFlatW0Wa(self):
54 """
55 Test the evolution of H and Omega_i as a function of redshift for
56 flat models with w = w0 + wa * z / (1 + z)
57 """
59 H0 = 96.0
60 for Om0 in np.arange(start=0.1, stop=0.95, step=0.4):
61 for w0 in np.arange(start=-1.1, stop=-0.89, step=0.2):
62 for wa in np.arange(start=-0.1, stop=0.11, step=0.2):
64 universe = CosmologyObject(H0=H0, Om0=Om0, w0=w0, wa=wa)
66 Og0 = universe.OmegaPhotons(redshift=0.0)
67 Onu0 = universe.OmegaNeutrinos(redshift=0.0)
69 self.assertAlmostEqual(universe.OmegaMatter(redshift=0.0), Om0, 10)
70 self.assertAlmostEqual(1.0 - Om0 - universe.OmegaDarkEnergy(redshift=0.0), Og0+Onu0, 6)
71 self.assertAlmostEqual(universe.H(redshift=0.0), H0, 10)
72 self.assertEqual(universe.OmegaCurvature(), 0.0)
74 Om0 = universe.OmegaMatter(redshift=0.0)
76 for zz in np.arange(start=0.0, stop=4.1, step=2.0):
78 wControl = w0 + wa*(1.0 - 1.0/(1.0+zz))
79 self.assertAlmostEqual(wControl, universe.w(redshift=zz), 6)
81 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \
82 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0,
83 w0=w0, wa=wa)
85 self.assertAlmostEqual(OmControl, universe.OmegaMatter(redshift=zz), 6)
86 self.assertAlmostEqual(OdeControl, universe.OmegaDarkEnergy(redshift=zz), 6)
87 self.assertAlmostEqual(OgControl, universe.OmegaPhotons(redshift=zz), 6)
88 self.assertAlmostEqual(OnuControl, universe.OmegaNeutrinos(redshift=zz), 6)
89 self.assertAlmostEqual(Hcontrol, universe.H(redshift=zz), 6)
91 del universe
93 def testFlatW0(self):
94 """
95 Test the evolution of H and Omega_i as a function of redshift for flat
96 models with constant w
97 """
99 H0 = 96.0
100 for Om0 in np.arange(start=0.1, stop=0.95, step=0.4):
101 for w0 in np.arange(start=-1.5, stop=-0.49, step=1.0):
103 universe = CosmologyObject(H0=H0, Om0=Om0, w0=w0)
105 Og0 = universe.OmegaPhotons(redshift=0.0)
106 Onu0 = universe.OmegaNeutrinos(redshift=0.0)
108 self.assertAlmostEqual(universe.OmegaMatter(redshift=0.0), Om0, 10)
109 self.assertAlmostEqual(1.0 - Om0 - universe.OmegaDarkEnergy(redshift=0.0), Og0+Onu0, 6)
110 self.assertAlmostEqual(universe.H(redshift=0.0), H0, 10)
111 self.assertEqual(universe.OmegaCurvature(), 0.0)
113 Om0 = universe.OmegaMatter(redshift=0.0)
115 for zz in np.arange(start=0.0, stop=4.1, step=2.0):
117 self.assertAlmostEqual(w0, universe.w(redshift=zz), 6)
119 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \
120 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0,
121 w0=w0, wa=0.0)
123 self.assertAlmostEqual(OmControl, universe.OmegaMatter(redshift=zz), 6)
124 self.assertAlmostEqual(OdeControl, universe.OmegaDarkEnergy(redshift=zz), 6)
125 self.assertAlmostEqual(OgControl, universe.OmegaPhotons(redshift=zz), 6)
126 self.assertAlmostEqual(OnuControl, universe.OmegaNeutrinos(redshift=zz), 6)
127 self.assertAlmostEqual(Hcontrol, universe.H(redshift=zz), 6)
129 del universe
131 def testNonFlatLCDM(self):
132 """
133 Test the evolution of H and Omega_i as a function of redshift for non-flat
134 Lambda CDM models
135 """
136 w0 = -1.0
137 wa = 0.0
138 H0 = 77.0
140 for Om0 in np.arange(start=0.15, stop=0.96, step=0.4):
141 for Ok0 in np.arange(start=-0.1, stop=0.11, step=0.2):
143 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa)
145 Og0 = universe.OmegaPhotons(redshift=0.0)
146 Onu0 = universe.OmegaNeutrinos(redshift=0.0)
148 self.assertAlmostEqual(universe.OmegaMatter(redshift=0.0), Om0, 10)
149 self.assertAlmostEqual(universe.OmegaCurvature(redshift=0.0), Ok0, 10)
150 self.assertAlmostEqual(1.0 - Ok0 - Om0 - universe.OmegaDarkEnergy(redshift=0.0), Og0+Onu0, 6)
151 self.assertAlmostEqual(universe.H(redshift=0.0), H0, 10)
153 Om0 = universe.OmegaMatter(redshift=0.0)
154 Ode0 = universe.OmegaDarkEnergy(redshift=0.0)
155 Ok0 = universe.OmegaCurvature(redshift=0.0)
157 for zz in np.arange(start=0.0, stop=4.0, step=2.0):
159 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \
160 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0,
161 Ode0=Ode0)
163 self.assertAlmostEqual(OmControl, universe.OmegaMatter(redshift=zz), 6)
164 self.assertAlmostEqual(OdeControl, universe.OmegaDarkEnergy(redshift=zz), 6)
165 self.assertAlmostEqual(OgControl, universe.OmegaPhotons(redshift=zz), 6)
166 self.assertAlmostEqual(OnuControl, universe.OmegaNeutrinos(redshift=zz), 6)
167 self.assertAlmostEqual(OkControl, universe.OmegaCurvature(redshift=zz), 6)
168 self.assertAlmostEqual(Hcontrol, universe.H(redshift=zz), 6)
170 del universe
172 def testNonFlatW0Wa(self):
173 """
174 Test the evolution of H and Omega_i as a function of redshift for non-flat
175 models with w = w0 + wa * z / (1+z)
176 """
178 H0 = 60.0
180 for Om0 in np.arange(start=0.15, stop=0.76, step=0.3):
181 for Ok0 in np.arange(start=-0.1, stop=0.11, step=0.2):
182 for w0 in np.arange(start=-1.1, stop=-0.89, step=0.2):
183 for wa in np.arange(start=-0.1, stop=0.15, step=0.2):
185 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa)
187 Og0 = universe.OmegaPhotons(redshift=0.0)
188 Onu0 = universe.OmegaNeutrinos(redshift=0.0)
190 self.assertAlmostEqual(universe.OmegaMatter(redshift=0.0), Om0, 10)
191 self.assertAlmostEqual(Ok0, universe.OmegaCurvature(redshift=0.0), 10)
192 self.assertAlmostEqual(1.0 - Om0 - Ok0 - universe.OmegaDarkEnergy(redshift=0.0),
193 Og0 + Onu0, 10)
194 self.assertAlmostEqual(universe.H(redshift=0.0), H0, 10)
196 Om0 = universe.OmegaMatter(redshift=0.0)
197 Ode0 = universe.OmegaDarkEnergy(redshift=0.0)
199 for zz in np.arange(start=0.0, stop=4.0, step=2.0):
201 wControl = w0 + wa*(1.0 - 1.0/(1.0+zz))
202 self.assertAlmostEqual(wControl, universe.w(redshift=zz), 6)
204 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \
205 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0,
206 w0=w0, wa=wa, Ode0=Ode0)
208 self.assertAlmostEqual(OmControl, universe.OmegaMatter(redshift=zz), 6)
209 self.assertAlmostEqual(OdeControl, universe.OmegaDarkEnergy(redshift=zz), 6)
210 self.assertAlmostEqual(OgControl, universe.OmegaPhotons(redshift=zz), 6)
211 self.assertAlmostEqual(OnuControl, universe.OmegaNeutrinos(redshift=zz), 6)
212 self.assertAlmostEqual(OkControl, universe.OmegaCurvature(redshift=zz), 6)
213 self.assertAlmostEqual(Hcontrol, universe.H(redshift=zz), 6)
215 del universe
217 def testNonFlatW0(self):
218 """
219 Test the evolution of H and Omega_i as a function of redshift for non-flat
220 models with constant w
221 """
223 H0 = 60.0
225 for Om0 in np.arange(start=0.15, stop=0.76, step=0.3):
226 for Ok0 in np.arange(start=0.1, stop=0.11, step=0.2):
227 for w0 in np.arange(start=-1.1, stop = -0.89, step=0.2):
229 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0)
231 Og0 = universe.OmegaPhotons(redshift=0.0)
232 Onu0 = universe.OmegaNeutrinos(redshift=0.0)
234 self.assertAlmostEqual(universe.OmegaMatter(redshift=0.0), Om0, 10)
235 self.assertAlmostEqual(Ok0, universe.OmegaCurvature(redshift=0.0), 10)
236 self.assertAlmostEqual(1.0 - Om0 - Ok0 - universe.OmegaDarkEnergy(redshift=0.0),
237 Og0+Onu0, 10)
239 self.assertAlmostEqual(universe.H(redshift=0.0), H0, 10)
241 Om0 = universe.OmegaMatter(redshift=0.0)
242 Ode0 = universe.OmegaDarkEnergy(redshift=0.0)
244 for zz in np.arange(start=0.0, stop=4.0, step=2.0):
246 self.assertAlmostEqual(w0, universe.w(redshift=zz), 6)
248 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \
249 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0,
250 w0=w0, wa=0.0, Ode0=Ode0)
252 self.assertAlmostEqual(OmControl, universe.OmegaMatter(redshift=zz), 6)
253 self.assertAlmostEqual(OdeControl, universe.OmegaDarkEnergy(redshift=zz), 6)
254 self.assertAlmostEqual(OgControl, universe.OmegaPhotons(redshift=zz), 6)
255 self.assertAlmostEqual(OnuControl, universe.OmegaNeutrinos(redshift=zz), 6)
256 self.assertAlmostEqual(OkControl, universe.OmegaCurvature(redshift=zz), 6)
257 self.assertAlmostEqual(Hcontrol, universe.H(redshift=zz), 6)
259 del universe
261 def testComovingDistance(self):
262 """
263 Test comoving distance calculation
265 Note: this is comoving distance defined as X in the FRW metric
267 ds^2 = -c^2 dt^2 + a^2 dX^2 + sin^2(X) dOmega^2
269 where spatial curvature is accounted for in the sin function
270 """
272 H0 = 73.0
273 for Om0 in np.arange(start=0.15, stop=0.56, step=0.2):
274 for Ok0 in np.arange(start=-0.1, stop=0.11, step=0.2):
275 for w0 in np.arange(start=-1.1, stop=-0.85, step=0.2):
276 for wa in np.arange(start=-0.1, stop=0.115, step=0.02):
278 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa)
279 Og0 = universe.OmegaPhotons()
280 Onu0 = universe.OmegaNeutrinos()
281 Ode0 = universe.OmegaDarkEnergy()
283 for zz in np.arange(start=0.1, stop=4.2, step=2.0):
284 comovingControl = universe.comovingDistance(redshift=zz)
286 comovingTest = \
287 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz,
288 args=(H0, Om0, Ode0,
289 Og0, Onu0, w0, wa))[0]
291 self.assertAlmostEqual(comovingControl/comovingTest, 1.0, 4)
293 def testLuminosityDistance(self):
294 """
295 Test the calculation of the luminosity distance
296 """
298 H0 = 73.0
300 for Om0 in np.arange(start=0.15, stop=0.56, step=0.2):
301 for Ok0 in np.arange(start=-0.1, stop=0.11, step=0.2):
302 for w0 in np.arange(start=-1.1, stop=-0.85, step=0.2):
303 for wa in np.arange(start=-0.1, stop=0.11, step=0.2):
305 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa)
307 sqrtkCurvature = \
308 np.sqrt(np.abs(universe.OmegaCurvature()))*universe.H()/self.speedOfLight
310 Og0 = universe.OmegaPhotons()
311 Onu0 = universe.OmegaNeutrinos()
312 Ode0 = universe.OmegaDarkEnergy()
314 for zz in np.arange(start=0.1, stop=4.2, step=2.0):
315 luminosityControl = universe.luminosityDistance(redshift=zz)
317 comovingDistance = \
318 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz,
319 args=(H0, Om0, Ode0, Og0, Onu0, w0, wa))[0]
321 if universe.OmegaCurvature() < 0.0:
322 nn = sqrtkCurvature*comovingDistance
323 nn = np.sin(nn)
324 luminosityTest = (1.0+zz)*nn/sqrtkCurvature
325 elif universe.OmegaCurvature() > 0.0:
326 nn = sqrtkCurvature*comovingDistance
327 nn = np.sinh(nn)
328 luminosityTest = (1.0+zz)*nn/sqrtkCurvature
329 else:
330 luminosityTest = (1.0+zz)*comovingDistance
331 self.assertAlmostEqual(luminosityControl/luminosityTest, 1.0, 4)
333 def testAngularDiameterDistance(self):
334 """
335 Test the calculation of the angular diameter distance
336 """
338 H0 = 56.0
339 universe = CosmologyObject()
340 for Om0 in np.arange(start=0.15, stop=0.56, step=0.2):
341 for Ok0 in np.arange(start=-0.1, stop=0.11, step=0.2):
342 for w0 in np.arange(start=-1.1, stop=-0.85, step=0.2):
343 for wa in np.arange(start=-0.1, stop=0.11, step=0.2):
345 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa)
347 sqrtkCurvature = \
348 np.sqrt(np.abs(universe.OmegaCurvature()))*universe.H()/self.speedOfLight
350 Og0 = universe.OmegaPhotons()
351 Onu0 = universe.OmegaNeutrinos()
352 Ode0 = universe.OmegaDarkEnergy()
354 for zz in np.arange(start=0.1, stop=4.2, step=2.0):
355 angularControl = universe.angularDiameterDistance(redshift=zz)
357 comovingDistance = \
358 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz,
359 args=(H0, Om0, Ode0, Og0, Onu0, w0, wa))[0]
361 if universe.OmegaCurvature() < 0.0:
362 nn = sqrtkCurvature*comovingDistance
363 nn = np.sin(nn)
364 angularTest = nn/sqrtkCurvature
365 elif universe.OmegaCurvature() > 0.0:
366 nn = sqrtkCurvature*comovingDistance
367 nn = np.sinh(nn)
368 angularTest = nn/sqrtkCurvature
369 else:
370 angularTest = comovingDistance
371 angularTest /= (1.0+zz)
372 self.assertAlmostEqual(angularControl/angularTest, 1.0, 4)
374 def testDistanceModulus(self):
375 """
376 Test the calculation of the distance modulus out to a certain redshift
377 """
378 H0 = 73.0
380 universe = CosmologyObject()
381 for Om0 in np.arange(start=0.15, stop=0.56, step=0.2):
382 for Ok0 in np.arange(start=-0.1, stop=0.11, step=0.2):
383 for w0 in np.arange(start=-1.1, stop=-0.85, step=0.2):
384 for wa in np.arange(start=-0.1, stop=0.11, step=0.2):
386 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa)
388 sqrtkCurvature = \
389 np.sqrt(np.abs(universe.OmegaCurvature()))*universe.H()/self.speedOfLight
391 Og0 = universe.OmegaPhotons()
392 Onu0 = universe.OmegaNeutrinos()
393 Ode0 = universe.OmegaDarkEnergy()
395 for zz in np.arange(start=0.1, stop=4.2, step=2.0):
396 modulusControl = universe.distanceModulus(redshift=zz)
398 comovingDistance = \
399 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz,
400 args=(H0, Om0, Ode0, Og0,
401 Onu0, w0, wa))[0]
403 if universe.OmegaCurvature() < 0.0:
404 nn = sqrtkCurvature*comovingDistance
405 nn = np.sin(nn)
406 luminosityDistance = (1.0+zz)*nn/sqrtkCurvature
407 elif universe.OmegaCurvature() > 0.0:
408 nn = sqrtkCurvature*comovingDistance
409 nn = np.sinh(nn)
410 luminosityDistance = (1.0+zz)*nn/sqrtkCurvature
411 else:
412 luminosityDistance = (1.0+zz)*comovingDistance
414 modulusTest = 5.0*np.log10(luminosityDistance) + 25.0
415 self.assertAlmostEqual(modulusControl/modulusTest, 1.0, 4)
417 def testDistanceModulusAtZero(self):
418 """
419 Test to make sure that the distance modulus is set to zero if the distance modulus method
420 returns a negative number
421 """
422 universe = CosmologyObject()
423 ztest = [0.0, 1.0, 2.0, 0.0, 3.0]
424 mm = universe.distanceModulus(redshift=ztest)
425 self.assertEqual(mm[0], 0.0)
426 self.assertEqual(mm[3], 0.0)
427 self.assertEqual(mm[1], 5.0*np.log10(universe.luminosityDistance(ztest[1])) + 25.0)
428 self.assertEqual(mm[2], 5.0*np.log10(universe.luminosityDistance(ztest[2])) + 25.0)
429 self.assertEqual(mm[4], 5.0*np.log10(universe.luminosityDistance(ztest[4])) + 25.0)
431 def testGetCurrent(self):
432 """
433 Test to make sure that getCurrent returns the activeCosmology
434 """
436 for Om0 in np.arange(start=0.2, stop=0.5, step=0.29):
437 for Ok0 in np.arange(start=-0.2, stop=0.2, step=0.39):
438 for w0 in np.arange(start=-1.2, stop=-0.7, step=0.49):
439 for wa in np.arange(start=-0.2, stop=0.2, step=0.39):
440 universe = CosmologyObject(Om0=Om0, Ok0=Ok0, w0=w0, wa=wa)
441 testUniverse = universe.getCurrent()
443 for zz in np.arange(start=1.0, stop=2.1, step=1.0):
444 self.assertEqual(universe.OmegaMatter(redshift=zz),
445 testUniverse.Om(zz))
446 self.assertEqual(universe.OmegaDarkEnergy(redshift=zz),
447 testUniverse.Ode(zz))
448 self.assertEqual(universe.OmegaPhotons(redshift=zz),
449 testUniverse.Ogamma(zz))
450 self.assertEqual(universe.OmegaNeutrinos(redshift=zz),
451 testUniverse.Onu(zz))
452 self.assertEqual(universe.OmegaCurvature(redshift=zz),
453 testUniverse.Ok(zz))
456class MemoryTestClass(lsst.utils.tests.MemoryTestCase):
457 pass
459if __name__ == "__main__": 459 ↛ 460line 459 didn't jump to line 460, because the condition on line 459 was never true
460 lsst.utils.tests.init()
461 unittest.main()