Hide keyboard shortcuts

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 

7 

8 

9def setup_module(module): 

10 lsst.utils.tests.init() 

11 

12 

13class CosmologyUnitTest(unittest.TestCase): 

14 

15 def setUp(self): 

16 self.speedOfLight = 2.9979e5 # in km/sec 

17 

18 def tearDown(self): 

19 del self.speedOfLight 

20 

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) 

29 

30 Og0 = universe.OmegaPhotons(redshift=0.0) 

31 Onu0 = universe.OmegaNeutrinos(redshift=0.0) 

32 

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) 

37 

38 Om0 = universe.OmegaMatter(redshift=0.0) 

39 

40 for zz in np.arange(start=0.0, stop=4.1, step=2.0): 

41 

42 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \ 

43 OkControl, = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0) 

44 

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) 

50 

51 del universe 

52 

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 """ 

58 

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): 

63 

64 universe = CosmologyObject(H0=H0, Om0=Om0, w0=w0, wa=wa) 

65 

66 Og0 = universe.OmegaPhotons(redshift=0.0) 

67 Onu0 = universe.OmegaNeutrinos(redshift=0.0) 

68 

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) 

73 

74 Om0 = universe.OmegaMatter(redshift=0.0) 

75 

76 for zz in np.arange(start=0.0, stop=4.1, step=2.0): 

77 

78 wControl = w0 + wa*(1.0 - 1.0/(1.0+zz)) 

79 self.assertAlmostEqual(wControl, universe.w(redshift=zz), 6) 

80 

81 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \ 

82 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0, 

83 w0=w0, wa=wa) 

84 

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) 

90 

91 del universe 

92 

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 """ 

98 

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): 

102 

103 universe = CosmologyObject(H0=H0, Om0=Om0, w0=w0) 

104 

105 Og0 = universe.OmegaPhotons(redshift=0.0) 

106 Onu0 = universe.OmegaNeutrinos(redshift=0.0) 

107 

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) 

112 

113 Om0 = universe.OmegaMatter(redshift=0.0) 

114 

115 for zz in np.arange(start=0.0, stop=4.1, step=2.0): 

116 

117 self.assertAlmostEqual(w0, universe.w(redshift=zz), 6) 

118 

119 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \ 

120 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0, 

121 w0=w0, wa=0.0) 

122 

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) 

128 

129 del universe 

130 

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 

139 

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): 

142 

143 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa) 

144 

145 Og0 = universe.OmegaPhotons(redshift=0.0) 

146 Onu0 = universe.OmegaNeutrinos(redshift=0.0) 

147 

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) 

152 

153 Om0 = universe.OmegaMatter(redshift=0.0) 

154 Ode0 = universe.OmegaDarkEnergy(redshift=0.0) 

155 Ok0 = universe.OmegaCurvature(redshift=0.0) 

156 

157 for zz in np.arange(start=0.0, stop=4.0, step=2.0): 

158 

159 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \ 

160 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0, 

161 Ode0=Ode0) 

162 

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) 

169 

170 del universe 

171 

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 """ 

177 

178 H0 = 60.0 

179 

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): 

184 

185 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa) 

186 

187 Og0 = universe.OmegaPhotons(redshift=0.0) 

188 Onu0 = universe.OmegaNeutrinos(redshift=0.0) 

189 

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) 

195 

196 Om0 = universe.OmegaMatter(redshift=0.0) 

197 Ode0 = universe.OmegaDarkEnergy(redshift=0.0) 

198 

199 for zz in np.arange(start=0.0, stop=4.0, step=2.0): 

200 

201 wControl = w0 + wa*(1.0 - 1.0/(1.0+zz)) 

202 self.assertAlmostEqual(wControl, universe.w(redshift=zz), 6) 

203 

204 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \ 

205 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0, 

206 w0=w0, wa=wa, Ode0=Ode0) 

207 

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) 

214 

215 del universe 

216 

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 """ 

222 

223 H0 = 60.0 

224 

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): 

228 

229 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0) 

230 

231 Og0 = universe.OmegaPhotons(redshift=0.0) 

232 Onu0 = universe.OmegaNeutrinos(redshift=0.0) 

233 

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) 

238 

239 self.assertAlmostEqual(universe.H(redshift=0.0), H0, 10) 

240 

241 Om0 = universe.OmegaMatter(redshift=0.0) 

242 Ode0 = universe.OmegaDarkEnergy(redshift=0.0) 

243 

244 for zz in np.arange(start=0.0, stop=4.0, step=2.0): 

245 

