示例#1
0
def select_objects():
    from grizli.pipeline import photoz
    import numpy as np

    total_flux = 'flux_auto_fix'
    total_flux = 'flux_auto'  # new segmentation masked SEP catalogs
    object_only = False

    self, cat, zout = photoz.eazy_photoz(root,
                                         object_only=object_only,
                                         apply_prior=False,
                                         beta_prior=True,
                                         aper_ix=2,
                                         force=True,
                                         get_external_photometry=False,
                                         compute_residuals=False,
                                         total_flux=total_flux)

    if False:
        args = np.load('fit_args.npy', allow_pickle=True)[0]
        phot_obj = photoz.EazyPhot(self,
                                   grizli_templates=args['t0'],
                                   zgrid=self.zgrid,
                                   apcorr=self.idx * 0. + 1)

    flux = self.cat[total_flux] * 1.
    hmag = 23.9 - 2.5 * np.log10(cat['f160w_tot_1'])

    # Reddest HST band
    lc_clip = self.lc * 1
    lc_clip[self.lc > 1.55e4] = 0  # in case ground-based / WISE red band
    ixb = np.argmax(lc_clip)
    sn_red = self.cat[self.flux_columns[ixb]] / self.cat[self.err_columns[ixb]]

    grad = np.gradient(self.zgrid)
    cumpz = np.cumsum(self.pz * grad, axis=1)
    cumpz = (cumpz.T / cumpz[:, -1]).T

    chi2 = (self.chi_best / self.nusefilt)

    iz6 = np.where(self.zgrid > 6.0)[0][0]
    iz7 = np.where(self.zgrid > 7)[0][0]
    iz8 = np.where(self.zgrid > 8)[0][0]
    iz9 = np.where(self.zgrid > 9)[0][0]

    highz_sel = (hmag < 27.5)  #& (self.cat['class_valid'] > 0.8)
    #highz_sel |= (cumpz[:,iz6] < 0.3) & (self.cat['flux_radius'] > 2.5)
    #highz_sel &= (self.cat['flux_radius'] > 2.5)
    highz_sel &= chi2 < 3
    highz_sel &= (sn_red > 5)
    highz_sel &= self.nusefilt >= 3

    flux_ratio = cat['f160w_flux_aper_3'] / cat['f160w_flux_aper_0']
    flux_ratio /= cat.meta['APER_3']**2 / cat.meta['APER_0']**2

    if False:
        sel = highz_sel
        so = np.argsort(cumpz[sel, iz7])
        ids = self.cat['id'][sel][so]
        i = -1
        so = np.argsort(flux_ratio[sel])[::-1]
        ids = self.cat['id'][sel][so]
        i = -1

    highz_sel &= (cumpz[:, iz6] > 0) & (flux_ratio < 0.45) & (
        (cumpz[:, iz6] < 0.3) | (cumpz[:, iz7] < 0.3) |
        (((cumpz[:, iz8] < 0.4) | (cumpz[:, iz9] < 0.5)) & (flux_ratio < 0.5)))

    # Big objects likely diffraction spikes
    # big = (self.cat['flux_radius'] > 10)
    # highz_sel &= ~big
    #flux_ratio = self.cat['flux_aper_0']/self.cat['flux_aper_2']

    sel = highz_sel
    so = np.argsort(hmag[sel])
    ids = self.cat['id'][sel][so]
    i = -1

    # Red
    uv = -2.5 * np.log10(zout['restU'] / zout['restV'])
    red_sel = ((zout['z160'] > 1.) & (uv > 1.5)) | ((zout['z160'] > 1.5) &
                                                    (uv > 1.1))
    red_sel &= (self.zbest < 4) & (hmag < 22)  # & (~hmag.mask)
    red_sel &= (zout['mass'] > 10**10.5)  #& (self.cat['class_valid'] > 0.8)
    red_sel &= (self.cat['flux_radius'] > 2.5)
    red_sel &= (zout['restV'] / zout['restV_err'] > 3)
    red_sel &= (chi2 < 3)
    #red_sel &= (sn_red > 20)

    sel = red_sel

    so = np.argsort(hmag[sel])
    ids = self.cat['id'][sel][so]
    i = -1

    ds9 = None

    for j in self.idx[sel][so]:
        id_j, ra, dec = self.cat['id', 'ra', 'dec'][j]

        # Photo-z
        fig, data = self.show_fit(id_j, ds9=ds9, show_fnu=True)  #highz_sel[j])
        lab = '{0} {1}\n'.format(root, id_j)
        lab += 'H={0:.1f} z={1:.1f}\n'.format(hmag[j], self.zbest[j])
        lab += 'U-V={0:.1f}, logM={1:4.1f}'.format(uv[j],
                                                   np.log10(zout['mass'][j]))

        ax = fig.axes[0]
        ax.text(0.95,
                0.95,
                lab,
                ha='right',
                va='top',
                transform=ax.transAxes,
                fontsize=9,
                bbox=dict(facecolor='w', edgecolor='None', alpha=0.5))
        yl = ax.get_ylim()
        ax.set_ylim(yl[0], yl[1] * 1.1)

        fig.savefig('{0}_{1:05d}.eazy.png'.format(root, id_j), dpi=70)
        plt.close()

        # Cutout
        #from grizli_aws.aws_drizzle import drizzle_images

        #rgb_params = {'output_format': 'png', 'output_dpi': 75, 'add_labels': False, 'show_ir': False, 'suffix':'.rgb'}
        rgb_params = None

        #aws_bucket = 's3://grizli/SelectedObjects/'
        aws_bucket = None

        label = '{0}_{1:05d}'.format(root, id_j)
        if not os.path.exists('{0}.rgb.png'.format(label)):
            drizzle_images(label=label,
                           ra=ra,
                           dec=dec,
                           pixscale=0.06,
                           size=8,
                           pixfrac=0.8,
                           theta=0,
                           half_optical_pixscale=False,
                           filters=[
                               'f160w', 'f814w', 'f140w', 'f125w', 'f105w',
                               'f110w', 'f098m', 'f850lp', 'f775w', 'f606w',
                               'f475w'
                           ],
                           remove=False,
                           rgb_params=rgb_params,
                           master='grizli-jan2019',
                           aws_bucket=aws_bucket)

        show_all_thumbnails(label=label,
                            filters=[
                                'f775w', 'f814w', 'f098m', 'f105w', 'f110w',
                                'f125w', 'f140w', 'f160w'
                            ],
                            scale_ab=np.clip(hmag[j], 19, 22),
                            close=True)
