|
18 | 18 |
|
19 | 19 | import logging |
20 | 20 | import numpy as np |
| 21 | +import astropy.units as u |
21 | 22 | import os |
22 | 23 | import sys |
23 | 24 |
|
@@ -222,6 +223,7 @@ def test_airy(): |
222 | 223 | 'gsparams' : { 'xvalue_accuracy' : 1.e-2 } |
223 | 224 | }, |
224 | 225 | 'gal6' : { 'type' : 'Airy' , 'lam' : 400., 'diam' : 4.0, 'scale_unit' : 'arcmin' }, |
| 226 | + 'gal7' : { 'type' : 'Airy' , 'lam' : 400*u.nm, 'diam' : '4000 mm', 'scale_unit' : 'arcmin' }, |
225 | 227 | 'bad1' : { 'type' : 'Airy' , 'lam_over_diam' : 0.4, 'lam' : 400, 'diam' : 10 }, |
226 | 228 | 'bad2' : { 'type' : 'Airy' , 'flux' : 1.3 }, |
227 | 229 | 'bad3' : { 'type' : 'Airy' , 'lam_over_diam' : 0.4, 'obsc' : 0.3, 'flux' : 100 }, |
@@ -259,6 +261,8 @@ def test_airy(): |
259 | 261 | gal6a = galsim.config.BuildGSObject(config, 'gal6')[0] |
260 | 262 | gal6b = galsim.Airy(lam=400., diam=4., scale_unit=galsim.arcmin) |
261 | 263 | gsobject_compare(gal6a, gal6b) |
| 264 | + gal7a = galsim.config.BuildGSObject(config, 'gal7')[0] |
| 265 | + gsobject_compare(gal6a, gal7a) |
262 | 266 |
|
263 | 267 | # Make sure they don't match when using the default GSParams |
264 | 268 | gal5c = galsim.Airy(lam_over_diam=45) |
@@ -298,6 +302,8 @@ def test_kolmogorov(): |
298 | 302 | 'gal5' : { 'type' : 'Kolmogorov' , 'lam_over_r0' : 1, 'flux' : 50, |
299 | 303 | 'gsparams' : { 'integration_relerr' : 1.e-2, 'integration_abserr' : 1.e-4 } |
300 | 304 | }, |
| 305 | + 'gal6' : { 'type' : 'Kolmogorov' , 'lam' : '400 nm', 'r0_500' : '15 cm' }, |
| 306 | + 'gal7' : { 'type' : 'Kolmogorov' , 'lam' : '$4000*u.Angstrom', 'r0' : 0.18 }, |
301 | 307 | 'bad1' : { 'type' : 'Kolmogorov' , 'fwhm' : 2, 'lam_over_r0' : 3, 'flux' : 100 }, |
302 | 308 | 'bad2' : { 'type' : 'Kolmogorov', 'flux' : 100 }, |
303 | 309 | 'bad3' : { 'type' : 'Kolmogorov' , 'lam_over_r0' : 2, 'lam' : 400, 'r0' : 0.15 }, |
@@ -334,13 +340,103 @@ def test_kolmogorov(): |
334 | 340 | with assert_raises(AssertionError): |
335 | 341 | gsobject_compare(gal5a, gal5c) |
336 | 342 |
|
| 343 | + gal6a = galsim.config.BuildGSObject(config, 'gal6')[0] |
| 344 | + gal6b = galsim.Kolmogorov(lam=400*u.nm, r0_500=15*u.cm) |
| 345 | + gsobject_compare(gal6a, gal6b) |
| 346 | + |
| 347 | + gal7a = galsim.config.BuildGSObject(config, 'gal7')[0] |
| 348 | + gal7b = galsim.Kolmogorov(lam=4000*u.Angstrom, r0=0.18) |
| 349 | + gsobject_compare(gal7a, gal7b) |
| 350 | + |
337 | 351 | with assert_raises(galsim.GalSimConfigError): |
338 | 352 | galsim.config.BuildGSObject(config, 'bad1') |
339 | 353 | with assert_raises(galsim.GalSimConfigError): |
340 | 354 | galsim.config.BuildGSObject(config, 'bad2') |
341 | 355 | with assert_raises(galsim.GalSimConfigError): |
342 | 356 | galsim.config.BuildGSObject(config, 'bad3') |
343 | 357 |
|
| 358 | + |
| 359 | +@timer |
| 360 | +def test_VonKarman(): |
| 361 | + """Test various ways to build a VonKarman |
| 362 | + """ |
| 363 | + config = { |
| 364 | + 'gal1' : { 'type' : 'VonKarman' , 'lam' : 500, 'r0' : 0.2 }, |
| 365 | + 'gal2' : { 'type' : 'VonKarman' , 'lam' : 760, 'r0_500' : 0.2 }, |
| 366 | + 'gal3' : { 'type' : 'VonKarman' , 'lam' : 450*u.nm, 'r0_500' : '20 cm', 'flux' : 1.e6, |
| 367 | + 'ellip' : { 'type' : 'QBeta' , 'q' : 0.6, 'beta' : 0.39 * galsim.radians } |
| 368 | + }, |
| 369 | + 'gal4' : { 'type' : 'VonKarman' , 'lam' : 500, 'r0' : 0.2, |
| 370 | + 'dilate' : 3, 'ellip' : galsim.Shear(e1=0.3), |
| 371 | + 'rotate' : 12 * galsim.degrees, |
| 372 | + 'lens' : { |
| 373 | + 'shear' : galsim.Shear(g1=0.03, g2=-0.05), |
| 374 | + 'mu' : 1.03, |
| 375 | + }, |
| 376 | + 'shift' : { 'type' : 'XY', 'x' : 0.7, 'y' : -1.2 }, |
| 377 | + }, |
| 378 | + 'gal5' : { 'type' : 'VonKarman' , 'lam' : 500, 'r0' : 0.2, 'do_delta' : True, |
| 379 | + 'gsparams' : { 'integration_relerr' : 1.e-2, 'integration_abserr' : 1.e-4 } |
| 380 | + }, |
| 381 | + 'bad1' : { 'type' : 'VonKarman' , 'fwhm' : 2, 'lam_over_r0' : 3, 'flux' : 100 }, |
| 382 | + 'bad2' : { 'type' : 'VonKarman', 'flux' : 100 }, |
| 383 | + 'bad3' : { 'type' : 'VonKarman' , 'lam' : 400, 'r0' : 0.15, 'r0_500' : 0.12 }, |
| 384 | + } |
| 385 | + |
| 386 | + gal1a = galsim.config.BuildGSObject(config, 'gal1')[0] |
| 387 | + gal1b = galsim.VonKarman(lam = 500, r0 = 0.2) |
| 388 | + gsobject_compare(gal1a, gal1b) |
| 389 | + |
| 390 | + gal2a = galsim.config.BuildGSObject(config, 'gal2')[0] |
| 391 | + gal2b = galsim.VonKarman(lam = 760, r0_500 = 0.2) |
| 392 | + gsobject_compare(gal2a, gal2b) |
| 393 | + |
| 394 | + gal3a = galsim.config.BuildGSObject(config, 'gal3')[0] |
| 395 | + gal3b = galsim.VonKarman(lam = 450*u.nm, r0_500 = 20*u.cm, flux = 1.e6) |
| 396 | + gal3b = gal3b.shear(q = 0.6, beta = 0.39 * galsim.radians) |
| 397 | + gsobject_compare(gal3a, gal3b) |
| 398 | + |
| 399 | + |
| 400 | + gal4a = galsim.config.BuildGSObject(config, 'gal4')[0] |
| 401 | + gal4b = galsim.VonKarman(lam = 500, r0 = 0.2) |
| 402 | + gal4b = gal4b.dilate(3).shear(e1 = 0.3).rotate(12 * galsim.degrees) |
| 403 | + gal4b = gal4b.lens(0.03, -0.05, 1.03).shift(dx = 0.7, dy = -1.2) |
| 404 | + gsobject_compare(gal4a, gal4b) |
| 405 | + |
| 406 | + gal5a = galsim.config.BuildGSObject(config, 'gal5')[0] |
| 407 | + gsparams = galsim.GSParams(integration_relerr=1.e-2, integration_abserr=1.e-4) |
| 408 | + gal5b = galsim.VonKarman(lam=500, r0=0.2, do_delta=True, gsparams=gsparams) |
| 409 | + gsobject_compare(gal5a, gal5b) |
| 410 | + |
| 411 | + with assert_raises(galsim.GalSimConfigError): |
| 412 | + galsim.config.BuildGSObject(config, 'bad1') |
| 413 | + with assert_raises(galsim.GalSimConfigError): |
| 414 | + galsim.config.BuildGSObject(config, 'bad2') |
| 415 | + with assert_raises(galsim.GalSimConfigError): |
| 416 | + galsim.config.BuildGSObject(config, 'bad3') |
| 417 | + |
| 418 | + |
| 419 | +@timer |
| 420 | +def test_secondKick(): |
| 421 | + config = { |
| 422 | + 'gal1' : { 'type' : 'SecondKick' , 'lam' : 500, 'r0' : 0.2, 'diam': 4.0 }, |
| 423 | + 'gal2' : { 'type' : 'SecondKick' , 'lam' : '0.5 micron', 'r0' : '10 cm', 'diam': 8.2*u.m, 'flux' : 100 }, |
| 424 | + 'gal3' : { 'type' : 'SecondKick' , 'lam' : '$2*450*u.nm', 'r0' : 0.2, 'diam': 4.0, 'obscuration' : 0.2, 'kcrit' : 0.1 }, |
| 425 | + } |
| 426 | + |
| 427 | + gal1a = galsim.config.BuildGSObject(config, 'gal1')[0] |
| 428 | + gal1b = galsim.SecondKick(lam = 500, r0 = 0.2, diam=4.0) |
| 429 | + gsobject_compare(gal1a, gal1b) |
| 430 | + |
| 431 | + gal2a = galsim.config.BuildGSObject(config, 'gal2')[0] |
| 432 | + gal2b = galsim.SecondKick(lam = 0.5*u.micron, r0 = 10*u.cm, diam=8.2*u.m, flux = 100) |
| 433 | + gsobject_compare(gal2a, gal2b) |
| 434 | + |
| 435 | + gal3a = galsim.config.BuildGSObject(config, 'gal3')[0] |
| 436 | + gal3b = galsim.SecondKick(lam = 2*450, r0 = 0.2, diam=4.0, obscuration=0.2, kcrit=0.1) |
| 437 | + gsobject_compare(gal3a, gal3b) |
| 438 | + |
| 439 | + |
344 | 440 | @timer |
345 | 441 | def test_opticalpsf(): |
346 | 442 | """Test various ways to build a OpticalPSF |
@@ -371,10 +467,10 @@ def test_opticalpsf(): |
371 | 467 | 'pupil_plane_im' : |
372 | 468 | os.path.join(".","Optics_comparison_images","sample_pupil_rolled.fits"), |
373 | 469 | 'pupil_angle' : 27.*galsim.degrees }, |
374 | | - 'gal6' : {'type' : 'OpticalPSF' , 'lam' : 874.0, 'diam' : 7.4, 'flux' : 70., |
| 470 | + 'gal6' : {'type' : 'OpticalPSF' , 'lam' : '874 nm', 'diam' : '7.4 m', 'flux' : 70., |
375 | 471 | 'aberrations' : [0.06, 0.12, -0.08, 0.07, 0.04, 0.0, 0.0, -0.13], |
376 | 472 | 'obscuration' : 0.1 }, |
377 | | - 'gal7' : {'type' : 'OpticalPSF' , 'lam' : 874.0, 'diam' : 7.4, 'aberrations' : []}, |
| 473 | + 'gal7' : {'type' : 'OpticalPSF' , 'lam' : 0.874*u.micron, 'diam' : '$740*u.cm', 'aberrations' : []}, |
378 | 474 | 'bad1' : {'type' : 'OpticalPSF' , 'lam' : 874.0, 'diam' : 7.4, 'lam_over_diam' : 0.2}, |
379 | 475 | 'bad2' : {'type' : 'OpticalPSF' , 'lam_over_diam' : 0.2, |
380 | 476 | 'aberrations' : "0.06, 0.12, -0.08, 0.07, 0.04, 0.0, 0.0, -0.13"}, |
|
0 commit comments