246 self.assertAlmostEqual(w0, universe.w(redshift=zz), 6) 

247 

248 Hcontrol, OmControl, OdeControl, OgControl, OnuControl, \ 

249 OkControl = cosmologicalOmega(zz, H0, Om0, Og0=Og0, Onu0=Onu0, 

250 w0=w0, wa=0.0, Ode0=Ode0) 

251 

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) 

258 

259 del universe 

260 

261 def testComovingDistance(self): 

262 """ 

263 Test comoving distance calculation 

264 

265 Note: this is comoving distance defined as X in the FRW metric 

266 

267 ds^2 = -c^2 dt^2 + a^2 dX^2 + sin^2(X) dOmega^2 

268 

269 where spatial curvature is accounted for in the sin function 

270 """ 

271 

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): 

277 

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() 

282 

283 for zz in np.arange(start=0.1, stop=4.2, step=2.0): 

284 comovingControl = universe.comovingDistance(redshift=zz) 

285 

286 comovingTest = \ 

287 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz, 

288 args=(H0, Om0, Ode0, 

289 Og0, Onu0, w0, wa))[0] 

290 

291 self.assertAlmostEqual(comovingControl/comovingTest, 1.0, 4) 

292 

293 def testLuminosityDistance(self): 

294 """ 

295 Test the calculation of the luminosity distance 

296 """ 

297 

298 H0 = 73.0 

299 

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): 

304 

305 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa) 

306 

307 sqrtkCurvature = \ 

308 np.sqrt(np.abs(universe.OmegaCurvature()))*universe.H()/self.speedOfLight 

309 

310 Og0 = universe.OmegaPhotons() 

311 Onu0 = universe.OmegaNeutrinos() 

312 Ode0 = universe.OmegaDarkEnergy() 

313 

314 for zz in np.arange(start=0.1, stop=4.2, step=2.0): 

315 luminosityControl = universe.luminosityDistance(redshift=zz) 

316 

317 comovingDistance = \ 

318 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz, 

319 args=(H0, Om0, Ode0, Og0, Onu0, w0, wa))[0] 

320 

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) 

332 

333 def testAngularDiameterDistance(self): 

334 """ 

335 Test the calculation of the angular diameter distance 

336 """ 

337 

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): 

344 

345 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa) 

346 

347 sqrtkCurvature = \ 

348 np.sqrt(np.abs(universe.OmegaCurvature()))*universe.H()/self.speedOfLight 

349 

350 Og0 = universe.OmegaPhotons() 

351 Onu0 = universe.OmegaNeutrinos() 

352 Ode0 = universe.OmegaDarkEnergy() 

353 

354 for zz in np.arange(start=0.1, stop=4.2, step=2.0): 

355 angularControl = universe.angularDiameterDistance(redshift=zz) 

356 

357 comovingDistance = \ 

358 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz, 

359 args=(H0, Om0, Ode0, Og0, Onu0, w0, wa))[0] 

360 

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) 

373 

374 def testDistanceModulus(self): 

375 """ 

376 Test the calculation of the distance modulus out to a certain redshift 

377 """ 

378 H0 = 73.0 

379 

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): 

385 

386 universe = CosmologyObject(H0=H0, Om0=Om0, Ok0=Ok0, w0=w0, wa=wa) 

387 

388 sqrtkCurvature = \ 

389 np.sqrt(np.abs(universe.OmegaCurvature()))*universe.H()/self.speedOfLight 

390 

391 Og0 = universe.OmegaPhotons() 

392 Onu0 = universe.OmegaNeutrinos() 

393 Ode0 = universe.OmegaDarkEnergy() 

394 

395 for zz in np.arange(start=0.1, stop=4.2, step=2.0): 

396 modulusControl = universe.distanceModulus(redshift=zz) 

397 

398 comovingDistance = \ 

399 self.speedOfLight*scipy.integrate.quad(comovingDistanceIntegrand, 0.0, zz, 

400 args=(H0, Om0, Ode0, Og0, 

401 Onu0, w0, wa))[0] 

402 

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 

413 

414 modulusTest = 5.0*np.log10(luminosityDistance) + 25.0 

415 self.assertAlmostEqual(modulusControl/modulusTest, 1.0, 4) 

416 

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) 

430 

431 def testGetCurrent(self): 

432 """ 

433 Test to make sure that getCurrent returns the activeCosmology 

434 """ 

435 

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() 

442 

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)) 

454 

455 

456class MemoryTestClass(lsst.utils.tests.MemoryTestCase): 

457 pass 

458 

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()