Coverage for metadetect / lsst / tests / test_lsst_exp2obs.py: 29%
46 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-02 07:21 -0800
« prev ^ index » next coverage.py v7.13.4, created at 2026-03-02 07:21 -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
8try:
9 getPackageDir('descwl_shear_sims')
10 skip_tests_on_simulations = False
11except LookupError:
12 skip_tests_on_simulations = True
15def make_lsst_sim(rng, dim, mag=22, hlr=0.5, bands=['i']):
16 import descwl_shear_sims
18 coadd_dim = dim
19 se_dim = dim
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 )
30 psf = descwl_shear_sims.psfs.make_fixed_psf(psf_type='gauss')
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
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)
55 sim_data = make_lsst_sim(rng, dim)
56 exp = sim_data['band_data']['i'][0]
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
66 exp.mask.array[20:30, 20:30] = 1
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 )
78 # check images
79 assert np.all(obs.image == exp.image.array)
80 assert np.all(exp2.image.array == exp.image.array)
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)
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)
92 assert np.all(exp2.mask.array == exp.mask.array)
94 # check psf
95 assert np.all(obs.psf.image == psf_image)
97 psf_obj2 = exp2.getPsf()
98 psf_image2 = psf_obj2.computeKernelImage(cen).array
99 assert np.all(psf_image == psf_image2)