def auto_run(root='j023507-040202'):

    import os
    import matplotlib.pyplot as plt

    from grizli import utils
    from grizli.pipeline import auto_script, photoz
    utils.set_warnings()

    tab = utils.GTable.gread('{0}_footprint.fits'.format(root))

    HOME_PATH = os.getcwd()

    auto_script.VALID_FILTERS = [
        'F098M', 'F105W', 'F110W', 'F125W', 'F127M', 'F139M', 'F140W', 'F153M',
        'F160W', 'F410M', 'F435W', 'F438W', 'F439W', 'F450W', 'F467M', 'F475W',
        'F475X', 'F547M', 'F550M', 'F555W', 'F569W', 'F600LP', 'F606W',
        'F621M', 'F622W', 'F625W', 'F675W', 'F689M', 'F702W', 'F763M', 'F775W',
        'F791W', 'F814W', 'F845M', 'F850LP', 'F350LP'
    ]

    IS_PARALLEL = utils.column_string_operation(
        tab['proposal_pi'], 'alkan', method='count', logical='or').sum() > 0

    auto_script.go(root=root,
                   maglim=[19, 23],
                   HOME_PATH=HOME_PATH,
                   inspect_ramps=False,
                   manual_alignment=False,
                   is_parallel_field=IS_PARALLEL,
                   reprocess_parallel=False,
                   only_preprocess=True,
                   run_extractions=False,
                   run_fit=False,
                   s3_sync='cp',
                   fine_radec=None,
                   combine_all_filters=False,
                   gaia_by_date=True,
                   align_simple=False,
                   align_clip=100,
                   master_radec=None,
                   is_dash=False,
                   run_parse_visits=True,
                   reference_wcs_filters=[
                       'F160W', 'F140W', 'F125W', 'F105W', 'F110W', 'F098M',
                       'F814W', 'F850LP', 'F606W', 'F435W'
                   ])

    plt.ioff()
    fig = auto_script.field_rgb(root=root, HOME_PATH=HOME_PATH, xsize=18)
    plt.close(fig)

    # Photo-z
    try:
        out = photoz.eazy_photoz(root,
                                 object_only=False,
                                 force=True,
                                 aper_ix=1,
                                 sys_err=0.05,
                                 apply_prior=False,
                                 beta_prior=True,
                                 external_limits=3,
                                 external_sys_err=0.3)
    except:
        pass
