예제 #1
0
    def get_exp_list(self, psf2=None):

        if psf2 is None:
            psf2 = self.psfs

        obs_list = ObsList()
        psf_list = ObsList()

        w = []
        for i in range(len(self.gals)):
            im = self.gals[i].array
            im_psf = self.psfs[i].array
            im_psf2 = psf2[i].array
            weight = 1 / self.skys[i].array

            jacob = self.gals[i].wcs.jacobian()
            dx = self.offsets[i].x
            dy = self.offsets[i].y

            gal_jacob = Jacobian(row=self.gals[i].true_center.y + dy,
                                 col=self.gals[i].true_center.x + dx,
                                 dvdrow=jacob.dvdy,
                                 dvdcol=jacob.dvdx,
                                 dudrow=jacob.dudy,
                                 dudcol=jacob.dudx)
            psf_jacob2 = gal_jacob

            mask = np.where(weight != 0)
            w.append(np.mean(weight[mask]))
            noise = old_div(np.ones_like(weight), w[-1])

            psf_obs = Observation(im_psf,
                                  jacobian=gal_jacob,
                                  meta={
                                      'offset_pixels': None,
                                      'file_id': None
                                  })
            psf_obs2 = Observation(im_psf2,
                                   jacobian=psf_jacob2,
                                   meta={
                                       'offset_pixels': None,
                                       'file_id': None
                                   })
            obs = Observation(im,
                              weight=weight,
                              jacobian=gal_jacob,
                              psf=psf_obs,
                              meta={
                                  'offset_pixels': None,
                                  'file_id': None
                              })
            obs.set_noise(noise)

            obs_list.append(obs)
            psf_list.append(psf_obs2)

        return obs_list, psf_list, np.array(w)
예제 #2
0
def get_exp_list(gals_array, psfs_array, offsets, skys_array, gal_true, gal_jacobs, psf2=None):
    #def get_exp_list(gal, psf, sky_stamp, psf2=None):

    if psf2 is None:
        psf2 = psfs_array

    obs_list=ObsList()
    psf_list=ObsList()

    w = []
    for i in range(len(gals_array)):
        im = gals_array[i]
        im_psf = psfs_array[i]
        im_psf2 = psf2[i]
        weight = 1/skys_array[i]

        jacob = gal_jacobs[i]
        dx = offsets[i].x
        dy = offsets[i].y
        
        gal_jacob = Jacobian(
            row=gal_true[i].y+dy,
            col=gal_true[i].x+dx,
            dvdrow=jacob.dvdy,
            dvdcol=jacob.dvdx,
            dudrow=jacob.dudy,
            dudcol=jacob.dudx)
        psf_jacob2 = gal_jacob
        print(gal_jacob)

        mask = np.where(weight!=0)
        w.append(np.mean(weight[mask]))
        noise = old_div(np.ones_like(weight),w[-1])
        psf_obs = Observation(im_psf, jacobian=gal_jacob, meta={'offset_pixels':None,'file_id':None})
        psf_obs2 = Observation(im_psf2, jacobian=psf_jacob2, meta={'offset_pixels':None,'file_id':None})
        obs = Observation(im, weight=weight, jacobian=gal_jacob, psf=psf_obs, meta={'offset_pixels':None,'file_id':None})
        obs.set_noise(noise)

        obs_list.append(obs)
        psf_list.append(psf_obs2)

    return obs_list,psf_list,np.array(w)
