def check_oth_obj(self, x0, y0, r, filt, idx, out_dir): """Checks if other objects are close to stars picked for PSF estimation""" seg_name = out_dir + '/' + filt +'_comb_seg_map.fits' seg_im = fn.get_subImage_pyfits(int(x0), int(y0), [int(r)] * 8, seg_name, None, None, save_img=False) shape = seg_im.shape num = seg_im[shape[0] / 2, shape[1] / 2] im, bl, oth, oth_segs, check = cp.div_pixels(seg_im, -1) if len(oth_segs) > 1: print "Multiple objects in star stamp for star {0}, object{1}".format(idx, oth_segs) return False return True
def check_oth_obj(self, x0, y0, r, filt, idx, out_dir): """Checks if other objects are close to stars picked for PSF estimation""" seg_name = out_dir + '/' + filt + '_comb_seg_map.fits' seg_im = fn.get_subImage_pyfits(int(x0), int(y0), [int(r)] * 8, seg_name, None, None, save_img=False) shape = seg_im.shape num = seg_im[shape[0] / 2, shape[1] / 2] im, bl, oth, oth_segs, check = cp.div_pixels(seg_im, -1) if len(oth_segs) > 1: print "Multiple objects in star stamp for star {0}, object{1}".format( idx, oth_segs) return False return True
def run(params, focus): # Remove existing postage stamp images, or creates new folder out_dir = params.out_path + params.seg_id+ '/' if os.path.isdir(out_dir + 'postage_stamps') is True: subprocess.call(["rm", '-r', out_dir + 'postage_stamps']) subprocess.call(["mkdir", out_dir + 'postage_stamps']) else: subprocess.call(["mkdir", out_dir + 'postage_stamps']) catalogs = [] tt_files =[] #Open main catalog in all filters for filt in params.filters: cat_name = out_dir + '/' + filt + "_clean.cat" catalog = Table.read(cat_name, format="ascii.basic") #make new column to indicate if postamp is created for that object col= Column(np.zeros(len(catalog)),name='IS_PSTAMP',dtype='int', description = 'created postage stamp' ) catalog.add_column(col) catalogs.append(catalog) tt_file = params.tt_file_path + "/" + filt + "/{}_stars.txt".format(filt) tt_files.append(np.loadtxt(tt_file)) # Get indices of galaxies higher than cut off SNR and not masked. # ALso get their size in differnt filters idx=[[],[],[],[]] for i in range(len(catalogs[0])): x0 = catalogs[0]['X_IMAGE'][int(i)] y0 = catalogs[0]['Y_IMAGE'][int(i)] x_sizes = [] y_sizes = [] pos=[] # Select objects that satisfy criterion for f,filt in enumerate(params.filters): cond1 = (catalogs[f]['IS_STAR'][i] == 0) cond2 = (catalogs[f]['IN_MASK'][i] == 0) cond3 = (catalogs[f]['SNR'][i] >= 0) cond4 = (catalogs[f]['MULTI_DET'][i] == 0) #Placing magnitude cut on only last filter cond5 = (catalogs[-1]['MAG_CORR'][i] <= 25.2) if cond1 and cond2 and cond3 and cond4 and cond5: t = (catalogs[f]['THETA_IMAGE'][int(i)])*np.pi/180. e = catalogs[f]['ELLIPTICITY'][int(i)] A = 2.5*(catalogs[f]['A_IMAGE'][int(i)])*(catalogs[f]['KRON_RADIUS'][int(i)]) x_size = A*(np.absolute(np.sin(t))+(1-e)*np.absolute(np.cos(t))) y_size = A*(np.absolute(np.cos(t))+(1-e)*np.absolute(np.sin(t))) x_sizes.append(x_size) y_sizes.append(y_size) else: break # get coordinates of nearest star in tt_starfeild tt_pos = fn.get_closest_tt(x0,y0,tt_files[f]) if tt_pos: pos.append(tt_pos) else: break if f == len(params.filters)-1: idx[0].append(i) idx[1].append(x_sizes) idx[2].append(y_sizes) idx[3].append(pos) obj_ids = np.array(idx[0], dtype=int) # save list with NUMBER of all objects with pstamps np.savetxt(out_dir+'objects_with_p_stamps.txt', obj_ids, fmt="%i") #save catalogs for f,filt in enumerate(params.filters): # column to save focus col= Column(np.ones(len(catalog))*focus[filt], name='FOCUS', dtype='int', description = 'Focus of image') catalogs[f].add_column(col) catalogs[f]['IS_PSTAMP'][obj_ids] = 1 cat_name = out_dir + '/' + filt + "_full.cat" catalogs[f].write(cat_name, format="ascii.basic") #Get postage stamp image of the galaxy in all filters. #Postage stamp size is set by the largest filter image for num, i in enumerate(idx[0]): print "Saving postage stamp with object id:",i gal_images=[] psf_images=[] info={} x0 = catalogs[0]['X_IMAGE'][int(i)] y0 = catalogs[0]['Y_IMAGE'][int(i)] x_stamp_size = max(idx[1][num]) y_stamp_size = max(idx[2][num]) stamp_size =[int(y_stamp_size), int(x_stamp_size)] psf_stamp_size=[20,20] print "Stamp size of image:", stamp_size #import ipdb; ipdb.set_trace() gal_header = pyfits.Header() psf_header = pyfits.Header() temp = go.GalaxyCatalog(None) header_params = temp.output_params #import ipdb; ipdb.set_trace() for f, filt in enumerate(params.filters): tt_pos = idx[3][num][f] gal_file_name = out_dir + 'postage_stamps/' + filt + '_' + params.seg_id + '_' + str(i)+'_image.fits' psf_file_name = out_dir + 'postage_stamps/' + filt + '_' + params.seg_id + '_' + str(i)+'_psf.fits' seg_file_name = out_dir + 'postage_stamps/' + filt + '_' + params.seg_id + '_' + str(i)+'_seg.fits' gal_name = params.data_files[filt] gal_image = fn.get_subImage_pyfits(x0,y0, stamp_size, gal_name, None, None, save_img=False) psf_name = params.tt_file_path + filt +'/'+ params.tt_file_name[focus[filt]] psf_image = fn.get_subImage_pyfits(tt_pos[0],tt_pos[1], psf_stamp_size, psf_name, None, None, save_img=False) seg_name = out_dir + filt +'_comb_seg_map.fits' seg_image = fn.get_subImage_pyfits(x0,y0, stamp_size, seg_name, None, None, save_img=False) for header_param in header_params: try: gal_header[header_param] = catalogs[f][header_param][i] except: gal_header[header_param] = 9999.99 psf_header['X'] = tt_pos[0] psf_header['Y'] = tt_pos[1] psf_header['width'] = psf_stamp_size[0] psf_header['height'] = psf_stamp_size[1] pyfits.writeto(gal_file_name,gal_image,gal_header, clobber=True) pyfits.writeto(psf_file_name,psf_image,psf_header, clobber=True) pyfits.writeto(seg_file_name,seg_image, clobber=True)
def run(params, focus): # Remove existing postage stamp images, or creates new folder out_dir = params.out_path + params.seg_id + '/' if os.path.isdir(out_dir + 'postage_stamps') is True: subprocess.call(["rm", '-r', out_dir + 'postage_stamps']) subprocess.call(["mkdir", out_dir + 'postage_stamps']) else: subprocess.call(["mkdir", out_dir + 'postage_stamps']) catalogs = [] tt_files = [] #Open main catalog in all filters for filt in params.filters: cat_name = out_dir + '/' + filt + "_clean.cat" catalog = Table.read(cat_name, format="ascii.basic") #make new column to indicate if postamp is created for that object col = Column(np.zeros(len(catalog)), name='IS_PSTAMP', dtype='int', description='created postage stamp') catalog.add_column(col) catalogs.append(catalog) tt_file = params.tt_file_path + "/" + filt + "/{}_stars.txt".format( filt) tt_files.append(np.loadtxt(tt_file)) # Get indices of galaxies higher than cut off SNR and not masked. # ALso get their size in differnt filters idx = [[], [], [], []] for i in range(len(catalogs[0])): x0 = catalogs[0]['X_IMAGE'][int(i)] y0 = catalogs[0]['Y_IMAGE'][int(i)] x_sizes = [] y_sizes = [] pos = [] # Select objects that satisfy criterion for f, filt in enumerate(params.filters): cond1 = (catalogs[f]['IS_STAR'][i] == 0) cond2 = (catalogs[f]['IN_MASK'][i] == 0) cond3 = (catalogs[f]['SNR'][i] >= 0) cond4 = (catalogs[f]['MULTI_DET'][i] == 0) #Placing magnitude cut on only last filter cond5 = (catalogs[-1]['MAG_CORR'][i] <= 25.2) if cond1 and cond2 and cond3 and cond4 and cond5: t = (catalogs[f]['THETA_IMAGE'][int(i)]) * np.pi / 180. e = catalogs[f]['ELLIPTICITY'][int(i)] A = 2.5 * (catalogs[f]['A_IMAGE'][int(i)]) * ( catalogs[f]['KRON_RADIUS'][int(i)]) x_size = A * (np.absolute(np.sin(t)) + (1 - e) * np.absolute(np.cos(t))) y_size = A * (np.absolute(np.cos(t)) + (1 - e) * np.absolute(np.sin(t))) x_sizes.append(x_size) y_sizes.append(y_size) else: break # get coordinates of nearest star in tt_starfeild tt_pos = fn.get_closest_tt(x0, y0, tt_files[f]) if tt_pos: pos.append(tt_pos) else: break if f == len(params.filters) - 1: idx[0].append(i) idx[1].append(x_sizes) idx[2].append(y_sizes) idx[3].append(pos) obj_ids = np.array(idx[0], dtype=int) # save list with NUMBER of all objects with pstamps np.savetxt(out_dir + 'objects_with_p_stamps.txt', obj_ids, fmt="%i") #save catalogs for f, filt in enumerate(params.filters): # column to save focus col = Column(np.ones(len(catalog)) * focus[filt], name='FOCUS', dtype='int', description='Focus of image') catalogs[f].add_column(col) catalogs[f]['IS_PSTAMP'][obj_ids] = 1 cat_name = out_dir + '/' + filt + "_full.cat" catalogs[f].write(cat_name, format="ascii.basic") #Get postage stamp image of the galaxy in all filters. #Postage stamp size is set by the largest filter image for num, i in enumerate(idx[0]): print "Saving postage stamp with object id:", i gal_images = [] psf_images = [] info = {} x0 = catalogs[0]['X_IMAGE'][int(i)] y0 = catalogs[0]['Y_IMAGE'][int(i)] x_stamp_size = max(idx[1][num]) y_stamp_size = max(idx[2][num]) stamp_size = [int(y_stamp_size), int(x_stamp_size)] psf_stamp_size = [20, 20] print "Stamp size of image:", stamp_size #import ipdb; ipdb.set_trace() gal_header = pyfits.Header() psf_header = pyfits.Header() temp = go.GalaxyCatalog(None) header_params = temp.output_params #import ipdb; ipdb.set_trace() for f, filt in enumerate(params.filters): tt_pos = idx[3][num][f] gal_file_name = out_dir + 'postage_stamps/' + filt + '_' + params.seg_id + '_' + str( i) + '_image.fits' psf_file_name = out_dir + 'postage_stamps/' + filt + '_' + params.seg_id + '_' + str( i) + '_psf.fits' seg_file_name = out_dir + 'postage_stamps/' + filt + '_' + params.seg_id + '_' + str( i) + '_seg.fits' gal_name = params.data_files[filt] gal_image = fn.get_subImage_pyfits(x0, y0, stamp_size, gal_name, None, None, save_img=False) psf_name = params.tt_file_path + filt + '/' + params.tt_file_name[ focus[filt]] psf_image = fn.get_subImage_pyfits(tt_pos[0], tt_pos[1], psf_stamp_size, psf_name, None, None, save_img=False) seg_name = out_dir + filt + '_comb_seg_map.fits' seg_image = fn.get_subImage_pyfits(x0, y0, stamp_size, seg_name, None, None, save_img=False) for header_param in header_params: try: gal_header[header_param] = catalogs[f][header_param][i] except: gal_header[header_param] = 9999.99 psf_header['X'] = tt_pos[0] psf_header['Y'] = tt_pos[1] psf_header['width'] = psf_stamp_size[0] psf_header['height'] = psf_stamp_size[1] pyfits.writeto(gal_file_name, gal_image, gal_header, clobber=True) pyfits.writeto(psf_file_name, psf_image, psf_header, clobber=True) pyfits.writeto(seg_file_name, seg_image, clobber=True)