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
예제 #2
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
예제 #5
0
    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([])
예제 #6
0
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)