Coverage for metadetect / lsst / tests / test_lsst_photometry.py: 28%
55 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-13 01:40 -0800
« prev ^ index » next coverage.py v7.13.2, created at 2026-02-13 01:40 -0800
1"""
2test using lsst simple sim
3"""
5import sys
6import numpy as np
7import pytest
9import logging
10from metadetect.lsst import photometry as lsst_phot
11from metadetect.lsst import util
12from lsst.utils import getPackageDir
14try:
15 getPackageDir('descwl_shear_sims')
16 getPackageDir('descwl_coadd')
17 skip_tests_on_simulations = False
18except LookupError:
19 skip_tests_on_simulations = True
21logging.basicConfig(
22 stream=sys.stdout,
23 level=logging.INFO,
24)
27def make_lsst_sim(seed, mag=20, hlr=0.5, bands=None):
28 import descwl_shear_sims
30 rng = np.random.RandomState(seed=seed)
31 coadd_dim = 251
33 if bands is None:
34 bands = ['i']
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 )
45 psf = descwl_shear_sims.psfs.make_fixed_psf(psf_type='gauss')
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
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
63 bands = list(sim_data['band_data'].keys())
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 ]
88 return util.extract_multiband_coadd_data(coadd_data_list)
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)
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)
105 config = {}
107 if subtract_sky is not None:
108 config['subtract_sky'] = subtract_sky
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 )
118 # 5x5 on the grid
119 assert res.size == 25
121 for front in ['gauss', 'pgauss']:
122 if front == 'gauss':
123 gname = f'{front}_g'
124 assert gname in res.dtype.names
126 flux_name = f'{front}_band_flux'
128 assert np.any(res[f"{front}_flags"] == 0)
129 assert np.all(res["mfrac"] == 0)
131 assert len(res[flux_name].shape) == 2
132 assert res[flux_name].shape[1] == len(bands)
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 )