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)
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)
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)