Exemple #1
0
        def get_mbobs(self, iobj, weight_type='weight'):
            """Get a `MultiBandObsList` for a given object.

            Parameters
            ----------
            iobj : int
                Index of the object.
            weight_type: string, optional
                Weight type. can be one of
                    'weight': the actual weight map
                    'uberseg': uberseg modified weight map
                    'cweight': weight map zeroed outside the object's seg map
                    'cseg': weight map zeroed outside of circular aperture that
                        doesn't touch any other object.
                    'cseg-canonical': same as 'cseg' but uses the postage stamp
                        center instead of the object's position.
                Default is 'weight'

            Returns
            -------
            mbobs : ngmix.MultiBandObsList
                A `MultiBandObsList` holding all of the observations for this
                object.
            """
            mbobs = MultiBandObsList()

            for m in self.mlist:
                obslist = m.get_obslist(iobj, weight_type=weight_type)
                mbobs.append(obslist)

            return mbobs
def create_mb(mb_mod, bg_rms, coord1, coord2, psf_bg_rms, psf_im, noise):
    #creats multiband object
    mb = MultiBandObsList()
    for i in range(len(mb_mod[:])):
        o = observation(mb_mod[i], bg_rms, coord1, coord2, psf_bg_rms, psf_im)
        o.noise = noise[i]
        olist = ObsList()
        olist.append(o)
        mb.append(olist)

    return mb
    def _get_mof_obs(self):
        im, psf_im, coords, dims, dx1, dy1, noises = self.sim()

        bg_rms = self.sim['Image']['Bgrms'] / np.sqrt(len(im))
        bg_rms_psf = self.sim['Psf']['Bgrms_psf']

        psf_ccen = (np.array(psf_im.shape) - 1.0) / 2.0
        psf_jacob = ngmix.UnitJacobian(
            row=psf_ccen[0],
            col=psf_ccen[1],
        )
        psf_weight = psf_im * 0 + 1.0 / bg_rms_psf**2
        psf_obs = ngmix.Observation(
            psf_im,
            weight=psf_weight,
            jacobian=psf_jacob,
        )

        psf_gmix = self._fit_psf_admom(psf_obs)
        psf_obs.set_gmix(psf_gmix)

        mb = MultiBandObsList()
        for i in range(len(im)):
            if self.show:
                import images
                tim = im[i] / im[i].max()
                tim = np.log10(tim - tim.min() + 1.0)

                images.view(tim)
                if 'q' == input('hit a key: (q to quit) '):
                    stop

            weight = im[i] * 0 + 1.0 / bg_rms**2
            jacobian = ngmix.UnitJacobian(
                row=0,
                col=0,
            )

            obs = ngmix.Observation(
                im[i],
                weight=weight,
                jacobian=jacobian,
                psf=psf_obs,
            )
            obs.noise = noises[i]
            olist = ObsList()
            olist.append(obs)
            mb.append(olist)

        return mb, coords
def test_multibandobslist_smoke():
    rng = np.random.RandomState(seed=11)
    meta = {'duh': 5}
    mbobs = MultiBandObsList(meta=meta)

    for _ in range(5):
        obslist = ObsList()
        for _ in range(3):
            obslist.append(Observation(image=rng.normal(size=(13, 15))))
        mbobs.append(obslist)

    assert mbobs.meta == meta
    rng = np.random.RandomState(seed=11)
    for obslist in mbobs:
        for obs in obslist:
            assert np.all(obs.image == rng.normal(size=(13, 15)))
def test_multibandobslist_s2n():
    rng = np.random.RandomState(seed=11)
    mbobs = MultiBandObsList()

    numer = 0
    denom = 0
    for _ in range(5):
        obslist = ObsList()
        for _ in range(3):
            img = rng.normal(size=(13, 15))
            obslist.append(Observation(image=img))

            numer += np.sum(img)
            denom += np.sum(1.0 / obslist[-1].weight)
        mbobs.append(obslist)

    s2n = mbobs.get_s2n()
    assert s2n == numer / np.sqrt(denom)
