Exemplo n.º 1
0
def add_physical_sizes(sname='final'):
    p = pyfits.open(data_path + 'gz2sample_%s_kcorrect.fits' % sname)
    d = p[1].data
    r50_arcsec = d.field('petroR50_r')
    redshift = d.field('redshift')
    r50_kpc = redshift * 0.0
    zmask = notNaN(redshift)
    # H0=70 angular scale
    angscale = cosmology.ang_scale_flat(redshift[zmask]).astype(N.float32)
    r50_kpc[zmask] = (r50_arcsec[zmask] * angscale)
    oldcols = p[1].columns
    cols = []
    for c in oldcols:
        name = c.name
        cols.append(
            pyfits.Column(name=c.name, format=c.format, array=d.field(c.name)))
    cols.append(pyfits.Column(name='PETROR50_R_KPC', format='E',
                              array=r50_kpc))
    tbhdu = pyfits.new_table(cols)
    tbhdu.name = 'data'
    outfile = data_path + 'gz2sample_%s_abs.fits' % sname
    file_exists = os.path.isfile(outfile)
    if file_exists:
        os.remove(outfile)
    tbhdu.writeto(outfile)
    p.close()
Exemplo n.º 2
0
def add_physical_sizes(sname='final'):
    p = pyfits.open(data_path+'gz2sample_%s_kcorrect.fits'%sname)
    d = p[1].data
    r50_arcsec = d.field('petroR50_r')
    redshift = d.field('redshift')
    r50_kpc = redshift * 0.0
    zmask = notNaN(redshift)
    # H0=70 angular scale
    angscale = cosmology.ang_scale_flat(redshift[zmask]).astype(N.float32)
    r50_kpc[zmask] = (r50_arcsec[zmask] * angscale)
    oldcols = p[1].columns
    cols = []
    for c in oldcols:
	name = c.name
	cols.append(pyfits.Column(name=c.name, format=c.format,
				  array=d.field(c.name)))
    cols.append(pyfits.Column(name='PETROR50_R_KPC', format='E',
			      array=r50_kpc))
    tbhdu=pyfits.new_table(cols)
    tbhdu.name = 'data'
    outfile = data_path+'gz2sample_%s_abs.fits'%sname
    file_exists = os.path.isfile(outfile)
    if file_exists:
	os.remove(outfile)
    tbhdu.writeto(outfile)
    p.close()
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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