Coverage for metadetect / lsst / tests / test_lsst_photometry.py: 28%

55 statements  

« prev     ^ index     » next       coverage.py v7.13.2, created at 2026-02-04 03:19 -0800

1""" 

2test using lsst simple sim 

3""" 

4 

5import sys 

6import numpy as np 

7import pytest 

8 

9import logging 

10from metadetect.lsst import photometry as lsst_phot 

11from metadetect.lsst import util 

12from lsst.utils import getPackageDir 

13 

14try: 

15 getPackageDir('descwl_shear_sims') 

16 getPackageDir('descwl_coadd') 

17 skip_tests_on_simulations = False 

18except LookupError: 

19 skip_tests_on_simulations = True 

20 

21logging.basicConfig( 

22 stream=sys.stdout, 

23 level=logging.INFO, 

24) 

25 

26 

27def make_lsst_sim(seed, mag=20, hlr=0.5, bands=None): 

28 import descwl_shear_sims 

29 

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

31 coadd_dim = 251 

32 

33 if bands is None: 

34 bands = ['i'] 

35 

36 galaxy_catalog = descwl_shear_sims.galaxies.FixedGalaxyCatalog( 

37 rng=rng, 

38 coadd_dim=coadd_dim, 

39 buff=20, 

40 layout='grid', 

41 mag=mag, 

42 hlr=hlr, 

43 ) 

44 

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

46 

47 sim_data = descwl_shear_sims.make_sim( 

48 rng=rng, 

49 galaxy_catalog=galaxy_catalog, 

50 coadd_dim=coadd_dim, 

51 g1=0.02, 

52 g2=0.00, 

53 psf=psf, 

54 bands=bands, 

55 ) 

56 return sim_data 

57 

58 

59def do_coadding(rng, sim_data, nowarp): 

60 from descwl_coadd.coadd import make_coadd 

61 from descwl_coadd.coadd_nowarp import make_coadd_nowarp 

62 

63 bands = list(sim_data['band_data'].keys()) 

64 

65 if nowarp: 

66 coadd_data_list = [ 

67 make_coadd_nowarp( 

68 exp=sim_data['band_data'][band][0], 

69 psf_dims=sim_data['psf_dims'], 

70 rng=rng, 

71 remove_poisson=False, 

72 ) 

73 for band in bands 

74 ] 

75 else: 

76 coadd_data_list = [ 

77 make_coadd( 

78 exps=sim_data['band_data'][band], 

79 psf_dims=sim_data['psf_dims'], 

80 rng=rng, 

81 coadd_wcs=sim_data['coadd_wcs'], 

82 coadd_bbox=sim_data['coadd_bbox'], 

83 remove_poisson=False, 

84 ) 

85 for band in bands 

86 ] 

87 

88 return util.extract_multiband_coadd_data(coadd_data_list) 

89 

90 

91@pytest.mark.skipif( 

92 skip_tests_on_simulations, 

93 reason='descwl_shear_sims and/or descwl_coadd not available' 

94) 

95@pytest.mark.parametrize('subtract_sky', [None, False, True]) 

96@pytest.mark.parametrize('nowarp', [False, True]) 

97def test_lsst_photometry_smoke(subtract_sky, nowarp): 

98 print('-' * 70) 

99 rng = np.random.RandomState(seed=116) 

100 

101 bands = ['r', 'i'] 

102 sim_data = make_lsst_sim(116, bands=bands) 

103 data = do_coadding(rng=rng, sim_data=sim_data, nowarp=nowarp) 

104 

105 config = {} 

106 

107 if subtract_sky is not None: 

108 config['subtract_sky'] = subtract_sky 

109 

110 res = lsst_phot.run_photometry( 

111 mbexp=data['mbexp'], 

112 mfrac_mbexp=data['mfrac_mbexp'], 

113 ormasks=data['ormasks'], 

114 rng=rng, 

115 config=config, 

116 ) 

117 

118 # 5x5 on the grid 

119 assert res.size == 25 

120 

121 for front in ['gauss', 'pgauss']: 

122 if front == 'gauss': 

123 gname = f'{front}_g' 

124 assert gname in res.dtype.names 

125 

126 flux_name = f'{front}_band_flux' 

127 

128 assert np.any(res[f"{front}_flags"] == 0) 

129 assert np.all(res["mfrac"] == 0) 

130 

131 assert len(res[flux_name].shape) == 2 

132 assert res[flux_name].shape[1] == len(bands) 

133 

134 

135if __name__ == '__main__': 

136 for mt in ['pgauss', 'ksigma']: 

137 for nowarp in [True, False]: 

138 test_lsst_photometry_smoke( 

139 meas_type=mt, subtract_sky=False, nowarp=nowarp 

140 )