def test_multibandobslist_s2n_zeroweight():
    rng = np.random.RandomState(seed=11)
    mbobs = MultiBandObsList()

    for _ in range(5):
        obslist = ObsList()
        for _ in range(3):
            img = rng.normal(size=(13, 15))
            obslist.append(
                Observation(
                    image=img,
                    weight=np.zeros((13, 15)),
                    store_pixels=False,
                ))

        mbobs.append(obslist)

    assert np.allclose(mbobs.get_s2n(), -9999)
def test_get_mbobs():
    rng = np.random.RandomState(seed=11)
    obs = Observation(image=rng.normal(size=(11, 13)))

    mbobs = get_mb_obs(obs)
    rng = np.random.RandomState(seed=11)
    assert np.all(mbobs[0][0].image == rng.normal(size=(11, 13)))
    assert len(mbobs) == 1
    assert len(mbobs[0]) == 1

    rng = np.random.RandomState(seed=12)
    obslist = ObsList()
    for _ in range(3):
        obslist.append(Observation(image=rng.normal(size=(11, 13))))
    mbobs = get_mb_obs(obslist)
    rng = np.random.RandomState(seed=12)
    for obs in mbobs[0]:
        assert np.all(obs.image == rng.normal(size=(11, 13)))
    assert len(mbobs) == 1
    assert len(mbobs[0]) == 3

    rng = np.random.RandomState(seed=13)
    mbobs = MultiBandObsList()
    for _ in range(5):
        obslist = ObsList()
        for _ in range(3):
            obslist.append(Observation(image=rng.normal(size=(13, 15))))
        mbobs.append(obslist)

    new_mbobs = get_mb_obs(mbobs)
    rng = np.random.RandomState(seed=13)
    for obslist in new_mbobs:
        for obs in obslist:
            assert np.all(obs.image == rng.normal(size=(13, 15)))

    with pytest.raises(ValueError):
        get_mb_obs(None)
def test_multibandobslist_set():
    rng = np.random.RandomState(seed=11)
    meta = {'duh': 5}
    mbobs = MultiBandObsList(meta=meta)

    for _ in range(5):
        obslist = ObsList()
        for _ in range(3):
            obslist.append(Observation(image=rng.normal(size=(13, 15))))
        mbobs.append(obslist)

    assert mbobs.meta == meta
    new_meta = {'blah': 6}
    mbobs.meta = new_meta
    assert mbobs.meta == new_meta

    new_meta = {'bla': 6}
    new_meta.update(mbobs.meta)
    mbobs.update_meta_data({'bla': 6})
    assert mbobs.meta == new_meta

    rng = np.random.RandomState(seed=12)
    new_obs = Observation(image=rng.normal(size=(13, 15)))
    rng = np.random.RandomState(seed=11)
    for obslist in mbobs:
        for obs in obslist:
            assert np.all(obs.image == rng.normal(size=(13, 15)))
    mbobs[1][2] = new_obs
    assert np.all(mbobs[1][2].image == new_obs.image)

    rng = np.random.RandomState(seed=13)
    obslist = ObsList()
    for _ in range(4):
        obslist.append(Observation(image=rng.normal(size=(13, 15))))
    mbobs[2] = obslist
    rng = np.random.RandomState(seed=13)
    for obs in mbobs[2]:
        assert np.all(obs.image == rng.normal(size=(13, 15)))
