def create_binned_data(min_class=20,min_prob=0.8, zmin = 0.01, zmax = 0.16, zstep = 0.01, magmin = -24, magmax = -16, mag_numbins = 20, sizemin = 0, sizemax = 15, size_numbins = 20, taskno = '01', plot=False ): p = pyfits.open(gz2both_data_file) gzdata = p[1].data d1 = {'total_weight':'t01_smooth_or_features_total_weight', 'taskno': 1, 'nresponses': 2, 'responses':('t01_smooth_or_features_a01_smooth_weighted_fraction','t01_smooth_or_features_a02_features_or_disk_weighted_fraction'), 'names':('sp','el') } d4 = {'total_weight':'t03_bar_total_weight', 'taskno': 3, 'nresponses': 2, 'responses':('t03_bar_a06_bar_weighted_fraction','t03_bar_a07_no_bar_weighted_fraction'), 'names':('bar','nobar') } taskdict = {'01':d1, '04':d4} # Task-specific commands taskcount = gzdata[taskdict[taskno]['total_weight']] > min_class probarr = datalist=[] namelist = taskdict[taskno]['names'] for responses in taskdict[taskno]['responses']: sp_prob = gzdata['t01_smooth_or_features_a02_features_or_disk_weighted_fraction'] > min_prob sp = gzdata[sp_prob & taskcount] datalist.append(var) #taskcount = gzdata['t01_smooth_or_features_total_weight'] > min_class #sp_prob = gzdata['t01_smooth_or_features_a02_features_or_disk_weighted_fraction'] > min_prob #el_prob = gzdata['t01_smooth_or_features_a01_smooth_weighted_fraction'] > min_prob #sp = gzdata[sp_prob & taskcount] #el = gzdata[el_prob & taskcount] #datalist = (sp,el) #namelist = ('sp','el') if plot: fig = plt.figure(1,(14,8)) fig.clf() for index, (mdata, mname) in enumerate(zip(datalist,namelist)): redshift = mdata['REDSHIFT'] mr = mdata['PETROMAG_MR'] r50_kpc = mdata['PETROR50_R_KPC'] r90 = mdata['PETROR90_R'] # Mask the data where no values exist redshift_mask = np.isfinite(redshift) # Add masks for magnitude, size, and surface brightness limits dmod = cosmology.dmod_flat(redshift[redshift_mask]) ang_scale = cosmology.ang_scale_flat(redshift[redshift_mask]) absmag_lim = 17.77 - dmod surfacebrightness_app_lim = 23.0 r90_kpc = r90[redshift_mask] * ang_scale magnitude_mask = mr[redshift_mask] > (absmag_lim - 1.0) size_mask = r90_kpc < (3.0 * ang_scale) surfacebrightness_mask = (mr[redshift_mask] + dmod + 2.5*np.log10(6.283185*(r50_kpc[redshift_mask]/ang_scale)**2)) > (surfacebrightness_app_lim - 1.0) totalmask = magnitude_mask | size_mask | surfacebrightness_mask print '%s galaxies removed from %s sample due to magnitude cutoff'%(np.sum(magnitude_mask.astype(int)),mname) print '%s galaxies removed from %s sample due to angular size cutoff'%(np.sum(size_mask.astype(int)),mname) print '%s galaxies removed from %s sample due to surface brightness cutoff'%(np.sum(surfacebrightness_mask.astype(int)),mname) print '%s percent of the total'%(np.sum(totalmask.astype(float))/len(redshift_mask) * 100) print ' ' z_masked = redshift[redshift_mask] m_masked = mr[redshift_mask] r_masked = r50_kpc[redshift_mask] zbins = np.arange(zmin, zmax, zstep) magbins = np.linspace(magmin, magmax, mag_numbins) sizebins = np.linspace(sizemin, sizemax, size_numbins) h, edges = np.histogramdd((z_masked, m_masked, r_masked),bins=(zbins,magbins,sizebins)) if plot: ax = fig.add_subplot(1,2,index) imarr = np.squeeze(h[3:4,:,:]) # Pick an example redshift range to slice on im = ax.imshow(imarr, extent=(-24,-16,0,15), interpolation="nearest", origin='lower') ax.set_title(mname) ax.set_xlabel(r'$M_R [mag]$') ax.set_ylabel(r'$R_{50} [kpc]$') ax.set_aspect('auto') cb = plt.colorbar(im) ax.set_xlim(min(magbins),max(magbins)) ax.set_ylim(min(sizebins),max(sizebins)) edges_redshift = edges[0] edges_mag = edges[1] edges_size = edges[2] centers_redshift = edges_redshift[:-1] + (edges_redshift[1]-edges_redshift[0])/2. centers_mag = edges_mag[:-1] + (edges_mag[1]-edges_mag[0])/2. centers_size = edges_size[:-1] + (edges_size[1]-edges_size[0])/2. col1_edge = pyfits.Column(name = 'edges', format='E', array=edges_redshift) col2_edge = pyfits.Column(name = 'edges', format='E', array=edges_mag) col3_edge = pyfits.Column(name = 'edges', format='E', array=edges_size) col1_centers = pyfits.Column(name = 'centers', format='E', array=centers_redshift) col2_centers = pyfits.Column(name = 'centers', format='E', array=centers_mag) col3_centers = pyfits.Column(name = 'centers', format='E', array=centers_size) primary_hdu = pyfits.PrimaryHDU(h) hdulist = pyfits.HDUList([primary_hdu]) tb1_hdu = pyfits.new_table(pyfits.ColDefs([col1_edge])) tb1_hdu.name = 'REDSHIFT_BIN_EDGES' tb2_hdu = pyfits.new_table(pyfits.ColDefs([col2_edge])) tb2_hdu.name = 'MR_BIN_EDGES' tb3_hdu = pyfits.new_table(pyfits.ColDefs([col3_edge])) tb3_hdu.name = 'R50_KPC_BIN_EDGES' tb4_hdu = pyfits.new_table(pyfits.ColDefs([col1_centers])) tb4_hdu.name = 'REDSHIFT_BIN_CENTERS' tb5_hdu = pyfits.new_table(pyfits.ColDefs([col2_centers])) tb5_hdu.name = 'MR_BIN_CENTERS' tb6_hdu = pyfits.new_table(pyfits.ColDefs([col3_centers])) tb6_hdu.name = 'R50_KPC_BIN_CENTERS' hdulist.append(tb1_hdu) hdulist.append(tb2_hdu) hdulist.append(tb3_hdu) hdulist.append(tb4_hdu) hdulist.append(tb5_hdu) hdulist.append(tb6_hdu) hdulist.writeto(fits_path+'task%s_%s'%(taskno,mname)+'binned_counts.fits',clobber=True) p.close() return None
def plot_ratio_baseline(plot_mag_lims=False): f_ratio = fits_path+'local_ratio_baseline.fits' f_counts = fits_path+'el_binned_counts.fits' p_ratio = pyfits.open(f_ratio) p_counts = pyfits.open(f_counts) zbins = p_counts['REDSHIFT_BIN_CENTERS'].data['centers'] magbins = p_counts['MR_BIN_CENTERS'].data['centers'] sizebins = p_counts['R50_KPC_BIN_CENTERS'].data['centers'] zedges = p_counts['REDSHIFT_BIN_EDGES'].data['edges'] magedges = p_counts['MR_BIN_EDGES'].data['edges'] sizeedges = p_counts['R50_KPC_BIN_EDGES'].data['edges'] ratio_baseline_masked = pickle.load(open(gz_path+'local_ratio_baseline_masked.pkl','rb')) counts_baseline_masked = pickle.load(open(gz_path+'local_counts_baseline_masked.pkl','rb')) titlenames = ('counts','ratio') labelnames = (r'$N_{el} + N_{sp}$',r'$log_{10}(N_{el}/N_{sp})$') fig = plt.figure(1,(14,8)) fig.clf() for index, data in enumerate((np.sum(counts_baseline_masked, axis=2), ratio_baseline_masked)): ax = fig.add_subplot(1,2,index+1,aspect=1) cmap = cm.jet cmap.set_bad('k') #imextent=(magbins[0],magbins[-1],sizebins[0],sizebins[-1]) imextent=(magedges[0],magedges[-1],sizeedges[0],sizeedges[-1]) im = ax.imshow(data, vmin = -2., vmax=2., extent=imextent, interpolation='nearest',origin='lower') ax.set_title('sp/el '+titlenames[index]) ax.set_xlabel(r'$M_R [mag]$',fontsize=22) ax.set_ylabel(r'$R_{50} [kpc]$',fontsize=22) ax.set_aspect('auto') rc(('xtick','ytick'), labelsize=12) cb = plt.colorbar(im,orientation='vertical') cb.set_label(labelnames[index],fontsize=16) SBapp = 23.0 appmag_lim = 17.0 SBlim_size = np.arange(200) / 10.0 SBlim_mag = (SBapp - cosmology.dmod_flat(np.mean(zbins))- 2.5*np.log10(6.283185*(SBlim_size/cosmology.ang_scale_flat(np.mean(zbins)))**2)) absmag_lim = appmag_lim - cosmology.dmod_flat(np.mean(zbins)) absmag_lim_loz = appmag_lim - cosmology.dmod_flat(0.0005) absmag_lim_hiz = appmag_lim - cosmology.dmod_flat(0.25) r50_lim = cosmology.ang_scale_flat(np.mean(zbins)) ax.autoscale(False) ax.plot(SBlim_mag, SBlim_size,'w--') ax.plot(np.zeros(2)+absmag_lim, np.array([sizeedges[0],sizeedges[-1]]),'w--') if plot_mag_lims: ax.plot(np.zeros(2)+absmag_lim_loz, np.array([sizeedges[0],sizeedges[-1]]),'g--') ax.plot(np.zeros(2)+absmag_lim_hiz, np.array([sizeedges[0],sizeedges[-1]]),'g--') ax.plot(np.array([magedges[0],magedges[-1]]), np.zeros(2)+r50_lim,'w--') plt.show() #ax.set_xlim(magedges[0],magedges[-1]) #ax.set_ylim(sizeedges[0],sizeedges[-1]) p_ratio.close() p_counts.close() return None
def plot_ratio_baseline_fit(fitbins=19, kernel_size = 3, plot_contour=False): ratio_baseline_fit = pyfits.getdata(fits_path+'local_ratio_baseline_fit.fits') f_counts = fits_path+'el_binned_counts.fits' p_counts = pyfits.open(f_counts) zbins = p_counts['REDSHIFT_BIN_CENTERS'].data['centers'] magbins = p_counts['MR_BIN_CENTERS'].data['centers'] sizebins = p_counts['R50_KPC_BIN_CENTERS'].data['centers'] zedges = p_counts['REDSHIFT_BIN_EDGES'].data['edges'] magedges = p_counts['MR_BIN_EDGES'].data['edges'] sizeedges = p_counts['R50_KPC_BIN_EDGES'].data['edges'] ratio_baseline_masked = pickle.load(open(gz_path+'local_ratio_baseline_masked.pkl','rb')) ratio_baseline_fit_masked = ma.array(ratio_baseline_fit,mask=ratio_baseline_masked.mask) kernel = np.ones((kernel_size,kernel_size),dtype=int) convarr = np.logical_not(ratio_baseline_masked.mask) bw = convolve2d(np.logical_not(ratio_baseline_masked.mask).astype(int), kernel,mode='same').astype(bool).astype(int) * -1 fig = plt.figure(4) fig.clf() ax = fig.add_subplot(111) # Plot the best fit function as a semitransparent layer pfit, pfit_err = pickle.load(file(fits_path+'ratio_baseline_fit.pickle', 'r')) magbinsplot = np.linspace(magbins[0],magbins[-1],fitbins) sizebinsplot = np.linspace(sizebins[0],sizebins[-1],fitbins) fitarray_fn = ratio_function(pfit, magbinsplot, sizebinsplot) fit_extent=(magedges[0],magedges[-1],sizeedges[0],sizeedges[-1]) imf = ax.imshow(fitarray_fn, alpha=1.0, extent = fit_extent, vmin = -2., vmax = 2., interpolation='nearest', origin='lower') cb = plt.colorbar(imf) cb.set_label(r'log$_{10}(n_{el}/n_{sp})$',fontsize=20) # Plot the local masked baseline relation as opaque layer masked_extent = fit_extent cmap = cm.jet cmap.set_bad(alpha=0.0) im = ax.imshow(ratio_baseline_masked, alpha=0.5, extent = masked_extent, vmin = -2., vmax=2., interpolation='nearest',origin='lower') # Plot the outline of the local region. # This plots the contour, but not in the right region (or quite the right size) if plot_contour: cont = plt.contour(magbins, sizebins, bw, levels = [-1], color='w', linewidths=3, linestyles='dashed') zc = cont.collections[0] zc.set_color('w') SBapp = 23.0 appmag_lim = 17.0 SBlim_size = np.arange(200) / 10.0 SBlim_mag = (SBapp - cosmology.dmod_flat(np.mean(zbins))- 2.5*np.log10(6.283185*(SBlim_size/cosmology.ang_scale_flat(np.mean(zbins)))**2)) absmag_lim = appmag_lim - cosmology.dmod_flat(np.mean(zbins)) r50_lim = cosmology.ang_scale_flat(np.mean(zbins)) ax.autoscale(False) ax.plot(SBlim_mag, SBlim_size,'w--') ax.plot(np.zeros(2)+absmag_lim, np.array([sizeedges[0],sizeedges[-1]]),'w--') ax.plot(np.array([magedges[0],magedges[-1]]), np.zeros(2)+r50_lim,'w--') # Set general axes properties ax.set_xlabel(r'$M_R [mag]$',fontsize=22) ax.set_ylabel(r'$R_{50} [kpc]$',fontsize=22) ax.set_aspect('auto') rc(('xtick','ytick'), labelsize=12) plt.show() return None
def create_binned_data(min_classifications=20, #min_prob=0.8, zmin = 0.01, zmax = 0.16, zstep = 0.01, magmin = -24, magmax = -16, mag_numbins = 20, sizemin = 0, sizemax = 15, size_numbins = 20, plot=False ): p = pyfits.open(gz2both_data_file) gzdata = p[1].data # Find galaxies with sufficient classifications on bulge prominence question taskcount = gzdata['t05_bulge_prominence_total_weight'] > min_classifications bulge = gzdata[taskcount] print '' print '%s bulge galaxies above threshold'%len(bulge) print '' bulgestat = compute_wbp(bulge) lobulge = bulge[bulgestat < 0.5] hibulge = bulge[bulgestat >= 0.5] datalist = [lobulge, hibulge] namelist = ['lobulge','hibulge'] if plot: fig = plt.figure(1,(14,8)) fig.clf() for index, (mdata, mname) in enumerate(zip(datalist,namelist)): redshift = mdata['REDSHIFT'] mr = mdata['PETROMAG_MR'] r50_kpc = mdata['PETROR50_R_KPC'] r90 = mdata['PETROR90_R'] # Mask the data where no values exist redshift_mask = np.isfinite(redshift) # Add masks for magnitude, size, and surface brightness limits dmod = cosmology.dmod_flat(redshift[redshift_mask]) ang_scale = cosmology.ang_scale_flat(redshift[redshift_mask]) absmag_lim = 17.77 - dmod surfacebrightness_app_lim = 23.0 r90_kpc = r90[redshift_mask] * ang_scale magnitude_mask = mr[redshift_mask] > (absmag_lim - 1.0) size_mask = r90_kpc < (3.0 * ang_scale) surfacebrightness_mask = (mr[redshift_mask] + dmod + 2.5*np.log10(6.283185*(r50_kpc[redshift_mask]/ang_scale)**2)) > (surfacebrightness_app_lim - 1.0) totalmask = magnitude_mask | size_mask | surfacebrightness_mask print '%s galaxies removed from %s sample due to magnitude cutoff'%(np.sum(magnitude_mask.astype(int)),mname) print '%s galaxies removed from %s sample due to angular size cutoff'%(np.sum(size_mask.astype(int)),mname) print '%s galaxies removed from %s sample due to surface brightness cutoff'%(np.sum(surfacebrightness_mask.astype(int)),mname) print '%s percent of the total'%(np.sum(totalmask.astype(float))/len(redshift_mask) * 100) print ' ' z_masked = redshift[redshift_mask] m_masked = mr[redshift_mask] r_masked = r50_kpc[redshift_mask] zbins = np.arange(zmin, zmax, zstep) magbins = np.linspace(magmin, magmax, mag_numbins) sizebins = np.linspace(sizemin, sizemax, size_numbins) h, edges = np.histogramdd((z_masked, m_masked, r_masked),bins=(zbins,magbins,sizebins)) if plot: ax = fig.add_subplot(1,2,index) imarr = np.squeeze(h[3:4,:,:]) # Pick an example redshift range to slice on im = ax.imshow(imarr, extent=(magmin,magmax,sizemin,sizemax), interpolation="nearest", origin='lower') ax.set_title(mname) ax.set_xlabel(r'$M_R [mag]$') ax.set_ylabel(r'$R_{50} [kpc]$') ax.set_aspect('auto') cb = plt.colorbar(im) ax.set_xlim(min(magbins),max(magbins)) ax.set_ylim(min(sizebins),max(sizebins)) edges_redshift = edges[0] edges_mag = edges[1] edges_size = edges[2] centers_redshift = edges_redshift[:-1] + (edges_redshift[1]-edges_redshift[0])/2. centers_mag = edges_mag[:-1] + (edges_mag[1]-edges_mag[0])/2. centers_size = edges_size[:-1] + (edges_size[1]-edges_size[0])/2. col1_edge = pyfits.Column(name = 'edges', format='E', array=edges_redshift) col2_edge = pyfits.Column(name = 'edges', format='E', array=edges_mag) col3_edge = pyfits.Column(name = 'edges', format='E', array=edges_size) col1_centers = pyfits.Column(name = 'centers', format='E', array=centers_redshift) col2_centers = pyfits.Column(name = 'centers', format='E', array=centers_mag) col3_centers = pyfits.Column(name = 'centers', format='E', array=centers_size) primary_hdu = pyfits.PrimaryHDU(h) hdulist = pyfits.HDUList([primary_hdu]) tb1_hdu = pyfits.new_table(pyfits.ColDefs([col1_edge])) tb1_hdu.name = 'REDSHIFT_BIN_EDGES' tb2_hdu = pyfits.new_table(pyfits.ColDefs([col2_edge])) tb2_hdu.name = 'MR_BIN_EDGES' tb3_hdu = pyfits.new_table(pyfits.ColDefs([col3_edge])) tb3_hdu.name = 'R50_KPC_BIN_EDGES' tb4_hdu = pyfits.new_table(pyfits.ColDefs([col1_centers])) tb4_hdu.name = 'REDSHIFT_BIN_CENTERS' tb5_hdu = pyfits.new_table(pyfits.ColDefs([col2_centers])) tb5_hdu.name = 'MR_BIN_CENTERS' tb6_hdu = pyfits.new_table(pyfits.ColDefs([col3_centers])) tb6_hdu.name = 'R50_KPC_BIN_CENTERS' hdulist.append(tb1_hdu) hdulist.append(tb2_hdu) hdulist.append(tb3_hdu) hdulist.append(tb4_hdu) hdulist.append(tb5_hdu) hdulist.append(tb6_hdu) hdulist.writeto(fits_path+'%s_'%mname+'binned_counts.fits',clobber=True) p.close() return None