def get_exp_list_coadd(m, i, m2=None):
    def make_jacobian(dudx, dudy, dvdx, dvdy, x, y):
        j = galsim.JacobianWCS(dudx, dudy, dvdx, dvdy)
        return j.withOrigin(galsim.PositionD(x, y))

    oversample = 1
    #def psf_offset(i,j,star_):
    m3 = [0]
    #relative_offset=[0]
    for jj, psf_ in enumerate(m2):  # m2 has psfs for each observation.
        if jj == 0:
            continue
        gal_stamp_center_row = m['orig_start_row'][i][jj] + m['box_size'][
            i] / 2 - 0.5  # m['box_size'] is the galaxy stamp size.
        gal_stamp_center_col = m['orig_start_col'][i][jj] + m['box_size'][
            i] / 2 - 0.5  # m['orig_start_row/col'] is in SCA coordinates.
        psf_stamp_size = 32

        # Make the bounds for the psf stamp.
        b = galsim.BoundsI(
            xmin=(m['orig_start_col'][i][jj] +
                  (m['box_size'][i] - 32) / 2. - 1) * oversample + 1,
            xmax=(m['orig_start_col'][i][jj] +
                  (m['box_size'][i] - 32) / 2. + psf_stamp_size - 1) *
            oversample,
            ymin=(m['orig_start_row'][i][jj] +
                  (m['box_size'][i] - 32) / 2. - 1) * oversample + 1,
            ymax=(m['orig_start_row'][i][jj] +
                  (m['box_size'][i] - 32) / 2. + psf_stamp_size - 1) *
            oversample)

        # Make wcs for oversampled psf.
        wcs_ = make_jacobian(
            m.get_jacobian(i, jj)['dudcol'] / oversample,
            m.get_jacobian(i, jj)['dudrow'] / oversample,
            m.get_jacobian(i, jj)['dvdcol'] / oversample,
            m.get_jacobian(i, jj)['dvdrow'] / oversample,
            m['orig_col'][i][jj] * oversample,
            m['orig_row'][i][jj] * oversample)
        # Taken from galsim/roman_psfs.py line 266. Update each psf to an object-specific psf using the wcs.
        scale = galsim.PixelScale(wfirst.pixel_scale / oversample)
        psf_ = wcs_.toWorld(scale.toImage(psf_),
                            image_pos=galsim.PositionD(wfirst.n_pix / 2,
                                                       wfirst.n_pix / 2))

        # Convolve with the star model and get the psf stamp.
        #st_model = galsim.DeltaFunction(flux=1.)
        #st_model = st_model.evaluateAtWavelength(wfirst.getBandpasses(AB_zeropoint=True)['H158'].effective_wavelength)
        #st_model = st_model.withFlux(1.)
        #st_model = galsim.Convolve(st_model, psf_)
        psf_ = galsim.Convolve(psf_, galsim.Pixel(wfirst.pixel_scale))
        psf_stamp = galsim.Image(b, wcs=wcs_)

        # Galaxy is being drawn with some subpixel offsets, so we apply the offsets when drawing the psf too.
        offset_x = m['orig_col'][i][jj] - gal_stamp_center_col
        offset_y = m['orig_row'][i][jj] - gal_stamp_center_row
        offset = galsim.PositionD(offset_x, offset_y)
        if (offset_x <= -1.0 or offset_y <= -1.0):
            print(offset)
        elif (offset_x >= 1.0 or offset_y >= 1.0):
            print(offset)
        psf_.drawImage(image=psf_stamp, offset=offset, method='no_pixel')
        m3.append(psf_stamp.array)

    obs_list = ObsList()
    psf_list = ObsList()

    included = []
    w = []
    # For each of these objects create an observation
    for j in range(m['ncutout'][i]):
        if j == 0:
            continue
        # if j>1:
        #     continue
        im = m.get_cutout(i, j, type='image')
        weight = m.get_cutout(i, j, type='weight')

        im_psf = m3[j]
        im_psf2 = im_psf
        if np.sum(im) == 0.:
            #print(local_meds, i, j, np.sum(im))
            print('no flux in image ', i, j)
            continue

        jacob = m.get_jacobian(i, j)
        # Get a galaxy jacobian.
        gal_jacob = Jacobian(
            row=(m['orig_row'][i][j] - m['orig_start_row'][i][j]),
            col=(m['orig_col'][i][j] - m['orig_start_col'][i][j]),
            dvdrow=jacob['dvdrow'],
            dvdcol=jacob['dvdcol'],
            dudrow=jacob['dudrow'],
            dudcol=jacob['dudcol'])

        psf_center = (32 / 2.) + 0.5
        # Get a oversampled psf jacobian.
        if oversample == 1:
            psf_jacob2 = Jacobian(
                row=15.5 +
                (m['orig_row'][i][j] - m['orig_start_row'][i][j] + 1 -
                 (m['box_size'][i] / 2. + 0.5)) * oversample,
                col=15.5 +
                (m['orig_col'][i][j] - m['orig_start_col'][i][j] + 1 -
                 (m['box_size'][i] / 2. + 0.5)) * oversample,
                dvdrow=jacob['dvdrow'] / oversample,
                dvdcol=jacob['dvdcol'] / oversample,
                dudrow=jacob['dudrow'] / oversample,
                dudcol=jacob['dudcol'] / oversample)
        elif oversample == 4:
            psf_jacob2 = Jacobian(
                row=63.5 +
                (m['orig_row'][i][j] - m['orig_start_row'][i][j] + 1 -
                 (m['box_size'][i] / 2. + 0.5)) * oversample,
                col=63.5 +
                (m['orig_col'][i][j] - m['orig_start_col'][i][j] + 1 -
                 (m['box_size'][i] / 2. + 0.5)) * oversample,
                dvdrow=jacob['dvdrow'] / oversample,
                dvdcol=jacob['dvdcol'] / oversample,
                dudrow=jacob['dudrow'] / oversample,
                dudcol=jacob['dudcol'] / oversample)

        # Create an obs for each cutout
        mask = np.where(weight != 0)
        if 1. * len(weight[mask]) / np.product(np.shape(weight)) < 0.8:
            continue

        w.append(np.mean(weight[mask]))
        noise = np.ones_like(weight) / w[-1]

        psf_obs = Observation(im_psf,
                              jacobian=gal_jacob,
                              meta={
                                  'offset_pixels': None,
                                  'file_id': None
                              })
        psf_obs2 = Observation(im_psf2,
                               jacobian=psf_jacob2,
                               meta={
                                   'offset_pixels': None,
                                   'file_id': None
                               })
        #obs = Observation(im, weight=weight, jacobian=gal_jacob, psf=psf_obs, meta={'offset_pixels':None,'file_id':None})
        # oversampled PSF
        obs = Observation(im,
                          weight=weight,
                          jacobian=gal_jacob,
                          psf=psf_obs2,
                          meta={
                              'offset_pixels': None,
                              'file_id': None
                          })
        obs.set_noise(noise)

        obs_list.append(obs)
        psf_list.append(psf_obs2)
        included.append(j)

    return obs_list, psf_list, np.array(included) - 1, np.array(w)