def multiband_coadd():
    local_Hmeds = './fiducial_H158_2285117.fits'
    local_Jmeds = './fiducial_J129_2285117.fits'
    local_Fmeds = './fiducial_F184_2285117.fits'
    truth = fio.FITS(
        '/hpc/group/cosmology/phy-lsst/my137/roman_H158/g1002/truth/fiducial_lensing_galaxia_g1002_truth_gal.fits'
    )[-1]
    m_H158 = meds.MEDS(local_Hmeds)
    m_J129 = meds.MEDS(local_Jmeds)
    m_F184 = meds.MEDS(local_Fmeds)
    indices_H = np.arange(len(m_H158['number'][:]))
    indices_J = np.arange(len(m_J129['number'][:]))
    indices_F = np.arange(len(m_F184['number'][:]))
    roman_H158_psfs = get_psf_SCA('H158')
    roman_J129_psfs = get_psf_SCA('J129')
    roman_F184_psfs = get_psf_SCA('F184')
    oversample = 1
    metacal_keys = ['noshear', '1p', '1m', '2p', '2m']
    res_noshear = np.zeros(len(m_H158['number'][:]),
                           dtype=[('ind', int), ('ra', float), ('dec', float),
                                  ('flags', int), ('coadd_px', float),
                                  ('coadd_py', float), ('coadd_flux', float),
                                  ('coadd_snr', float), ('coadd_e1', float),
                                  ('coadd_e2', float), ('coadd_hlr', float),
                                  ('coadd_psf_e1', float),
                                  ('coadd_psf_e2', float),
                                  ('coadd_psf_T', float)])
    res_1p = np.zeros(len(m_H158['number'][:]),
                      dtype=[('ind', int), ('ra', float), ('dec', float),
                             ('flags', int), ('coadd_px', float),
                             ('coadd_py', float), ('coadd_flux', float),
                             ('coadd_snr', float), ('coadd_e1', float),
                             ('coadd_e2', float), ('coadd_hlr', float),
                             ('coadd_psf_e1', float), ('coadd_psf_e2', float),
                             ('coadd_psf_T', float)])
    res_1m = np.zeros(len(m_H158['number'][:]),
                      dtype=[('ind', int), ('ra', float), ('dec', float),
                             ('flags', int), ('coadd_px', float),
                             ('coadd_py', float), ('coadd_flux', float),
                             ('coadd_snr', float), ('coadd_e1', float),
                             ('coadd_e2', float), ('coadd_hlr', float),
                             ('coadd_psf_e1', float), ('coadd_psf_e2', float),
                             ('coadd_psf_T', float)])
    res_2p = np.zeros(len(m_H158['number'][:]),
                      dtype=[('ind', int), ('ra', float), ('dec', float),
                             ('flags', int), ('coadd_px', float),
                             ('coadd_py', float), ('coadd_flux', float),
                             ('coadd_snr', float), ('coadd_e1', float),
                             ('coadd_e2', float), ('coadd_hlr', float),
                             ('coadd_psf_e1', float), ('coadd_psf_e2', float),
                             ('coadd_psf_T', float)])
    res_2m = np.zeros(len(m_H158['number'][:]),
                      dtype=[('ind', int), ('ra', float), ('dec', float),
                             ('flags', int), ('coadd_px', float),
                             ('coadd_py', float), ('coadd_flux', float),
                             ('coadd_snr', float), ('coadd_e1', float),
                             ('coadd_e2', float), ('coadd_hlr', float),
                             ('coadd_psf_e1', float), ('coadd_psf_e2', float),
                             ('coadd_psf_T', float)])

    res_tot = [res_noshear, res_1p, res_1m, res_2p, res_2m]
    for i, ii in enumerate(
            indices_H):  # looping through all the objects in meds file.
        if i % 100 == 0:
            print('object number ', i)
        ind = m_H158['number'][ii]
        t = truth[ind]
        sca_Hlist = m_H158[ii][
            'sca']  # List of SCAs for the same object in multiple observations.
        sca_Jlist = m_J129[ii]['sca']
        sca_Flist = m_F184[ii]['sca']
        m2_H158_coadd = [
            roman_H158_psfs[j - 1] for j in sca_Hlist[:m_H158['ncutout'][i]]
        ]
        m2_J129_coadd = [
            roman_J129_psfs[j - 1] for j in sca_Jlist[:m_J129['ncutout'][i]]
        ]
        m2_F184_coadd = [
            roman_F184_psfs[j - 1] for j in sca_Flist[:m_F184['ncutout'][i]]
        ]

        obs_Hlist, psf_Hlist, included_H, w_H = get_exp_list_coadd(
            m_H158, ii, m2=m2_H158_coadd)
        coadd_H = psc.Coadder(obs_Hlist, flat_wcs=True).coadd_obs
        coadd_H.psf.image[
            coadd_H.psf.image < 0] = 0  # set negative pixels to zero.
        coadd_H.set_meta({'offset_pixels': None, 'file_id': None})

        obs_Jlist, psf_Jlist, included_J, w_J = get_exp_list_coadd(
            m_J129, ii, m2=m2_J129_coadd)
        coadd_J = psc.Coadder(obs_Jlist, flat_wcs=True).coadd_obs
        coadd_J.psf.image[
            coadd_J.psf.image < 0] = 0  # set negative pixels to zero.
        coadd_J.set_meta({'offset_pixels': None, 'file_id': None})

        obs_Flist, psf_Flist, included_F, w_F = get_exp_list_coadd(
            m_F184, ii, m2=m2_F184_coadd)
        coadd_F = psc.Coadder(obs_Flist, flat_wcs=True).coadd_obs
        coadd_F.psf.image[
            coadd_F.psf.image < 0] = 0  # set negative pixels to zero.
        coadd_F.set_meta({'offset_pixels': None, 'file_id': None})

        coadd = [coadd_H, coadd_J, coadd_F]
        mb_obs_list = MultiBandObsList()

        #coadd = [coadd_H]
        for band in range(3):
            obs_list = ObsList()
            new_coadd_psf_block = block_reduce(coadd[band].psf.image,
                                               block_size=(4, 4),
                                               func=np.sum)
            new_coadd_psf_jacob = Jacobian(
                row=15.5,
                col=15.5,
                dvdrow=(coadd[band].psf.jacobian.dvdrow * oversample),
                dvdcol=(coadd[band].psf.jacobian.dvdcol * oversample),
                dudrow=(coadd[band].psf.jacobian.dudrow * oversample),
                dudcol=(coadd[band].psf.jacobian.dudcol * oversample))
            coadd_psf_obs = Observation(new_coadd_psf_block,
                                        jacobian=new_coadd_psf_jacob,
                                        meta={
                                            'offset_pixels': None,
                                            'file_id': None
                                        })
            coadd[band].psf = coadd_psf_obs
            obs_list.append(coadd[band])
            mb_obs_list.append(obs_list)

        iteration = 0
        for key in metacal_keys:
            res_tot[iteration]['ind'][i] = ind
            res_tot[iteration]['ra'][i] = t['ra']
            res_tot[iteration]['dec'][i] = t['dec']
            iteration += 1

        #print(i, t['size'], mb_obs_list[0][0].image.sum(), mb_obs_list[1][0].image.sum(), mb_obs_list[2][0].image.sum())
        res_ = measure_shape_metacal_multiband(
            mb_obs_list,
            t['size'],
            method='bootstrap',
            fracdev=t['bflux'],
            use_e=[t['int_e1'], t['int_e2']])
        iteration = 0
        for key in metacal_keys:
            if res_ == 0:
                res_tot[iteration]['ind'][i] = 0
            elif res_[key]['flags'] == 0:
                res_tot[iteration]['coadd_px'][i] = res_[key]['pars'][0]
                res_tot[iteration]['coadd_py'][i] = res_[key]['pars'][1]
                res_tot[iteration]['coadd_snr'][i] = res_[key]['s2n']
                res_tot[iteration]['coadd_e1'][i] = res_[key]['pars'][2]
                res_tot[iteration]['coadd_e2'][i] = res_[key]['pars'][3]
                res_tot[iteration]['coadd_hlr'][i] = res_[key]['pars'][4]
            iteration += 1

    mask = res_tot[0]['ind'] != 0
    print(len(res_tot[0]), len(res_tot[0][mask]))
    #print(res_['noshear'].dtype.names)
    print('done')
Exemple #10
0
def test_multibandobslist_append_err():
    mbobs = MultiBandObsList()
    with pytest.raises(AssertionError):
        mbobs.append(None)