示例#3
0
文件: photoz.py 项目: gbrammer/grizli
def select_objects():
    from grizli.pipeline import photoz
    import numpy as np
    
    total_flux = 'flux_auto_fix'
    total_flux = 'flux_auto' # new segmentation masked SEP catalogs
    
    self, cat, zout = photoz.eazy_photoz(root, object_only=False, apply_prior=False, beta_prior=True, aper_ix=1, force=True, get_external_photometry=False, compute_residuals=False, total_flux=total_flux)

    flux = self.cat[total_flux]*1.
    hmag = 23.9-2.5*np.log10(cat['f160w_tot_2'])

    # Reddest HST band
    lc_clip = self.lc*1
    lc_clip[self.lc > 1.55e4] = 0 # in case ground-based / WISE red band
    ixb = np.argmax(lc_clip)
    sn_red = self.cat[self.flux_columns[ixb]]/self.cat[self.err_columns[ixb]]

    grad = np.gradient(self.zgrid)
    cumpz = np.cumsum(self.pz*grad, axis=1); cumpz = (cumpz.T/cumpz[:,-1]).T

    chi2 = (self.chi_best / self.nusefilt)

    iz6 = np.where(self.zgrid > 6.0)[0][0]
    iz7 = np.where(self.zgrid > 7)[0][0]
    iz8 = np.where(self.zgrid > 8)[0][0]
    iz9 = np.where(self.zgrid > 9)[0][0]

    highz_sel = (hmag < 27.5) & (self.cat['class_valid'] > 0.8)
    #highz_sel |= (cumpz[:,iz6] < 0.3) & (self.cat['flux_radius'] > 2.5) 
    #highz_sel &= (self.cat['flux_radius'] > 2.5) 
    highz_sel &= chi2 < 3
    highz_sel &= (sn_red > 5)
    highz_sel &= self.nusefilt >= 3
    
    flux_ratio = (cat['f160w_flux_aper_3'] - cat['f160w_bkg_aper_3'])/(cat['f160w_flux_aper_0'] - cat['f160w_bkg_aper_0'])
    flux_ratio /= cat.meta['APER_3']**2/cat.meta['APER_0']**2
    
    if False:
        sel = highz_sel
        so = np.argsort(cumpz[sel,iz7]); ids = self.cat['id'][sel][so]; i=-1
        so = np.argsort(flux_ratio[sel])[::-1]; ids = self.cat['id'][sel][so]; i=-1
        
    highz_sel &= (cumpz[:,iz6] > 0) & (flux_ratio < 0.45) & ((cumpz[:,iz6] < 0.3) | (cumpz[:,iz7] < 0.3) | (((cumpz[:,iz8] < 0.4) |  (cumpz[:,iz9] < 0.5)) & (flux_ratio < 0.5))) 

    # Big objects likely diffraction spikes
    # big = (self.cat['flux_radius'] > 10)
    # highz_sel &= ~big
    #flux_ratio = self.cat['flux_aper_0']/self.cat['flux_aper_2']

    sel = highz_sel
    so = np.argsort(hmag[sel]); ids = self.cat['id'][sel][so]; i=-1

    # Red 
    uv = -2.5*np.log10(zout['restU']/zout['restV'])
    red_sel = ((zout['z160'] > 1.) & (uv > 1.5)) | ((zout['z160'] > 1.5) & (uv > 1.1))
    red_sel &= (self.zbest < 4) & (hmag < 22)# & (~hmag.mask) 
    red_sel &= (zout['mass'] > 10**10.5) #& (self.cat['class_valid'] > 0.8)
    red_sel &= (self.cat['flux_radius'] > 2.5)
    red_sel &= (zout['restV']/zout['restV_err'] > 3)
    red_sel &= (chi2 < 3)
    #red_sel &= (sn_red > 20)

    sel = red_sel

    so = np.argsort(hmag[sel]); ids = self.cat['id'][sel][so]; i=-1
    
    ds9 = None
    
    for j in self.idx[sel][so]:
        id_j, ra, dec = self.cat['id', 'ra', 'dec'][j]

        # Photo-z
        fig, data = self.show_fit(id_j, ds9=ds9, show_fnu=True) #highz_sel[j])    
        lab = '{0} {1}\n'.format(root, id_j)
        lab += 'H={0:.1f} z={1:.1f}\n'.format(hmag[j], self.zbest[j])
        lab += 'U-V={0:.1f}, logM={1:4.1f}'.format(uv[j], np.log10(zout['mass'][j]))

        ax = fig.axes[0]
        ax.text(0.95, 0.95, lab, ha='right', va='top', transform=ax.transAxes, fontsize=9, bbox=dict(facecolor='w', edgecolor='None', alpha=0.5))
        yl = ax.get_ylim()
        ax.set_ylim(yl[0], yl[1]*1.1)

        fig.savefig('{0}_{1:05d}.eazy.png'.format(root, id_j), dpi=70)
        plt.close()

        # Cutout
        #from grizli_aws.aws_drizzle import drizzle_images
        
        #rgb_params = {'output_format': 'png', 'output_dpi': 75, 'add_labels': False, 'show_ir': False, 'suffix':'.rgb'}
        rgb_params = None

        #aws_bucket = 's3://grizli/SelectedObjects/'
        aws_bucket = None

        label = '{0}_{1:05d}'.format(root, id_j)
        if not os.path.exists('{0}.rgb.png'.format(label)):
            drizzle_images(label=label, ra=ra, dec=dec, pixscale=0.06, size=8, pixfrac=0.8, theta=0, half_optical_pixscale=False, filters=['f160w', 'f814w', 'f140w', 'f125w', 'f105w', 'f110w', 'f098m', 'f850lp', 'f775w', 'f606w', 'f475w'], remove=False, rgb_params=rgb_params, master='grizli-jan2019', aws_bucket=aws_bucket)

        show_all_thumbnails(label=label, filters=['f775w','f814w','f098m','f105w','f110w','f125w','f140w','f160w'], scale_ab=np.clip(hmag[j],19,22), close=True)