예제 #4
0
def get_exp_list(gal, psf, offsets, sky_stamp, psf2=None):
    #def get_exp_list(gal, psf, sky_stamp, psf2=None):

    if psf2 is None:
        psf2 = psf

    obs_list = ObsList()
    psf_list = ObsList()

    w = []
    for i in range(len(gal)):
        im = gal[i].array
        im_psf = psf[i].array
        im_psf2 = psf2[i].array
        weight = 1 / sky_stamp[i].array

        jacob = gal[i].wcs.jacobian()
        dx = offsets[i].x
        dy = offsets[i].y

        gal_jacob = Jacobian(row=gal[i].true_center.y + dy,
                             col=gal[i].true_center.x + dx,
                             dvdrow=jacob.dvdy,
                             dvdcol=jacob.dvdx,
                             dudrow=jacob.dudy,
                             dudcol=jacob.dudx)
        #gal_jacob = Jacobian(
        #    row=gal[i].true_center.x+dx,
        #    col=gal[i].true_center.y+dy,
        #    dvdrow=jacob.dudx,
        #    dvdcol=jacob.dudy,
        #    dudrow=jacob.dvdx,
        #    dudcol=jacob.dvdy)
        psf_jacob2 = gal_jacob

        mask = np.where(weight != 0)
        w.append(np.mean(weight[mask]))
        noise = old_div(np.ones_like(weight), w[-1])

        psf_obs = Observation(im_psf,
                              jacobian=gal_jacob,
                              meta={
                                  'offset_pixels': None,
                                  'file_id': None
                              })
        psf_obs2 = Observation(im_psf2,
                               jacobian=psf_jacob2,
                               meta={
                                   'offset_pixels': None,
                                   'file_id': None
                               })
        obs = Observation(im,
                          weight=weight,
                          jacobian=gal_jacob,
                          psf=psf_obs,
                          meta={
                              'offset_pixels': None,
                              'file_id': None
                          })
        obs.set_noise(noise)

        obs_list.append(obs)
        psf_list.append(psf_obs2)

    #print(obs_list)
    return obs_list, psf_list, np.array(w)