def make_pc1_images(msF,merF,bd='/astro/snyder_lab/Illustris_CANDELS/Illustris-1_z1_images_bc03/'): plot_filen = 'images/pc1_deciles.pdf' if not os.path.lexists('images'): os.mkdir('images') f1 = pyplot.figure(figsize=(8.0,10.0), dpi=600) pyplot.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0,wspace=0.0,hspace=0.0) N_columns = 8 N_rows = 10 N_pix = 80 for j,sk in enumerate(im_snap_keys): #pick filter to select PC1 values r_fk = im_fil_keys[sk]['r'][0] g_fk = im_fil_keys[sk]['g'][0] b_fk = im_fil_keys[sk]['b'][0] parameters, pcd, pc, pcd = make_pc_dict(msF,sk,r_fk) pc1 = pc.X[:,0].flatten() #all fk's pc1 values for this snapshot mag = get_all_morph_val(msF,sk,r_fk,'MAG') mstar = get_all_snap_val(msF,sk,'Mstar_Msun') r_imf = get_all_morph_val(msF,sk,r_fk,'IMFILES') g_imf = get_all_morph_val(msF,sk,g_fk,'IMFILES') b_imf = get_all_morph_val(msF,sk,b_fk,'IMFILES') #select indices whose images we want pc1_bins = np.asarray([-2.0,-1.5,-1.0,-0.5,0.0,0.5,1.0,1.5,2.0,2.5]) mstar_bins = 10.0**np.asarray([10.0,10.1,10.2,10.3,10.4,10.5,10.7,10.9,11.1,11.3]) for i,pb in enumerate(pc1_bins): pi = np.where(np.logical_and( pc1 < pb+0.5, pc1 >= pb) )[0] msi = pi #np.where(np.logical_and( mstar < pb+1.0e9, mstar >=pb))[0] if msi.shape[0]==0: continue mi = -1#np.argmin(mag[msi]) r_im = bd+sk+'/'+r_imf[msi[mi]] g_im = bd+sk+'/'+g_imf[msi[mi]] b_im = bd+sk+'/'+b_imf[msi[mi]] r = pyfits.open(r_im)[0].data g = pyfits.open(g_im)[0].data b = pyfits.open(b_im)[0].data print(r_im,r.shape) mid = r.shape[0]/2 r = r[mid-N_pix/2:mid+N_pix/2,mid-N_pix/2:mid+N_pix/2] g = g[mid-N_pix/2:mid+N_pix/2,mid-N_pix/2:mid+N_pix/2] b = b[mid-N_pix/2:mid+N_pix/2,mid-N_pix/2:mid+N_pix/2] axi = f1.add_subplot(N_rows,N_columns,N_columns*(i+1)-j) axi.set_xticks([]) ; axi.set_yticks([]) alph=0.2 ; Q=8.0 rgbthing = make_color_image.make_interactive(b,g,r,alph,Q) axi.imshow(rgbthing,interpolation='nearest',aspect='auto',origin='lower') f1.savefig(plot_filen,dpi=300) pyplot.close(f1) return 0
def jwst_image_figure(alph=0.1, Q=1.0, dx=0, dy=0, Npix=1000.0, do_psf=False, cs='CAMERA5-BROADBAND-NONSCATTER', label=''): nref11_z2 = 'nref11/RD0020/broadbandz.fits' nref11_z3 = 'nref11/RD0017/broadbandz.fits' extra_z2 = 'nref11_refine200kpc_z4to2/RD0020/broadbandz.fits' extra_z3 = 'nref11_refine200kpc_z4to2/RD0017/broadbandz.fits' nref11_z2_o = snapshot() nref11_z3_o = snapshot() extra_z2_o = snapshot() extra_z3_o = snapshot() rf = 21 #F200W 0.75 gf = 19 #F115W 0.40 bf = 4 #ACS/F775W rest far-UV 0.25 fudge = 1.0 bfact = 1.5 gfact = 0.5 / (0.115**2) rfact = 2.0 / (0.200**2) mid = np.int64(1000.0 / 2) if Npix is not None: delt = np.int64(Npix / 2) nref11_z2_o.r = fudge * pyfits.open( nref11_z2)[cs].data[rf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * rfact nref11_z2_o.g = fudge * pyfits.open( nref11_z2)[cs].data[gf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * gfact nref11_z2_o.b = fudge * pyfits.open( nref11_z2)[cs].data[bf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * bfact nref11_z3_o.r = fudge * pyfits.open( nref11_z3)[cs].data[rf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * rfact nref11_z3_o.g = fudge * pyfits.open( nref11_z3)[cs].data[gf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * gfact nref11_z3_o.b = fudge * pyfits.open( nref11_z3)[cs].data[bf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * bfact print(np.max(nref11_z2_o.r), np.max(nref11_z2_o.b)) extra_z2_o.r = fudge * pyfits.open(extra_z2)[cs].data[rf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * rfact extra_z2_o.g = fudge * pyfits.open(extra_z2)[cs].data[gf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * gfact extra_z2_o.b = fudge * pyfits.open(extra_z2)[cs].data[bf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * bfact extra_z3_o.r = fudge * pyfits.open(extra_z3)[cs].data[rf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * rfact extra_z3_o.g = fudge * pyfits.open(extra_z3)[cs].data[gf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * gfact extra_z3_o.b = fudge * pyfits.open(extra_z3)[cs].data[bf, dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] * bfact print(extra_z2_o.r.shape) kpc_per_arcsec_z2 = WMAP9.kpc_proper_per_arcmin(2.0).value / 60.0 kpc_per_arcsec_z3 = WMAP9.kpc_proper_per_arcmin(2.75).value / 60.0 kpc_per_pix = 0.05 if do_psf == False: filen = 'images_hires_' + label + '_' + cs[0:7] + '.pdf' nref11_z2_o.rgbthing = make_color_image.make_interactive( nref11_z2_o.b, nref11_z2_o.g, nref11_z2_o.r, alph, Q) nref11_z3_o.rgbthing = make_color_image.make_interactive( nref11_z3_o.b, nref11_z3_o.g, nref11_z3_o.r, alph, Q) extra_z2_o.rgbthing = make_color_image.make_interactive( extra_z2_o.b, extra_z2_o.g, extra_z2_o.r, alph, Q) extra_z3_o.rgbthing = make_color_image.make_interactive( extra_z3_o.b, extra_z3_o.g, extra_z3_o.r, alph, Q) else: filen = 'images_psf_' + label + '_' + cs[0:7] + '.pdf' psf_fwhm_arcsec = 0.05 fwhm_pixels_z2 = psf_fwhm_arcsec * kpc_per_arcsec_z2 / kpc_per_pix fwhm_pixels_z3 = psf_fwhm_arcsec * kpc_per_arcsec_z3 / kpc_per_pix print('KPC per as, z2: ', kpc_per_arcsec_z2) print('FWHM arcsec: ', psf_fwhm_arcsec) print('FWHM pixels z2: ', fwhm_pixels_z2) print('FWHM pixels z3: ', fwhm_pixels_z3) nref11_z2_o.rgbthing = make_color_image.make_interactive( nref11_z2_o.b, nref11_z2_o.g, nref11_z2_o.r, alph, Q, fwhm_pixels=fwhm_pixels_z2) nref11_z3_o.rgbthing = make_color_image.make_interactive( nref11_z3_o.b, nref11_z3_o.g, nref11_z3_o.r, alph, Q, fwhm_pixels=fwhm_pixels_z3) extra_z2_o.rgbthing = make_color_image.make_interactive( extra_z2_o.b, extra_z2_o.g, extra_z2_o.r, alph, Q, fwhm_pixels=fwhm_pixels_z2) extra_z3_o.rgbthing = make_color_image.make_interactive( extra_z3_o.b, extra_z3_o.g, extra_z3_o.r, alph, Q, fwhm_pixels=fwhm_pixels_z3) #high-res version first spinelw = 1.0 f1 = pyplot.figure(figsize=(10.0, 10.0), dpi=200) pyplot.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0, wspace=0.0, hspace=0.0) axi = f1.add_subplot(2, 2, 1) axi.set_xticks([]) axi.set_yticks([]) axi.imshow(nref11_z2_o.rgbthing, interpolation='nearest', origin='lower') axi.annotate('HST-ACS/F775W', (0.25, 0.94), xycoords='axes fraction', color='Blue', ha='center', va='center', fontsize=20) axi.annotate('JWST-NC/F115W', (0.25, 0.88), xycoords='axes fraction', color='Green', ha='center', va='center', fontsize=20) axi.annotate('JWST-NC/F200W', (0.25, 0.82), xycoords='axes fraction', color='Red', ha='center', va='center', fontsize=20) #axi.annotate(anfk,(0.5,0.15),xycoords='axes fraction',color=anc,ha='center',va='center',fontsize=12,backgroundcolor='Black') for ss in axi.spines: s = axi.spines[ss] s.set_color('white') s.set_linewidth(spinelw) axi = f1.add_subplot(2, 2, 2) axi.set_xticks([]) axi.set_yticks([]) axi.imshow(extra_z2_o.rgbthing, interpolation='nearest', origin='lower') #10kpc scale bar if label == 'zoom': axi.plot([delt - 10, delt + 10], [delt / 3, delt / 3], marker='None', linestyle='solid', color='White', lw=5) axi.annotate('1 kpc', (delt, delt / 4), xycoords='data', color='White', ha='center', va='center', fontsize=20) axi.annotate('z = 2', (0.5 * delt, 2 * delt * 0.90), xycoords='data', color='White', ha='center', va='center', fontsize=20) else: axi.plot([delt - 100, delt + 100], [delt / 3, delt / 3], marker='None', linestyle='solid', color='White', lw=5) axi.annotate('10 kpc', (delt, delt / 4), xycoords='data', color='White', ha='center', va='center', fontsize=20) axi.annotate('z = 2', (0.5 * delt, 2 * delt * 0.90), xycoords='data', color='White', ha='center', va='center', fontsize=20) if do_psf == False: axi.annotate('No PSF', (1.5 * delt, 2 * delt * 0.90), xycoords='data', color='White', ha='center', va='center', fontsize=20) else: axi.annotate('0.05" FWHM', (1.5 * delt, 2 * delt * 0.90), xycoords='data', color='White', ha='center', va='center', fontsize=20) for ss in axi.spines: s = axi.spines[ss] s.set_color('white') s.set_linewidth(spinelw) axi = f1.add_subplot(2, 2, 3) axi.imshow(nref11_z3_o.rgbthing, interpolation='nearest', origin='lower') axi.set_xticks([]) axi.set_yticks([]) axi.annotate('natural refine', (delt, 0.25 * delt), xycoords='data', color='White', ha='center', va='center', fontsize=20) for ss in axi.spines: s = axi.spines[ss] s.set_color('white') s.set_linewidth(spinelw) axi = f1.add_subplot(2, 2, 4) axi.set_xticks([]) axi.set_yticks([]) axi.imshow(extra_z3_o.rgbthing, interpolation='nearest', origin='lower') axi.annotate('z = 2.75', (0.5 * delt, 2 * delt * 0.90), xycoords='data', color='White', ha='center', va='center', fontsize=20) axi.annotate('forced refine', (delt, 0.25 * delt), xycoords='data', color='White', ha='center', va='center', fontsize=20) for ss in axi.spines: s = axi.spines[ss] s.set_color('white') s.set_linewidth(spinelw) pyplot.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0, wspace=0.0, hspace=0.0) f1.savefig(filen, dpi=200) pyplot.close(f1) return
def showgalaxy(axi, snapkey, subfindID, camera, filters=['NC-F115W', 'NC-F150W', 'NC-F200W'], alph=0.2, Q=8.0, Npix=400, sb='SB25', rfkey=None, dx=0, dy=0): image_base = '/astro/snyder_lab/Illustris_CANDELS/Illustris-1_z1_images_bc03/' + snapkey camstr = camera b_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + filters[0] + '_' + sb + '.fits')) g_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + filters[1] + '_' + sb + '.fits')) r_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + filters[2] + '_' + sb + '.fits')) #print('Accessing...',b_fn,g_fn,r_fn) try: r = pyfits.open(r_fn[0])[0].data g = pyfits.open(g_fn[0])[0].data b = pyfits.open(b_fn[0])[0].data except: print(r_fn, g_fn, b_fn) print('Could not open files requested.') return axi mid = np.int64(r.shape[0] / 2) delt = np.int64(Npix / 2) r = r[dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] g = g[dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] b = b[dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] axi.set_xticks([]) axi.set_yticks([]) alph = alph Q = Q rgbthing = make_color_image.make_interactive(b, g, r, alph, Q) axi.imshow(rgbthing, interpolation='nearest', aspect='auto', origin='lower') if rfkey is not None: rf_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + rfkey + '_' + sb + '.fits'))[0] try: axi = icmp.overplot_morph_data(axi, rf_fn, mid, delt, lw=0.5) except: pass return axi
def showgalaxy(axi, snapkey, subfindID, camera, filters=['NC-F115W', 'NC-F150W', 'NC-F200W'], alph=0.2, Q=8.0, Npix=400, ckpc=None, ckpcz=None, sb='SB25', rfkey=None, dx=0, dy=0, invert=False): image_base = '/astro/snyder_lab/Illustris_CANDELS/Illustris-1_z1_images_bc03/' + snapkey camstr = camera b_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + filters[0] + '_' + sb + '.fits')) g_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + filters[1] + '_' + sb + '.fits')) r_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + filters[2] + '_' + sb + '.fits')) #print('Accessing...',b_fn,g_fn,r_fn) try: r = pyfits.open(r_fn[0])[0].data g = pyfits.open(g_fn[0])[0].data b = pyfits.open(b_fn[0])[0].data pixsize_arcsec = pyfits.open(g_fn[0])[0].header['PIXSCALE'] pixsize_kpc = pyfits.open(g_fn[0])[0].header['PIXKPC'] headers = [ pyfits.open(r_fn[0])[0].header, pyfits.open(g_fn[0])[0].header, pyfits.open(b_fn[0])[0].header ] except: print(r_fn, g_fn, b_fn) print('Could not open files requested.') return axi mid = np.int64(r.shape[0] / 2) if Npix is not None: delt = np.int64(Npix / 2) elif ckpc is not None: snap_int = np.int32(snapkey[-3:]) this_z = gsu.redshift_from_snapshot(snap_int) #factor=icmp.illcos.kpc_comoving_per_arcmin(this_z).value/60.0 Npix = ((1.0 + this_z)**(-1.0)) * ckpc / pixsize_kpc delt = np.int64(Npix / 2) elif ckpcz is not None: snap_int = np.int32(snapkey[-3:]) this_z = gsu.redshift_from_snapshot(snap_int) Npix = ((1.0 + this_z)**(-1.0)) * ckpcz / pixsize_kpc delt = np.int64(Npix / 2) else: print('Size definiton required!') return axi r = r[dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] g = g[dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] b = b[dx + mid - delt:dx + mid + delt, dy + mid - delt:dy + mid + delt] axi.set_xticks([]) axi.set_yticks([]) alph = alph Q = Q if invert is False: rgbthing = make_color_image.make_interactive(b, g, r, alph, Q) else: rgbthing = 1.0 - make_color_image.make_interactive(b, g, r, alph, Q) axi.imshow(rgbthing, interpolation='nearest', aspect='auto', origin='lower') if rfkey is not None: rf_fn = np.asarray( glob.glob(image_base + '/subdir_???/images_subhalo_' + str(subfindID) + '/*' + 'cam' + camstr + '_' + rfkey + '_' + sb + '.fits'))[0] try: axi = icmp.overplot_morph_data(axi, rf_fn, mid, delt, lw=2) except: pass return axi, rgbthing, pixsize_arcsec, headers
gHST_0 = np.transpose(c_0_f850) * g_ZPfact rHST_0 = np.transpose(c_0_f125) * r_ZPfact bHST_6 = np.transpose(c_6_f606) * b_ZPfact gHST_6 = np.transpose(c_6_f850) * g_ZPfact rHST_6 = np.transpose(c_6_f125) * r_ZPfact #IMPORTANT #HERE THERE BE TRANPOSES ######### #to get the colors to look reasonable (started from lambda ratios and modify until happy) bscale = 1.0 gscale = 6.0 / 10.0 rscale = 6.0 / 12.5 #Create RGB images in Lupton+ 04 Scheme rgbdata_edge_hires = make_color_image.make_interactive( bSIM_1 / bscale, gSIM_1 / gscale, rSIM_1 / rscale, 10.0, 9.0) rgbdata_face_hires = make_color_image.make_interactive( bSIM_0 / bscale, gSIM_0 / gscale, rSIM_0 / rscale, 10.0, 9.0) rgbdata_6_hires = make_color_image.make_interactive( bSIM_6 / bscale, gSIM_6 / gscale, rSIM_6 / rscale, 10.0, 9.0) rgbdata_edge_lores = make_color_image.make_interactive( bHST_1 / bscale, gHST_1 * gscale, rHST_1 * rscale, 0.006, 4.0) rgbdata_face_lores = make_color_image.make_interactive( bHST_0 / bscale, gHST_0 * gscale, rHST_0 * rscale, 0.006, 4.0) rgbdata_6_lores = make_color_image.make_interactive( bHST_6 / bscale, gHST_6 * gscale, rHST_6 * rscale, 0.006, 4.0) #plot 'em. axiHST = pyplot.axes([0.0, 0.0, 0.333, 0.5], frameon=True, axisbg='black') axiHST.set_xticks([])
def foggie_time_series(label, alph=1e3, Q=15, label_redshift=True, label_time=True, psf_fwhm_arcsec=None, fov_comoving=True): savefile = 'timeseries' + label + '.pdf' f = pyplot.figure(figsize=(12.0, 8.0), dpi=500) pyplot.subplots_adjust(wspace=0.0, hspace=0.0, top=1.0, right=1.0, left=0.00, bottom=0.00) flist = np.sort( np.asarray(glob.glob('RD00??/*_sunrise/input/images/broadbandz.fits'))) print(flist.shape, flist) mid = 500 delt = 500 Nx = 3 Ny = 2 Ntot = Nx * Ny for i, fn in enumerate(flist[0:Ntot]): ims, fils, header, bbheader = ebi.extract_bb_images( fn, fils=['hst/acs_f606w', 'jwst/nircam_f115w', 'jwst/nircam_f277w'], hdukey='CAMERA5-BROADBAND-NONSCATTER') ax = f.add_subplot(Ny, Nx, i + 1) ax.set_xticks([]) ax.set_yticks([]) print(ims[2].shape) if fov_comoving is True: redshift = bbheader['REDSHIFT'] zdelt = int(float(delt) / (1.0 + redshift)) else: zdelt = delt b = (0.61**1.0) * ims[0][mid - zdelt:mid + zdelt, mid - zdelt:mid + zdelt] g = (1.15**1.0) * ims[1][mid - zdelt:mid + zdelt, mid - zdelt:mid + zdelt] r = (2.77**1.0) * ims[2][mid - zdelt:mid + zdelt, mid - zdelt:mid + zdelt] if psf_fwhm_arcsec is not None: redshift = bbheader['REDSHIFT'] kpc_per_arcsec = fogcos.kpc_proper_per_arcmin( redshift).value / 60.0 kpc_per_pixel = header['CD1_1'] psf_fwhm_pixels = psf_fwhm_arcsec * kpc_per_arcsec / kpc_per_pixel fwhm_pixels = np.asarray( [psf_fwhm_pixels, psf_fwhm_pixels, psf_fwhm_pixels]) else: fwhm_pixels = np.asarray([0.0, 0.0, 0.0]) alph = alph Q = Q rgbthing = make_color_image.make_interactive(b, g, r, alph, Q, fwhm_pixels=fwhm_pixels) ax.imshow(rgbthing, interpolation='nearest', aspect='auto', origin='lower') if label_redshift is True: ax.annotate('z={:6.2f}'.format(bbheader['REDSHIFT']), (0.50, 0.85), ha='center', xycoords='axes fraction', color='white', fontsize=10, va='center') if label_time is True: ax.annotate('t={:6.2f} Gyr'.format( fogcos.age(bbheader['REDSHIFT']).value), (0.50, 0.95), ha='center', xycoords='axes fraction', color='white', fontsize=10, va='center') #ax.annotate(label[i],(0.50,0.85),ha='center',xycoords='axes fraction',color='white',fontsize=10,va='center',bbox=dict(boxstyle='round', fc="gray", ec="blue")) f.savefig(savefile, dpi=500)