示例#4
0
def run_photoz(root='', k_hawki=True):
    # xxxx
    from grizli import utils
    from grizli.pipeline import photoz
    import numpy as np

    if k_hawki:
        kfilt = '269'  # HAWKI
    else:
        kfilt = '259'  # VISTA

    extra_translate = {
        'HSCg_flux': 'F314',
        'HSCg_err': 'E314',
        'HSCr_flux': 'F315',
        'HSCr_err': 'E315',
        'HSCi_flux': 'F316',
        'HSCi_err': 'E316',
        'HSCz_flux': 'F317',
        'HSCz_err': 'E317',
        'HSCy_flux': 'F318',
        'HSCy_err': 'E318',
        'HSCn816_flux': 'F319',
        'HSCn816_err': 'E319',
        'ks_flux': 'F' + kfilt,
        'ks_err': 'E' + kfilt,
        'zMosaic3_flux_aper': 'F297',  # DECam z
        'zMosaic3_fluxerr_aper': 'E297',
        'r90prime_flux_aper': 'F295',  # DECam r
        'r90prime_fluxerr_aper': 'E295'
    }

    if True:
        extra = {
            'TEMPLATES_FILE':
            'templates/fsps_full_2019/xfsps_QSF_12_v3.SB.param'
        }

        new_wave = np.hstack([
            utils.log_zgrid([100, 2.e4], 1000. / 3.e5),
            utils.log_zgrid([2.e4, 1.e8], 1e4 / 3.e5)
        ])
        extra['RESAMPLE_WAVE'] = new_wave
        extra['SYS_ERR'] = 0.03
    else:
        extra = {}

    self, cat, zout = photoz.eazy_photoz(root + '_irac',
                                         object_only=False,
                                         apply_prior=False,
                                         beta_prior=True,
                                         aper_ix=1,
                                         force=True,
                                         get_external_photometry=False,
                                         compute_residuals=False,
                                         total_flux='flux_auto',
                                         extra_params=extra,
                                         extra_translate=extra_translate,
                                         zpfile='zphot.zeropoint')

    return self, cat, zout