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')
def test_multibandobslist_append_err(): mbobs = MultiBandObsList() with pytest.raises(AssertionError): mbobs.append(None)