Coverage for metadetect / lsst / tests / test_lsst_exp2obs.py: 29%

46 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2025-12-19 01:38 -0800

1import numpy as np 

2from metadetect.lsst import util 

3import lsst.afw.image as afw_image 

4import lsst.geom as geom 

5import pytest 

6from lsst.utils import getPackageDir 

7 

8try: 

9 getPackageDir('descwl_shear_sims') 

10 skip_tests_on_simulations = False 

11except LookupError: 

12 skip_tests_on_simulations = True 

13 

14 

15def make_lsst_sim(rng, dim, mag=22, hlr=0.5, bands=['i']): 

16 import descwl_shear_sims 

17 

18 coadd_dim = dim 

19 se_dim = dim 

20 

21 galaxy_catalog = descwl_shear_sims.galaxies.FixedGalaxyCatalog( 

22 rng=rng, 

23 coadd_dim=coadd_dim, 

24 buff=0, 

25 layout='grid', 

26 mag=mag, 

27 hlr=hlr, 

28 ) 

29 

30 psf = descwl_shear_sims.psfs.make_fixed_psf(psf_type='gauss') 

31 

32 sim_data = descwl_shear_sims.make_sim( 

33 rng=rng, 

34 galaxy_catalog=galaxy_catalog, 

35 coadd_dim=coadd_dim, 

36 se_dim=se_dim, 

37 g1=0.00, 

38 g2=0.00, 

39 psf=psf, 

40 bands=bands, 

41 ) 

42 return sim_data 

43 

44 

45@pytest.mark.skipif( 

46 skip_tests_on_simulations, 

47 reason='descwl_shear_sims not available' 

48) 

49@pytest.mark.parametrize('copy_mask_to', ['ormask', 'bmask']) 

50def test_conversion(copy_mask_to): 

51 seed = 9911 

52 dim = 200 

53 rng = np.random.RandomState(seed=seed) 

54 

55 sim_data = make_lsst_sim(rng, dim) 

56 exp = sim_data['band_data']['i'][0] 

57 

58 cen_integer, _ = util.get_integer_center( 

59 wcs=exp.getWcs(), 

60 bbox=exp.getBBox(), 

61 ) 

62 cen = geom.Point2D(cen_integer) 

63 psf_obj = exp.getPsf() 

64 psf_image = psf_obj.computeKernelImage(cen).array 

65 

66 exp.mask.array[20:30, 20:30] = 1 

67 

68 obs = util.exp2obs( 

69 exp=exp, 

70 copy_mask_to=copy_mask_to, 

71 ) 

72 exp2 = util.obs2exp( 

73 obs=obs, 

74 exp=afw_image.ExposureF(exp, deep=True), 

75 copy_mask_from=copy_mask_to, 

76 ) 

77 

78 # check images 

79 assert np.all(obs.image == exp.image.array) 

80 assert np.all(exp2.image.array == exp.image.array) 

81 

82 # check weight and variance 

83 assert np.all(obs.weight == 1/exp.variance.array) 

84 assert np.all(exp2.variance.array == exp.variance.array) 

85 

86 # check mask 

87 if copy_mask_to == 'ormask': 

88 assert np.all(obs.ormask == exp.mask.array) 

89 else: 

90 assert np.all(obs.bmask == exp.mask.array) 

91 

92 assert np.all(exp2.mask.array == exp.mask.array) 

93 

94 # check psf 

95 assert np.all(obs.psf.image == psf_image) 

96 

97 psf_obj2 = exp2.getPsf() 

98 psf_image2 = psf_obj2.computeKernelImage(cen).array 

99 assert np.all(psf_image == psf_image2)