Exemple #1
0
def resamp_img(band_id, sub_z, sub_ra, sub_dec):

	ii = np.int(band_id)
	zn = len(sub_z)
	for k in range(zn):
		ra_g = sub_ra[k]
		dec_g = sub_dec[k]
		z_g = sub_z[k]
		Da_g = Test_model.angular_diameter_distance(z_g).value
		try:
			#data = fits.getdata(load + 'random_cat/mask_img/random_mask_%s_ra%.3f_dec%.3f_z%.3f.fits' % (band[ii], ra_g, dec_g, z_g), header = True)
			data = fits.getdata(load + 'random_cat/mask_no_dust/random_mask_%s_ra%.3f_dec%.3f_z%.3f.fits' % (band[ii], ra_g, dec_g, z_g), header = True)
			img = data[0]
			cx0 = data[1]['CRPIX1']
			cy0 = data[1]['CRPIX2']
			RA0 = data[1]['CRVAL1']
			DEC0 = data[1]['CRVAL2']

			wcs = awc.WCS(data[1])
			cx, cy = wcs.all_world2pix(ra_g*U.deg, dec_g*U.deg, 1)

			Angur = (R0 * rad2asec / Da_g)
			Rp = Angur / pixel
			L_ref = Da_ref * pixel / rad2asec
			L_z0 = Da_g * pixel / rad2asec
			b = L_ref / L_z0

			f_goal = flux_recal(img, z_g, z_ref)
			ix0 = np.int(cx0 / b)
			iy0 = np.int(cy0 / b)

			if b > 1:
				resam, xn, yn = sum_samp(b, b, f_goal, cx, cy)
			else:
				resam, xn, yn = down_samp(b, b, f_goal, cx, cy)

			xn = np.int(xn)
			yn = np.int(yn)
			x0 = resam.shape[1]
			y0 = resam.shape[0]

			keys = ['SIMPLE','BITPIX','NAXIS','NAXIS1','NAXIS2','CRPIX1','CRPIX2','CENTER_X','CENTER_Y',
					'CRVAL1','CRVAL2','CENTER_RA','CENTER_DEC','ORIGN_Z', 'P_SCALE']
			value = ['T', 32, 2, x0, y0, ix0, iy0, xn, yn, RA0, DEC0, ra_g, dec_g, z_g, pixel]
			ff = dict(zip(keys,value))
			fil = fits.Header(ff)
			#fits.writeto(load + 'random_cat/resample_img/rand-resamp-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % 
			#	(band[ii], ra_g, dec_g, z_g), resam, header = fil, overwrite = True)
			fits.writeto(load + 'random_cat/resamp_no_dust/rand-resamp-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % 
				(band[ii], ra_g, dec_g, z_g), resam, header = fil, overwrite = True)

		except FileNotFoundError:
			continue
	return
def spec_resamp_B(band_id, z_set, ra_set, dec_set):
	ii = np.int(band_id)
	zn = len(z_set)

	print('Now band is %s' % band[ii])
	for k in range(zn):
		ra_g, dec_g, z_g = ra_set[k], dec_set[k], z_set[k]
		Da_g = Test_model.angular_diameter_distance(z_g).value

		# use star catalog dr12
		data_B = fits.getdata(load + 
			'mask_data/B_plane/1.5sigma/B_mask_data_%s_ra%.3f_dec%.3f_z%.3f.fits'%(band[ii], ra_g, dec_g, z_g), header = True)
		img_B = data_B[0]

		head_mean = data_B[1]
		cx0 = data_B[1]['CRPIX1']
		cy0 = data_B[1]['CRPIX2']
		RA0 = data_B[1]['CRVAL1']
		DEC0 = data_B[1]['CRVAL2']
		wcs = awc.WCS(data_B[1])
		cx, cy = wcs.all_world2pix(ra_g*U.deg, dec_g*U.deg, 1)

		Angur = (R0 * rad2asec/Da_g)
		Rp = Angur/pixel
		L_ref = Da_ref * pixel / rad2asec
		L_z0 = Da_g*pixel/rad2asec
		b = L_ref/L_z0
		Rref = (R0*rad2asec/Da_ref)/pixel

		f_goal = flux_recal(img_B, z_g, z_ref)
		ix0 = np.int(cx0/b)
		iy0 = np.int(cy0/b)

		if b > 1:
			resam, xn, yn = sum_samp(b, b, f_goal, cx, cy)
		else:
			resam, xn, yn = down_samp(b, b, f_goal, cx, cy)

		xn = np.int(xn)
		yn = np.int(yn)
		x0 = resam.shape[1]
		y0 = resam.shape[0]

		keys = ['SIMPLE','BITPIX','NAXIS','NAXIS1','NAXIS2','CRPIX1','CRPIX2','CENTER_X','CENTER_Y',
				'CRVAL1','CRVAL2','CENTER_RA','CENTER_DEC','ORIGN_Z', 'P_SCALE']
		value = ['T', 32, 2, x0, y0, ix0, iy0, xn, yn, RA0, DEC0, ra_g, dec_g, z_g, pixel]
		ff = dict(zip(keys,value))
		fil = fits.Header(ff)

		fits.writeto(load + 
			'resample/resam_B/frameB-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % (band[ii], ra_g, dec_g, z_g), resam, header = fil, overwrite=True)

	return
Exemple #3
0
def mock_resamp(band_id, sub_z, sub_ra, sub_dec):
	kk = np.int(band_id)
	zn = len(sub_z)

	for k in range(zn):
		ra_g = sub_ra[k]
		dec_g = sub_dec[k]
		z_g = sub_z[k]
		Da_g = Test_model.angular_diameter_distance(z_g).value

		data = fits.open( load + 'mock_ccd/mock_frame/mock-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % (band[kk], ra_g, dec_g, z_g) )
		img = data[0].data
		cx0, cy0 = data[0].header['CRPIX1'], data[0].header['CRPIX2']
		RA0, DEC0 = data[0].header['CRVAL1'], data[0].header['CRVAL2']
		cx, cy = data[0].header['CENTER_X'], data[0].header['CENTER_Y']

		ref_d = fits.open( d_file + 'frame-%s-ra%.3f-dec%.3f-redshift%.3f.fits.bz2' % (band[kk], ra_g, dec_g, z_g) )
		NMGY = ref_d[0].header['NMGY']
		img = img * NMGY # so the resample image have change DN to nmaggy

		L_ref = Da_ref * pixel / rad2asec
		L_z0 = Da_g * pixel / rad2asec
		b = L_ref / L_z0

		f_goal = flux_recal(img, z_g, z_ref) # scale all mock to z_ref
		ix0 = np.int(cx0 / b)
		iy0 = np.int(cy0 / b)
		if b > 1:
			resam, xn, yn = sum_samp(b, b, f_goal, cx, cy)
		else:
			resam, xn, yn = down_samp(b, b, f_goal, cx, cy)
		xn = np.int(xn)
		yn = np.int(yn)
		x0 = resam.shape[1]
		y0 = resam.shape[0]

		keys = ['SIMPLE','BITPIX','NAXIS','NAXIS1','NAXIS2','CRPIX1','CRPIX2','CENTER_X','CENTER_Y',
				'CRVAL1','CRVAL2','CENTER_RA','CENTER_DEC','ORIGN_Z', 'P_SCALE']
		value = ['T', 32, 2, x0, y0, ix0, iy0, xn, yn, RA0, DEC0, ra_g, dec_g, z_g, pixel]
		ff = dict(zip(keys,value))
		fil = fits.Header(ff)
		fits.writeto(load + 
			'mock_ccd/mock_resamp/mock_resam-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % (band[kk], ra_g, dec_g, z_g), resam, header = fil, overwrite=True)
Exemple #4
0
def resamp_test():
	# SB profile measurement
	NMGY = 5e-3 # mean value of the data sample
	gain = 4.735  # for r band (mean value)
	V_dark =  1.2 # for r band (mean value)
	exp_time = 54 # exposure time, in unit second
	bins, Nz = 65, len(set_z)

	mock_flux = pds.read_csv(load + 'mock_flux_data_r_band.csv')
	mock_SB = pds.read_csv(load + 'mock_SB_data_r_band.csv')
	ins_SB = pds.read_csv(load + 'mock_intrinsic_SB_r_band.csv')
	r = ins_SB['r']
	INS_SB = ins_SB['0.250']
	f_SB = interp.interp1d(r, INS_SB, kind = 'cubic')

	R_t = np.zeros((Nz, bins), dtype = np.float)
	SB_t = np.zeros((Nz, bins), dtype = np.float)
	err_up = np.zeros((Nz, bins), dtype = np.float)
	err_botm = np.zeros((Nz, bins), dtype = np.float)

	R_s = np.zeros((Nz, bins), dtype = np.float)
	SB_s = np.zeros((Nz, bins), dtype = np.float)
	err_s_up = np.zeros((Nz, bins), dtype = np.float)
	err_s_botm = np.zeros((Nz, bins), dtype = np.float)
	R_smal, R_max = 10, 10**3.02
	for k in range(Nz):
		#data = fits.getdata(load + 'noise/noise_frame_z%.3f_ra%.3f_dec%.3f.fits' % (set_z[k], set_ra[k], set_dec[k]), header = True)
		data = fits.getdata(load + 'noise_mask/add_mask_frame_z%.3f_ra%.3f_dec%.3f.fits' % (set_z[k], set_ra[k], set_dec[k]), header = True)

		img = data[0]
		Dag = Test_model.angular_diameter_distance(set_z[k]).value
		Rp = (rad2asec / Dag) / pixel
		cenx = data[1]['CENTER_X']
		ceny = data[1]['CENTER_Y']
		Len_ref = Da_ref * pixel / rad2asec
		Len_z0 = Dag * pixel / rad2asec
		eta = Len_ref/Len_z0
		mu = 1 / eta

		N_flux = img * NMGY
		scale_img = flux_recal(N_flux, set_z[k], z_ref)
		if eta > 1:
			resamt, xn, yn = sum_samp(eta, eta, scale_img, cenx, ceny)
		else:
			resamt, xn, yn = down_samp(eta, eta, scale_img, cenx, ceny)

		xn = np.int(xn)
		yn = np.int(yn)
		Nx = resamt.shape[1]
		Ny = resamt.shape[0]
		## PS : the flux saved in resample file is in unit "nmaggy", not DN (DN is for previous files)
		keys = ['SIMPLE', 'BITPIX', 'NAXIS', 'NAXIS1', 'NAXIS2', 'CENTER_X', 'CENTER_Y', 'ORIGN_Z', 'P_SCALE']
		value = ['T', 32, 2, Nx, Ny, xn, yn, set_z[k], pixel]
		ff = dict(zip(keys,value))
		fil = fits.Header(ff)
		#fits.writeto(load + 'resamp/resamp-noise-ra%.3f-dec%.3f-redshift%.3f.fits' % (set_ra[k], set_dec[k], set_z[k]), resamt, header = fil, overwrite=True)
		fits.writeto(load + 'resamp/resamp-mask-ra%.3f-dec%.3f-redshift%.3f.fits' % (set_ra[k], set_dec[k], set_z[k]), resamt, header = fil, overwrite=True)

		Intns, Intns_r, Intns_err, Npix = light_measure(N_flux, bins, R_smal, R_max, cenx, ceny, pixel, set_z[k])
		flux0 = Intns + Intns_err
		flux1 = Intns - Intns_err
		SB = 22.5 - 2.5 * np.log10(Intns) + 2.5 * np.log10(pixel**2)
		SB = SB - 10 * np.log10( (1 + set_z[k]) / (1 + z_ref) )
		SB0 = 22.5 - 2.5 * np.log10(flux0) + 2.5 * np.log10(pixel**2)
		SB1 = 22.5 - 2.5 * np.log10(flux1) + 2.5 * np.log10(pixel**2)
		err0 = SB - SB0
		err1 = SB1 - SB
		R_t[k, :], SB_t[k, :], err_up[k, :], err_botm[k, :] = Intns_r, SB, err0, err1

		Intns, Intns_r, Intns_err, Npix = light_measure(resamt, bins, R_smal, R_max, xn, yn, pixel, z_ref)
		flux0 = Intns + Intns_err
		flux1 = Intns - Intns_err
		SB = 22.5 - 2.5 * np.log10(Intns) + 2.5 * np.log10(pixel**2)
		SB0 = 22.5 - 2.5 * np.log10(flux0) + 2.5 * np.log10(pixel**2)
		SB1 = 22.5 - 2.5 * np.log10(flux1) + 2.5 * np.log10(pixel**2)
		err0 = SB - SB0
		err1 = SB1 - SB
		R_s[k, :], SB_s[k, :], err_s_up[k, :], err_s_botm[k, :] = Intns_r, SB, err0, err1

	plt.figure(figsize = (20, 24))
	gs = gridspec.GridSpec(5, 4)
	for k in range(Nz):

		Dag = Test_model.angular_diameter_distance(set_z[k]).value
		id_nan = np.isnan(SB_t[k,:])
		ivx = id_nan == False
		ss_R = R_t[k, ivx]
		ss_SB = SB_t[k, ivx]
		iux = ( ss_R > np.min(r) ) & ( ss_R < np.max(r) )
		ddsb = ss_SB[iux] - f_SB( ss_R[iux] )
		ddsr = ss_R[iux]
		std = np.nanstd(ddsb)
		aver = np.nanmean(ddsb)
		err0 = err_up[k, ivx]
		err1 = err_botm[k, ivx]
		id_nan = np.isnan(err1)
		err1[id_nan] = 100. # set a large value for show the break out errorbar

		id_nan = np.isnan(SB_s[k,:])
		ipx = id_nan == False
		tt_R = R_s[k, ipx]
		tt_SB = SB_s[k, ipx]
		iqx = ( tt_R > np.min(r) ) & ( tt_R < np.max(r) )
		ddtb = tt_SB[iqx] - f_SB( tt_R[iqx] )
		ddtr = tt_R[iqx]
		t_std = np.nanstd(ddtb)
		t_aver = np.nanmean(ddtb)
		t_err0 = err_s_up[k, ipx]
		t_err1 = err_s_botm[k, ipx]
		id_nan = np.isnan(t_err1)
		t_err1[id_nan] = 100. # set a large value for show the break out errorbar

		gs0 = gridspec.GridSpecFromSubplotSpec(5, 1, subplot_spec = gs[ k // 4, k % 4])
		ax0 = plt.subplot(gs0[:4])
		ax1 = plt.subplot(gs0[-1])

		ax0.plot(r, INS_SB, 'r-', label = '$ Intrinsic $', alpha = 0.5)
		ax0.errorbar(ss_R, ss_SB, yerr = [err0, err1], xerr = None, ls = '', fmt = 'b^', label = ' sky subtracted ', alpha = 0.5)
		ax0.errorbar(tt_R, tt_SB, yerr = [t_err0, t_err1], xerr = None, ls = '', fmt = 'gs', label = ' sky subtracted + resampled ', alpha = 0.5)

		ax0.set_xscale('log')
		ax0.set_ylabel('$SB[mag/arcsec^2]$')
		ax0.legend(loc = 1)
		ax0.set_xlim(9, 1010)
		ax0.set_ylim(19, 34)
		ax0.invert_yaxis()
		ax0.tick_params(axis = 'both', which = 'both', direction = 'in')

		bx1 = ax0.twiny()
		xtik = ax0.get_xticks()
		xtik = np.array(xtik)
		xR = xtik * 10**(-3) * rad2asec / Dag
		bx1.set_xscale('log')
		bx1.set_xticks(xtik)
		bx1.set_xticklabels(['$%.2f^{ \prime \prime }$' % uu for uu in xR])
		bx1.tick_params(axis = 'both', which = 'both', direction = 'in')
		bx1.set_xlim(ax0.get_xlim())
		ax0.set_xticks([])

		ax1.plot(ddsr, ddsb, 'b-', alpha = 0.5)
		ax1.axhline(y = 0, linestyle = '--', color = 'r', alpha = 0.5, label = '$ \Delta{SB} = 0 $')

		#ax1.errorbar(ddsr, ddsb, yerr = [err0[iux], err1[iux]], xerr = None, ls = '', fmt = 'b^', alpha = 0.5)
		ax1.plot(ddsr, ddsb, 'b-', alpha = 0.5)
		ax1.axhline(y = aver, linestyle = '--', color = 'b', alpha = 0.5)
		ax1.axhline(y = aver + std, linestyle = '--', color = 'b', alpha = 0.5)
		ax1.axhline(y = aver - std, linestyle = '--', color = 'b', alpha = 0.5)

		#ax1.errorbar(ddtr, ddtb, yerr = [t_err0[iqx], t_err1[iqx]], xerr = None, ls = '', fmt = 'gs', alpha = 0.5)
		ax1.plot(ddtr, ddtb, 'g-', alpha = 0.5)
		ax1.axhline(y = t_aver, linestyle = '--', color = 'g', alpha = 0.5)
		ax1.axhline(y = t_aver + t_std, linestyle = '-.', color = 'g', alpha = 0.5)
		ax1.axhline(y = t_aver - t_std, linestyle = '-.', color = 'g', alpha = 0.5)

		ax1.set_xlim(9, 1010)
		ax1.set_ylim(-1, 1)
		ax1.set_xscale('log')
		ax1.set_xlabel('$R[kpc]$')
		ax1.set_ylabel('$ SB_{M} - SB_{I} $')
		ax1.tick_params(axis = 'both', which = 'both', direction = 'in')

	plt.tight_layout()
	#plt.savefig('noise_resample_SB.pdf', dpi = 300)
	plt.savefig('mask_resample_SB.pdf', dpi = 300)
	plt.close()

	raise
Exemple #5
0
def stack_test():

    x0 = 2427
    y0 = 1765
    Nx = np.linspace(0, 4854, 4855)
    Ny = np.linspace(0, 3530, 3531)
    sum_grid = np.array(np.meshgrid(Nx, Ny))

    sum_array_0 = np.zeros((len(Ny), len(Nx)), dtype=np.float)
    count_array_0 = np.ones((len(Ny), len(Nx)), dtype=np.float) * np.nan
    p_count_0 = np.zeros((len(Ny), len(Nx)), dtype=np.float)

    SB_ref = []
    Ar_ref = []
    bins = 60
    for kd in range(stack_N):

        zg = z[kd]
        rag = ra[kd]
        decg = dec[kd]

        param_A = '/home/xkchen/mywork/ICL/data/SEX/default_mask_A.sex'
        out_cat = '/home/xkchen/mywork/ICL/data/SEX/default_mask_A.param'
        out_load_A = '/home/xkchen/mywork/ICL/data/SEX/result/mask_A_test.cat'

        tmp_load = '/home/xkchen/mywork/ICL/data/test_data/'
        load = '/home/xkchen/mywork/ICL/data/total_data/sample_02_03/'

        file = 'frame-r-ra%.3f-dec%.3f-redshift%.3f.fits.bz2' % (rag, decg, zg)
        data = fits.getdata(load + file, header=True)
        img = data[0]
        Head = data[1]
        wcs = awc.WCS(Head)
        Da = Test_model.angular_diameter_distance(zg).value
        Ar = rad2asec / Da
        Rp = Ar / pixel

        xt = np.linspace(0, img.shape[1] - 1, img.shape[1])
        yt = np.linspace(0, img.shape[0] - 1, img.shape[0])
        grd = np.array(np.meshgrid(xt, yt))
        cx_BCG, cy_BCG = wcs.all_world2pix(rag * U.deg, decg * U.deg, 1)

        ra_img, dec_img = wcs.all_pix2world(grd[0, :], grd[1, :], 1)
        pos = SkyCoord(ra_img, dec_img, frame='fk5', unit='deg')
        EBV = sfd(pos)
        Av = Rv * EBV * 0.86
        Al = A_wave(l_wave[2], Rv) * Av
        img1 = img * 10**(Al / 2.5)

        imgt = flux_recal(img1, zg, z_ref)
        eta = Da_ref / Da
        mu = 1 / eta
        xn, yn, resam = gen(imgt, 1, eta, cx_BCG, cy_BCG)
        xn = np.int(xn)
        yn = np.int(yn)
        if eta > 1:
            resam = resam[1:, 1:]
        elif eta == 1:
            resam = resam[1:-1, 1:-1]
        else:
            resam = resam

        ix0 = np.int(Head['CRPIX1'] * mu)
        iy0 = np.int(Head['CRPIX2'] * mu)
        RA0 = Head['CRVAL1']
        DEC0 = Head['CRVAL2']

        keys = [
            'SIMPLE', 'BITPIX', 'NAXIS', 'NAXIS1', 'NAXIS2', 'CRPIX1',
            'CRPIX2', 'CENTER_X', 'CENTER_Y', 'CRVAL1', 'CRVAL2', 'CENTER_RA',
            'CENTER_DEC', 'ORIGN_Z'
        ]
        value = [
            'T', 32, 2, resam.shape[1], resam.shape[0], ix0, iy0, xn, yn, RA0,
            DEC0, rag, decg, zg
        ]
        ff = dict(zip(keys, value))
        fil = fits.Header(ff)
        fits.writeto(tmp_load + 'frame-%s-ra%.3f-dec%.3f-redshift%.3f.fits' %
                     ('r', rag, decg, zg),
                     resam,
                     header=fil,
                     overwrite=True)

        file_source = tmp_load + 'frame-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % (
            'r', rag, decg, zg)
        cmd = 'sex ' + file_source + ' -c %s -CATALOG_NAME %s -PARAMETERS_NAME %s' % (
            param_A, out_load_A, out_cat)
        print(cmd)
        A = subpro.Popen(cmd, shell=True)
        A.wait()

        source = asc.read(out_load_A)
        Numb = np.array(source['NUMBER'][-1])
        A = np.array(source['A_IMAGE'])
        B = np.array(source['B_IMAGE'])
        chi = np.array(source['THETA_IMAGE'])
        cx = np.array(source['X_IMAGE']) - 1
        cy = np.array(source['Y_IMAGE']) - 1

        Kron = 6
        Lr = Kron * A
        Sr = Kron * B

        CX = cx * 1
        CY = cy * 1
        a = Lr * 1
        b = Sr * 1
        theta = chi * 1

        mask_A = np.ones((resam.shape[0], resam.shape[1]), dtype=np.float)
        ox = np.linspace(0, resam.shape[1] - 1, resam.shape[1])
        oy = np.linspace(0, resam.shape[0] - 1, resam.shape[0])
        basic_coord = np.array(np.meshgrid(ox, oy))
        major = a / 2
        minor = b / 2
        senior = np.sqrt(major**2 - minor**2)

        tdr = np.sqrt((CX - xn)**2 + (CY - yn)**2)
        dr00 = np.where(tdr == np.min(tdr))[0]
        for k in range(Numb):
            xc = CX[k]
            yc = CY[k]
            lr = major[k]
            sr = minor[k]
            cr = senior[k]

            set_r = np.int(np.ceil(1.2 * lr))
            la0 = np.int(xc - set_r)
            la1 = np.int(xc + set_r + 1)
            lb0 = np.int(yc - set_r)
            lb1 = np.int(yc + set_r + 1)

            if k == dr00[0]:
                continue
            else:
                phi = theta[k] * np.pi / 180
                df1 = lr**2 - cr**2 * np.cos(phi)**2
                df2 = lr**2 - cr**2 * np.sin(phi)**2
                fr = ((basic_coord[0, :][lb0:lb1, la0:la1] - xc)**2 * df1 +
                      (basic_coord[1, :][lb0:lb1, la0:la1] - yc)**2 * df2 -
                      cr**2 * np.sin(2 * phi) *
                      (basic_coord[0, :][lb0:lb1, la0:la1] - xc) *
                      (basic_coord[1, :][lb0:lb1, la0:la1] - yc))
                idr = fr / (lr**2 * sr**2)
                jx = idr < 1

                iu = np.where(jx == True)
                iv = np.ones((jx.shape[0], jx.shape[1]), dtype=np.float)
                iv[iu] = np.nan
                mask_A[lb0:lb1, la0:la1] = mask_A[lb0:lb1, la0:la1] * iv

        mirro_A = mask_A * resam

        plt.figure()
        ax = plt.subplot(111)
        ax.set_title('source mask after resample %d' % kd)
        ax.imshow(resam,
                  cmap='Greys',
                  vmin=1e-3,
                  origin='lower',
                  norm=mpl.colors.LogNorm())
        hsc.ellipses(CX, CY, w=a, h=b, rot=theta, fc='', ec='r', alpha=0.5)
        plt.xlim(0, resam.shape[1])
        plt.ylim(0, resam.shape[0])
        plt.savefig('/home/xkchen/mywork/ICL/code/source_%d.png' % kd, dpi=300)
        plt.close()

        ox = np.linspace(0, resam.shape[1] - 1, resam.shape[1])
        oy = np.linspace(0, resam.shape[0] - 1, resam.shape[0])
        oo_grd = np.array(np.meshgrid(ox, oy))
        cdr = np.sqrt((oo_grd[0, :] - xn)**2 + (oo_grd[1, :] - yn)**2)
        idd = (cdr > Rpp) & (cdr < 1.1 * Rpp)
        cut_res = mirro_A[idd]
        id_nan = np.isnan(cut_res)
        idx = np.where(id_nan == False)
        bl_array = cut_res[idx]
        back_cc = np.mean(bl_array)

        mirroA = mirro_A - back_cc
        SB2, R2, Anr2, err2 = light_measure(mirroA, bins, 1, Rpp, xn, yn,
                                            pixel, z_ref)
        SB_ = SB2[1:]
        Ar_ = Anr2[1:]
        R_ = R2[1:]
        err_ = err2[1:]
        SB_ref.append(SB_)
        Ar_ref.append(Ar_)

        la0 = np.int(y0 - yn)
        la1 = np.int(y0 - yn + resam.shape[0])
        lb0 = np.int(x0 - xn)
        lb1 = np.int(x0 - xn + resam.shape[1])

        idx = np.isnan(resam)
        idv = np.where(idx == False)
        sum_array_0[la0:la1,
                    lb0:lb1][idv] = sum_array_0[la0:la1,
                                                lb0:lb1][idv] + mirroA[idv]
        count_array_0[la0:la1, lb0:lb1][idv] = resam[idv]
        id_nan = np.isnan(count_array_0)
        id_fals = np.where(id_nan == False)
        p_count_0[id_fals] = p_count_0[id_fals] + 1
        count_array_0[la0:la1, lb0:lb1][idv] = np.nan

    ll0 = [np.min(kk / Angu_ref) for kk in Ar_ref]
    tar0 = np.min(ll0)
    ll1 = [np.max(kk / Angu_ref) for kk in Ar_ref]
    tar1 = np.max(ll1)

    tar_down = tar0 * Angu_ref
    tar_up = tar1 * Angu_ref
    inter_frac = np.logspace(np.log10(tar0), np.log10(tar1), bins)
    inter_ar = inter_frac * Angu_ref

    m_flux = np.ones((stack_N, bins), dtype=np.float) * np.nan
    for pp in range(len(SB_ref)):
        id_count = np.zeros(bins, dtype=np.float)
        tsb = SB_ref[pp]
        tar = Ar_ref[pp] / Angu_ref
        t_flux = 10**((22.5 + 2.5 * np.log10(pixel**2) - tsb) / 2.5)
        for kk in range(len(tar)):
            sub_ar = np.abs(inter_frac - tar[kk])
            id_min = np.where(sub_ar == np.min(sub_ar))[0]
            id_count[id_min[0]] = id_count[id_min[0]] + 1
        id_nuzero = id_count != 0
        id_g = np.where(id_nuzero == True)[0]
        m_flux[pp, id_g] = t_flux

    m_count = np.zeros(bins, dtype=np.float)
    inter_flux = np.zeros(bins, dtype=np.float)
    for pp in range(bins):
        sub_flux = m_flux[:, pp]
        iy = np.isnan(sub_flux)
        iv = np.where(iy == False)[0]
        m_count[pp] = len(iv)
        inter_flux[pp] = inter_flux[pp] + np.sum(sub_flux[iv])
    inter_flux = inter_flux / m_count

    id_nan = np.isnan(inter_flux)
    id_x = id_nan == False
    id_inf = np.isinf(inter_flux)
    id_y = id_inf == False
    id_zero = inter_flux == 0
    id_z = id_zero == False
    id_set = id_x & id_y & id_z

    ref_ar = inter_ar[id_set]
    ref_flux = inter_flux[id_set]
    ref_SB = 22.5 - 2.5 * np.log10(ref_flux) + 2.5 * np.log10(pixel**2)
    f_SB = interp(ref_ar, ref_SB, kind='cubic')

    mean_array_0 = sum_array_0 / p_count_0
    where_are_inf = np.isinf(mean_array_0)
    mean_array_0[where_are_inf] = np.nan
    id_zeros = np.where(p_count_0 == 0)
    mean_array_0[id_zeros] = np.nan

    SB, R, Ar, error = light_measure(mean_array_0, bins, 1, Rpp, x0, y0, pixel,
                                     z_ref)
    SB_0 = SB[1:] + 0
    R_0 = R[1:]
    Ar_0 = Ar[1:]
    err_0 = error[1:]
    Ar0 = (Ar_0 / Angu_ref) * Angu_ref

    plt.figure(figsize=(16, 8))
    gs = gridspec.GridSpec(1, 2, width_ratios=[1, 1])
    ax = plt.subplot(gs[0])
    bx = plt.subplot(gs[1])

    ax.plot(ref_ar, ref_SB, 'r-', label='$stacking \, profile$', alpha=0.5)
    ax.plot(Ar0, SB_0, 'g--', label='$stacking \, img$', alpha=0.5)

    bx.plot(Ar0[(Ar0 > tar_down * 1.01) & (Ar0 < tar_up / 1.01)],
            SB_0[(Ar0 > tar_down * 1.01) & (Ar0 < tar_up / 1.01)] -
            f_SB(Ar0[(Ar0 > tar_down * 1.01) & (Ar0 < tar_up / 1.01)]),
            'b*',
            alpha=0.5)

    ax.set_xscale('log')
    ax.set_xlabel('$R[arcsec]$')
    ax.set_ylabel('$SB[mag/arcsec^2]$')
    ax.tick_params(axis='both', which='both', direction='in')
    ax.legend(loc=1, fontsize=12)
    ax.invert_yaxis()

    bx.set_xlabel('$R[arcsec]$')
    bx.set_xscale('log')
    bx.set_ylabel('$ \Delta{SB}[mag/arcsec^2] $')
    bx.tick_params(axis='both', which='both', direction='in')

    plt.subplots_adjust(hspace=0)
    plt.tight_layout()
    plt.savefig('/home/xkchen/mywork/ICL/code/stack_test.png', dpi=300)
    plt.close()

    raise
    return
Exemple #6
0
def resamp_test():
    for kd in range(10):

        z_ref = 0.25
        Da_ref = Test_model.angular_diameter_distance(z_ref).value
        Angu_ref = (R0 / Da_ref) * rad2asec
        Rpp = Angu_ref / pixel

        bins = 50

        x0 = np.linspace(0, 2047, 2048)
        y0 = np.linspace(0, 1488, 1489)
        grd = np.array(np.meshgrid(x0, y0))
        r_star = 2 * 1.5 / pixel

        zg = z[kd]
        rag = ra[kd]
        decg = dec[kd]

        param_A = '/home/xkchen/mywork/ICL/data/SEX/default_mask_A.sex'
        out_cat = '/home/xkchen/mywork/ICL/data/SEX/default_mask_A.param'
        out_load_A = '/home/xkchen/mywork/ICL/data/SEX/result/mask_A_test.cat'

        tmp_load = '/home/xkchen/mywork/ICL/data/test_data/'
        load = '/home/xkchen/mywork/ICL/data/total_data/sample_02_03/'

        file = 'frame-r-ra%.3f-dec%.3f-redshift%.3f.fits.bz2' % (rag, decg, zg)
        data = fits.open(load + file)
        img = data[0].data
        Head = data[0].header
        wcs = awc.WCS(Head)
        Da = Test_model.angular_diameter_distance(zg).value
        Ar = rad2asec / Da
        Rp = Ar / pixel
        cx_BCG, cy_BCG = wcs.all_world2pix(rag * U.deg, decg * U.deg, 1)

        ra_img, dec_img = wcs.all_pix2world(grd[0, :], grd[1, :], 1)
        pos = SkyCoord(ra_img, dec_img, frame='fk5', unit='deg')
        EBV = sfd(pos)
        Av = Rv * EBV * 0.86
        Al = A_wave(l_wave[2], Rv) * Av
        img1 = img * 10**(Al / 2.5)

        ## part1: find the source and mask in original image
        hdu = fits.PrimaryHDU()
        hdu.data = img1
        hdu.header = Head
        hdu.writeto(tmp_load + 'frame-%s-ra%.3f-dec%.3f-redshift%.3f.fits' %
                    ('r', rag, decg, zg),
                    overwrite=True)

        file_source = tmp_load + 'frame-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % (
            'r', rag, decg, zg)
        cmd = 'sex ' + file_source + ' -c %s -CATALOG_NAME %s -PARAMETERS_NAME %s' % (
            param_A, out_load_A, out_cat)
        print(cmd)
        A = subpro.Popen(cmd, shell=True)
        A.wait()

        source = asc.read(out_load_A)
        Numb = np.array(source['NUMBER'][-1])
        A = np.array(source['A_IMAGE'])
        B = np.array(source['B_IMAGE'])
        chi = np.array(source['THETA_IMAGE'])
        cx = np.array(source['X_IMAGE']) - 1
        cy = np.array(source['Y_IMAGE']) - 1

        Kron = 6
        Lr = Kron * A
        Sr = Kron * B

        cat = pd.read_csv(
            '/home/xkchen/mywork/ICL/data/star_catalog/source_SQL_Z%.3f_ra%.3f_dec%.3f.txt'
            % (zg, rag, decg),
            skiprows=1)
        ra_s = np.array(cat['ra'])
        dec_s = np.array(cat['dec'])
        mag = np.array(cat['r'])
        x_side = img.shape[1]
        y_side = img.shape[0]
        x, y = wcs.all_world2pix(ra_s * U.deg, dec_s * U.deg, 1)
        ia = (x >= 0) & (x <= x_side)
        ib = (y >= 0) & (y <= y_side)
        ie = (mag <= 20)
        ic = ia & ib & ie
        comx = x[ic]
        comy = y[ic]
        comr = np.ones(len(comx), dtype=np.float) * r_star
        com_chi = np.zeros(len(comx), dtype=np.float)

        CX = np.r_[cx, comx]
        CY = np.r_[cy, comy]
        a = np.r_[Lr, 2 * comr]
        b = np.r_[Sr, 2 * comr]
        theta = np.r_[chi, com_chi]
        Numb = Numb + len(comx)

        mask_A = np.ones((img.shape[0], img.shape[1]), dtype=np.float)
        ox = np.linspace(0, img.shape[1] - 1, img.shape[1])
        oy = np.linspace(0, img.shape[0] - 1, img.shape[0])
        basic_coord = np.array(np.meshgrid(ox, oy))
        major = a / 2
        minor = b / 2
        senior = np.sqrt(major**2 - minor**2)

        tdr = np.sqrt((CX - cx_BCG)**2 + (CY - cy_BCG)**2)
        dr00 = np.where(tdr == np.min(tdr))[0]
        for k in range(Numb):
            xc = CX[k]
            yc = CY[k]
            lr = major[k]
            sr = minor[k]
            cr = senior[k]

            set_r = np.int(np.ceil(1.2 * lr))
            la0 = np.int(xc - set_r)
            la1 = np.int(xc + set_r + 1)
            lb0 = np.int(yc - set_r)
            lb1 = np.int(yc + set_r + 1)

            if k == dr00[0]:
                continue
            else:
                phi = theta[k] * np.pi / 180
                df1 = lr**2 - cr**2 * np.cos(phi)**2
                df2 = lr**2 - cr**2 * np.sin(phi)**2
                fr = ((basic_coord[0, :][lb0:lb1, la0:la1] - xc)**2 * df1 +
                      (basic_coord[1, :][lb0:lb1, la0:la1] - yc)**2 * df2 -
                      cr**2 * np.sin(2 * phi) *
                      (basic_coord[0, :][lb0:lb1, la0:la1] - xc) *
                      (basic_coord[1, :][lb0:lb1, la0:la1] - yc))
                idr = fr / (lr**2 * sr**2)
                jx = idr < 1
                #jx = (-1)*jx+1
                #mask_A[lb0: lb1, la0: la1] = mask_A[lb0: lb1, la0: la1] * jx

                iu = np.where(jx == True)
                iv = np.ones((jx.shape[0], jx.shape[1]), dtype=np.float)
                iv[iu] = np.nan
                mask_A[lb0:lb1, la0:la1] = mask_A[lb0:lb1, la0:la1] * iv

        mirro_A = mask_A * img1
        SB2, R2, Anr2, err2 = light_measure(mirro_A, bins, 1, Rp, cx_BCG,
                                            cy_BCG, pixel, zg)
        '''
		## test the flux distribution in each bins
		sub_R = np.logspace(0, np.log10(Rp), bins)
		cdr = np.sqrt((grd[0,:] - cx_BCG)**2 + (grd[1,:] - cy_BCG)**2)
		Nr = len(sub_R)
		for xx in range(Nr - 1):
			idr = (cdr >= sub_R[xx]) & (cdr < sub_R[xx + 1])
			sub_f = mirro_A[idr]
			id_nan = np.isnan(sub_f)
			iv = np.where(id_nan == False)[0]
			bl_array = sub_f[iv]

			plt.figure()
			plt.title('$flux \; distribution \; in \; %d \; bins$' % (xx))
			plt.hist(bl_array, histtype = 'step', color = 'b', normed = True)
			plt.xlabel('$flux[nmagy]$')
			plt.savefig('/home/xkchen/mywork/ICL/code/flux_%dbins_DF_%.3fra_%.3fdec_%.3fz.png' % (xx, rag, decg, zg), dpi = 300)
			plt.close()
		'''
        # flux scale and pixel resample
        eta = Da_ref / Da
        mu = 1 / eta
        SB_ref = SB2 - 10 * np.log10((1 + zg) / (1 + z_ref))
        Ar_ref = Anr2 * mu
        f_SB = interp(Ar_ref, SB_ref, kind='cubic')

        imgt = flux_recal(img1, zg, z_ref)
        mirroA = flux_recal(mirro_A, zg, z_ref)

        xn, yn, resam = gen(mirroA, 1, eta, cx_BCG,
                            cy_BCG)  #############???????
        xn = np.int(xn)
        yn = np.int(yn)
        if eta > 1:
            resam = resam[1:, 1:]
        elif eta == 1:
            resam = resam[1:-1, 1:-1]
        else:
            resam = resam
        SBn, Rn, Anrn, errn = light_measure(resam, bins, 1, Rpp, xn, yn, pixel,
                                            z_ref)
        arn = Anrn[(Anrn >= np.min(Ar_ref)) & (Anrn <= np.max(Ar_ref))]

        plt.figure(figsize=(16, 8))
        gs = gridspec.GridSpec(1, 2, width_ratios=[1, 1])
        ax = plt.subplot(gs[0])
        bx = plt.subplot(gs[1])

        ax.plot(Anrn, SBn, 'b-', label='$SB_{resample}$', alpha=0.5)
        ax.plot(Ar_ref, SB_ref, 'g--', label='$SB_{ref}$', alpha=0.5)
        bx.plot(
            arn, SBn[(Anrn >= np.min(Ar_ref)) & (Anrn <= np.max(Ar_ref))] -
            f_SB(arn), 'g*')
        bx.axhline(y=np.mean(SBn[(Anrn >= np.min(Ar_ref))
                                 & (Anrn <= np.max(Ar_ref))] - f_SB(arn)),
                   ls='--',
                   color='b')

        ax.set_ylabel('$SB[mag/arcsec^2]$')
        ax.set_xlabel('$R[arcsec]$')
        ax.set_xscale('log')
        ax.tick_params(axis='both', which='both', direction='in')
        ax.invert_yaxis()
        ax.legend(loc=1, fontsize=15)

        bx.set_xlabel('$R[arcsec]$')
        bx.set_xscale('log')
        bx.set_ylabel('$ \Delta{SB}[mag/arcsec^2] $')
        bx.tick_params(axis='both', which='both', direction='in')
        bx.legend(loc=3, fontsize=12)
        plt.subplots_adjust(hspace=0)
        plt.tight_layout()
        plt.savefig(
            '/home/xkchen/mywork/ICL/code/resamp_err_SB_%d_ra%.3f_dec%.3f_z%.3f.png'
            % (bins, rag, decg, zg),
            dpi=300)
        plt.close()  #############???????????????
        '''
		xn, yn, resam = gen(imgt, 1, eta, cx_BCG, cy_BCG)
		xn = np.int(xn)
		yn = np.int(yn)
		if eta > 1:
		    resam = resam[1:, 1:]
		elif eta == 1:
		    resam = resam[1:-1, 1:-1]
		else:
			resam = resam

		## handle with these pixels around 0
		# from mask
		id_zero = np.where(mask_A == 0)
		tt_mask = mask_A * 1
		tt_mask[id_zero] = np.nan
		ttx, tty, ttmask = gen(tt_mask, 1, eta, cx_BCG, cy_BCG)

		if eta > 1:
		    ttmask = ttmask[1:, 1:]
		elif eta == 1:
		    ttmask = ttmask[1:-1, 1:-1]
		else:
			ttmask = ttmask
		id_nan = np.isnan(ttmask)
		ttmask[id_nan] = 0
		idnzeo = np.where(ttmask != 0)
		ttmask[idnzeo] = 1

		tt_img = ttmask * resam
		SB3, R3, Anr3, err3 = light_measure(tt_img, bins, 1, Rpp, xn, yn, pixel, z_ref)

		# from masked img
		id_zero = np.where(mirroA == 0)
		tt_mirro = mirroA * 1
		tt_mirro[id_zero] = np.nan 
		x2, y2, resam2 = gen(tt_mirro, 1, eta, cx_BCG, cy_BCG)
		x2 = np.int(x2)
		y2 = np.int(y2)
		if eta > 1:
		    resam2 = resam2[1:, 1:]
		elif eta == 1:
		    resam2 = resam2[1:-1, 1:-1]
		else:
			resam2 = resam2
		id_nan = np.isnan(resam2)
		resam2[id_nan] = 0
		SB5, R5, Anr5, err5 = light_measure(resam2, bins, 1, Rpp, x2, y2, pixel, z_ref)

		### part2: mask after resample (mask with the same source)
		CX_ = CX * mu
		CY_ = CY * mu
		a_ = a * mu
		b_ = b * mu

		res_mask_1 = np.ones((resam.shape[0], resam.shape[1]), dtype = np.float)
		ox_ = np.linspace(0, resam.shape[1] - 1, resam.shape[1])
		oy_ = np.linspace(0, resam.shape[0] - 1, resam.shape[0])
		basic_coord = np.array(np.meshgrid(ox_, oy_))
		major = a_ / 2
		minor = b_ / 2
		senior = np.sqrt(major**2 - minor**2)

		tdr = np.sqrt((CX_ - xn)**2 + (CY_ - yn)**2)
		dr00 = np.where(tdr == np.min(tdr))[0]

		for k in range(Numb):
			xc = CX_[k]
			yc = CY_[k]
			lr = major[k]
			sr = minor[k]
			cr = senior[k]

			set_r = np.int(np.ceil(1.2 * lr))
			la0 = np.int(xc - set_r)
			la1 = np.int(xc + set_r +1)
			lb0 = np.int(yc - set_r)
			lb1 = np.int(yc + set_r +1)

			if k == dr00[0] :
				continue
			else:
				phi = theta[k]*np.pi/180
				df1 = lr**2 - cr**2*np.cos(phi)**2
				df2 = lr**2 - cr**2*np.sin(phi)**2
				fr = ((basic_coord[0,:][lb0: lb1, la0: la1] - xc)**2*df1 + (basic_coord[1,:][lb0: lb1, la0: la1] - yc)**2*df2
					- cr**2*np.sin(2*phi)*(basic_coord[0,:][lb0: lb1, la0: la1] - xc)*(basic_coord[1,:][lb0: lb1, la0: la1] - yc))
				idr = fr/(lr**2*sr**2)
				jx = idr<=1
				jx = (-1)*jx+1
				res_mask_1[lb0: lb1, la0: la1] = res_mask_1[lb0: lb1, la0: la1]*jx
		resam1 = res_mask_1 * resam
		SBt, Rt, Anrt, errt = light_measure(resam1, bins, 1, Rpp, xn, yn, pixel, z_ref)

		# cut these pixel which is 0 before resamp
		xm, ym, res_mask_2 = gen(mask_A, 1, eta, cx_BCG, cy_BCG)
		if eta > 1:
		    res_mask_2 = res_mask_2[1:, 1:]
		elif eta == 1:
		    res_mask_2 = res_mask_2[1:-1, 1:-1]
		else:
			res_mask_2 = res_mask_2

		mix, miy, mirro_img = gen(mirroA, 1, eta, cx_BCG, cy_BCG)
		mix = np.int(mix)
		miy = np.int(miy)
		if eta > 1:
		    mirro_img = mirro_img[1:, 1:]
		elif eta == 1:
		    mirro_img = mirro_img[1:-1, 1:-1]
		else:
			mirro_img = mirro_img

		val, cont = sts.find_repeats(res_mask_2)
		ids = np.where(cont == np.max(cont))[0]
		res_mask2 = res_mask_2 / val[ids[0]]
		print('scale factor = ', val[ids[0]])
		SB4, R4, Anr4, err4 = weit_l_measure(mirro_img, res_mask2, bins, 1, Rpp, mix, miy, pixel, z_ref)

		ar4 = Anr4[(Anr4 >= np.min(Ar_ref)) & (Anr4 <= np.max(Ar_ref))]
		ar3 = Anr3[(Anr3 >= np.min(Ar_ref)) & (Anr3 <= np.max(Ar_ref))]
		art = Anrt[(Anrt >= np.min(Ar_ref)) & (Anrt <= np.max(Ar_ref))]

		plt.figure(figsize = (16, 8))
		gs = gridspec.GridSpec(1, 2, width_ratios = [1,1])
		ax = plt.subplot(gs[0])
		bx = plt.subplot(gs[1])

		ax.plot(Anrt, SBt, 'g-.', label = '$SB_{re-load \, source \, at \, z_{0}}$', alpha = 0.5)
		ax.plot(Anr4, SB4, 'b-', label = '$SB_{resample \, mask \, Metrix}$', alpha = 0.5)
		ax.plot(Anr3, SB3, 'r:', label = '$SB_{correct \, resample}$', alpha = 0.5)
		ax.plot(Ar_ref, SB_ref, 'k--', label = '$SB_{ref}$', alpha = 0.5)

		bx.plot(ar4, SB4[(Anr4 >= np.min(Ar_ref)) & (Anr4 <= np.max(Ar_ref))] - f_SB(ar4), 
			'b*', label = '$ [SB_{resample \, mask} - SB_{ref}] $', alpha = 0.5)
		bx.plot(ar3, SB3[(Anr3 >= np.min(Ar_ref)) & (Anr3 <= np.max(Ar_ref))] - f_SB(ar3), 
			'r*', label = '$ [SB_{correct \, resample} - SB_{ref}] $', alpha = 0.5)
		bx.plot(art, SBt[(Anrt >= np.min(Ar_ref)) & (Anrt <= np.max(Ar_ref))] - f_SB(art), 
			'g*', label = '$ [SB_{re-load \, source} - SB_{ref}] $', alpha = 0.5)
		bx.axhline(y = np.mean(SB4[(Anr4 >= np.min(Ar_ref)) & (Anr4 <= np.max(Ar_ref))] - f_SB(ar4)), color = 'b', ls = '--', alpha = 0.5)
		bx.axhline(y = np.mean(SB3[(Anr3 >= np.min(Ar_ref)) & (Anr3 <= np.max(Ar_ref))] - f_SB(ar3)), color = 'r', ls = '--', alpha = 0.5)
		bx.axhline(y = np.mean(SBt[(Anrt >= np.min(Ar_ref)) & (Anrt <= np.max(Ar_ref))] - f_SB(art)), color = 'g', ls = '--', alpha = 0.5)

		ax.set_title('resample SB profile comparation')
		ax.set_ylabel('$SB[mag/arcsec^2]$')
		ax.set_xlabel('$R[arcsec]$')
		ax.set_xscale('log')
		ax.tick_params(axis = 'both', which = 'both', direction = 'in')
		ax.invert_yaxis()
		ax.legend(loc = 1, fontsize = 15)

		bx.set_xlabel('$R[arcsec]$')
		bx.set_xscale('log')
		bx.set_ylabel('$ \Delta{SB}[mag/arcsec^2] $')
		bx.tick_params(axis = 'both', which = 'both', direction = 'in')
		bx.legend(loc = 3, fontsize = 12)
		plt.subplots_adjust(hspace = 0)
		plt.tight_layout()
		plt.savefig('/home/xkchen/mywork/ICL/code/resample_test_SB_%d_ra%.3f_dec%.3f_z%.3f.png' % (bins, rag, decg, zg), dpi = 300)
		plt.close()
		'''
    raise
    return
Exemple #7
0
def resamp_func(d_file,
                sub_z,
                sub_ra,
                sub_dec,
                ra_set,
                dec_set,
                img_x,
                img_y,
                band,
                out_file,
                z_ref,
                stack_info=None,
                pixel=0.396,
                id_dimm=False):
    """
	d_file : path where save the masked data (include file-name structure:'/xxx/xxx/xxx.xxx')
	ra_set, dec_set : ra, dec, z of will be resampled imgs
	sub_z, sub_ra, sub_dec : BCG information

	band : the band of imgs, 'str' type
	
	out_file : path where to save the resampling img
	pixel : pixel scale, in unit 'arcsec' (default is 0.396)
	
	z_ref : reference redshift, the redshift to which all clusters will be scaled

	id_dimm : if do cosmic dimming correction or not
	img_x, img_y : satellite location on image frame before pixel resampling

	"""
    zn = len(ra_set)

    sat_x, sat_y = [], []

    for k in range(zn):

        ra_g = ra_set[k]
        dec_g = dec_set[k]

        bcg_z, bcg_ra, bcg_dec = sub_z[k], sub_ra[k], sub_dec[k]

        z_g = bcg_z + 0.

        file = d_file % (band, bcg_ra, bcg_dec, bcg_z, ra_g, dec_g)
        data = fits.open(file)

        img = data[0].data

        #. satellite (ra, dec)
        RA0 = data[0].header['CRVAL1']
        DEC0 = data[0].header['CRVAL2']

        #. BCG (ra, dec)
        BCG_RA = data[0].header['BCG_RA']
        BCG_DEC = data[0].header['BCG_DEC']

        #. read satellite position from catalog
        # cx, cy = data[0].header['CENTER_X'], data[0].header['CENTER_Y']
        cx, cy = img_x[k], img_y[k]

        Da_g = Test_model.angular_diameter_distance(z_g).value
        Dl_g = Test_model.luminosity_distance(z_g).value

        Da_ref = Test_model.angular_diameter_distance(z_ref).value
        Dl_ref = Test_model.luminosity_distance(z_ref).value

        #. observation angle and flux factor at z_ref
        pixel_ref = pixel * (Da_g / Da_ref)
        eta_flux = Dl_g**2 / Dl_ref**2  #... flux change due to distance

        eta_pix = pixel / pixel_ref

        if id_dimm == True:

            dimm_flux = flux_recal(img, z_g, z_ref)
            pre_img = dimm_flux * eta_flux

        else:
            pre_img = img * 1.

        if eta_pix > 1:
            resam, xn, yn = sum_samp(eta_pix, eta_pix, pre_img, cx, cy)
        else:
            resam, xn, yn = down_samp(eta_pix, eta_pix, pre_img, cx, cy)

        # cheng the data type
        out_data = resam.astype('float32')

        sat_x.append(xn)
        sat_y.append(yn)

        x0 = resam.shape[1]
        y0 = resam.shape[0]

        keys = [
            'SIMPLE', 'BITPIX', 'NAXIS', 'NAXIS1', 'NAXIS2', 'CENTER_X',
            'CENTER_Y', 'CRVAL1', 'CRVAL2', 'BCG_RA', 'BCG_DEC', 'ORIGN_Z',
            'P_SCALE'
        ]
        value = [
            'T', 32, 2, x0, y0, xn, yn, RA0, DEC0, BCG_RA, BCG_DEC, z_g, pixel
        ]
        ff = dict(zip(keys, value))
        fill = fits.Header(ff)
        fits.writeto(out_file % (band, bcg_ra, bcg_dec, bcg_z, ra_g, dec_g),
                     out_data,
                     header=fill,
                     overwrite=True)

    sat_x = np.array(sat_x)
    sat_y = np.array(sat_y)

    if stack_info != None:

        keys = [
            'bcg_ra', 'bcg_dec', 'bcg_z', 'sat_ra', 'sat_dec', 'sat_x', 'sat_y'
        ]
        values = [sub_ra, sub_dec, sub_z, ra_set, dec_set, sat_x, sat_y]

        fill = dict(zip(keys, values))
        data = pds.DataFrame(fill)
        data.to_csv(stack_info)

    return
Exemple #8
0
def resample_test():
    bins = 65
    with h5py.File(load + 'mock_flux_data.h5') as f:
        Lob = np.array(f['a'])
    with h5py.File(load + 'mock_mag_data.h5') as f:
        Iner_SB = np.array(f['a'])
    with h5py.File(load + 'mock_intric_SB.h5') as f:
        Lc = np.array(f['a'][0])
        rbin = np.array(f['a'][1])

    R0 = np.max(rbin)
    Rpp = (rad2asec * 10**(-3) * R0 / Da_ref) / pixel
    r_sc = rbin / np.max(rbin)
    set_z = np.r_[set_z0[:10], set_z1[:10]]
    set_ra = np.r_[ra_z0[:10], ra_z1[:10]]
    set_dec = np.r_[dec_z0[:10], dec_z1[:10]]
    a_ref = 1 / (1 + z_ref)
    Lref = Lc * a_ref**4 / (4 * np.pi * rad2asec**2
                            )  # L at z in unit: (Lsun/kpc^2)/arcsec^2
    Lob_ref = Lref * Lsun / kpc2cm**2
    SB_ref = 22.5 - 2.5 * np.log10(Lob_ref / (10**(-9) * f0))
    f_SB = interp.interp1d(rbin, SB_ref)

    Nz = len(set_z)
    R_t = np.zeros((Nz, bins), dtype=np.float)
    SB_t = np.zeros((Nz, bins), dtype=np.float)
    err_t = np.zeros((Nz, bins), dtype=np.float)
    R_01 = np.zeros((Nz, bins), dtype=np.float)
    SB_01 = np.zeros((Nz, bins), dtype=np.float)
    err_01 = np.zeros((Nz, bins), dtype=np.float)
    for k in range(Nz):
        data = fits.getdata(load + 'mock/mock_z%.3f_ra%.3f_dec%.3f.fits' %
                            (set_z[k], set_ra[k], set_dec[k]),
                            header=True)
        #data = fits.getdata(load + 'noise/noise_frame_z%.3f_ra%.3f_dec%.3f.fits' % (set_z[k], set_ra[k], set_dec[k]), header = True)
        #data = fits.getdata(load + 'noise_mask/add_mask_frame_z%.3f_ra%.3f_dec%.3f.fits' % (set_z[k], set_ra[k], set_dec[k]), header = True)

        img = data[0]
        Dag = Test_model.angular_diameter_distance(set_z[k]).value
        Rp = (rad2asec * 10**(-3) * R0 / Dag) / pixel
        cenx = data[1]['CENTER_X']
        ceny = data[1]['CENTER_Y']
        Len_ref = Da_ref * pixel / rad2asec
        Len_z0 = Dag * pixel / rad2asec
        eta = Len_ref / Len_z0
        mu = 1 / eta
        scale_img = flux_recal(
            img, set_z[k], z_ref)  # scale the flux to the reference redshift
        if eta > 1:
            resamt, xn, yn = sum_samp(eta, eta, scale_img, cenx, ceny)
        else:
            resamt, xn, yn = down_samp(eta, eta, scale_img, cenx, ceny)

        xn = np.int(xn)
        yn = np.int(yn)
        Nx = resamt.shape[1]
        Ny = resamt.shape[0]

        keys = [
            'SIMPLE', 'BITPIX', 'NAXIS', 'NAXIS1', 'NAXIS2', 'CENTER_X',
            'CENTER_Y', 'ORIGN_Z', 'P_SCALE'
        ]
        value = ['T', 32, 2, Nx, Ny, xn, yn, set_z[k], pixel]
        ff = dict(zip(keys, value))
        fil = fits.Header(ff)
        fits.writeto(load + 'resamp-mock-ra%.3f-dec%.3f-redshift%.3f.fits' %
                     (set_ra[k], set_dec[k], set_z[k]),
                     resamt,
                     header=fil,
                     overwrite=True)
        #fits.writeto(load + 'resamp-noise-ra%.3f-dec%.3f-redshift%.3f.fits' % (set_ra[k], set_dec[k], set_z[k]), resamt, header = fil, overwrite=True)
        #fits.writeto(load + 'resamp-mask-ra%.3f-dec%.3f-redshift%.3f.fits' % (set_ra[k], set_dec[k], set_z[k]), resamt, header = fil, overwrite=True)

        SBt, Rt, Art, errt = light_measure(resamt, bins, 1, Rpp, xn, yn, pixel,
                                           z_ref)[:4]
        SB_t[k, :] = SBt
        R_t[k, :] = Rt
        err_t[k, :] = errt

        SB, R, Anr, err = light_measure(scale_img, bins, 1, Rp, cenx, ceny,
                                        pixel * mu, z_ref)[:4]
        SB_01[k, :] = SB
        R_01[k, :] = R
        err_01[k, :] = err

    plt.figure(figsize=(20, 24))
    gs = gridspec.GridSpec(5, 4)
    for k in range(Nz):
        Dag = Test_model.angular_diameter_distance(set_z[k]).value
        id_nan = np.isnan(SB_t[k, :])
        ivx = id_nan == False
        ss_R = R_t[k, ivx]
        ss_SB = SB_t[k, ivx]
        ddsb = ss_SB[(ss_R > np.min(rbin)) & (ss_R < np.max(rbin))] - f_SB(
            ss_R[(ss_R > np.min(rbin)) & (ss_R < np.max(rbin))])
        ddsr = ss_R[(ss_R > np.min(rbin)) & (ss_R < np.max(rbin))]

        id_nan = np.isnan(SB_01[k, :])
        ivx = id_nan == False
        st_R = R_01[k, ivx]
        st_SB = SB_01[k, ivx]
        ddtb = st_SB[(st_R > np.min(rbin)) & (st_R < np.max(rbin))] - f_SB(
            st_R[(st_R > np.min(rbin)) & (st_R < np.max(rbin))])
        ddtr = st_R[(st_R > np.min(rbin)) & (st_R < np.max(rbin))]

        gs0 = gridspec.GridSpecFromSubplotSpec(5,
                                               1,
                                               subplot_spec=gs[k // 4, k % 4])
        ax0 = plt.subplot(gs0[:4])
        ax1 = plt.subplot(gs0[-1])

        ax0.plot(rbin, SB_ref, 'r-', label='$ Intrinsic $', alpha=0.5)
        ax0.plot(ss_R, ss_SB, 'g--', label='$ Smooth $', alpha=0.5)
        ax0.plot(st_R,
                 st_SB,
                 'b-.',
                 label='$ Smooth + resampling $',
                 alpha=0.5)

        #ax0.plot(ss_R, ss_SB, 'g--', label = '$ Noise $', alpha = 0.5)
        #ax0.plot(st_R, st_SB, 'b-.', label = '$ Noise + resampling $', alpha = 0.5)

        #ax0.plot(ss_R, ss_SB, 'g--', label = '$ Add \; mask $', alpha = 0.5)
        #ax0.plot(st_R, st_SB, 'b-.', label = '$ Mask + resampling $', alpha = 0.5)

        ax0.set_xscale('log')
        ax0.set_xlim(1e1, 1e3)
        ax0.set_ylabel('$SB[mag/arcsec^2]$')
        ax0.invert_yaxis()
        ax0.legend(loc=1)
        ax0.tick_params(axis='both', which='both', direction='in')

        bx1 = ax0.twiny()
        xtik = ax0.get_xticks()
        xtik = np.array(xtik)
        xR = xtik * 10**(-3) * rad2asec / Dag
        bx1.set_xscale('log')
        bx1.set_xticks(xtik)
        bx1.set_xticklabels(['$%.2f^{ \prime \prime }$' % uu for uu in xR])
        bx1.set_xlim(ax0.get_xlim())
        bx1.tick_params(axis='both', which='both', direction='in')
        ax0.set_xticks([])

        ax1.plot(ddsr, ddsb, 'g-', alpha=0.5)
        ax1.plot(ddtr, ddtb, 'b-.', alpha=0.5)
        ax1.axhline(y=0,
                    linestyle='--',
                    color='k',
                    alpha=0.5,
                    label='$ \Delta{SB} = 0 $')
        ax1.set_xscale('log')
        ax1.set_xlim(1e1, 1e3)
        ax1.set_xlabel('$R[kpc]$')
        ax1.set_ylabel('$ SB_{M} - SB_{I} $')
        ax1.set_ylim(-1e-2, 1e-2)
        ax1.tick_params(axis='both', which='both', direction='in')

    plt.tight_layout()
    plt.savefig('mock_resample_SB.pdf', dpi=300)
    #plt.savefig('noise_resample_SB.pdf', dpi = 300)
    #plt.savefig('mask_resample_SB.pdf', dpi = 300)
    plt.close()
    raise
    return
Exemple #9
0
def resamp_Bpl(band_id, sub_z, sub_ra, sub_dec):
	ii = np.int(band_id)
	zn = len(sub_z)

	print('Now band is %s' % band[ii])
	for k in range(zn):
		ra_g = sub_ra[k]
		dec_g = sub_dec[k]
		z_g = sub_z[k]
		Da_g = Test_model.angular_diameter_distance(z_g).value

		# use star catalog dr12
		data_B = fits.getdata(load + 
			'mask_data/B_plane/1.5sigma/B_mask_data_%s_ra%.3f_dec%.3f_z%.3f.fits'%(band[ii], ra_g, dec_g, z_g), header = True)
		img_B = data_B[0]

		head_mean = data_B[1]
		cx0 = data_B[1]['CRPIX1']
		cy0 = data_B[1]['CRPIX2']
		RA0 = data_B[1]['CRVAL1']
		DEC0 = data_B[1]['CRVAL2']
		wcs = awc.WCS(data_B[1])
		cx, cy = wcs.all_world2pix(ra_g*U.deg, dec_g*U.deg, 1)

		Angur = (R0 * rad2asec/Da_g)
		Rp = Angur/pixel
		L_ref = Da_ref * pixel / rad2asec
		L_z0 = Da_g*pixel/rad2asec
		b = L_ref/L_z0
		Rref = (R0*rad2asec/Da_ref)/pixel

		f_goal = flux_recal(img_B, z_g, z_ref)
		ix0 = np.int(cx0/b)
		iy0 = np.int(cy0/b)
		'''
		xn, yn, resam = gen(f_goal, 1, b, cx, cy)
		if b > 1:
			resam = resam[1:, 1:]
		elif b == 1:
			resam = resam[1:-1, 1:-1]
		else:
			resam = resam
		'''
		if b > 1:
			resam, xn, yn = sum_samp(b, b, f_goal, cx, cy)
		else:
			resam, xn, yn = down_samp(b, b, f_goal, cx, cy)

		xn = np.int(xn)
		yn = np.int(yn)
		x0 = resam.shape[1]
		y0 = resam.shape[0]

		keys = ['SIMPLE','BITPIX','NAXIS','NAXIS1','NAXIS2','CRPIX1','CRPIX2','CENTER_X','CENTER_Y',
				'CRVAL1','CRVAL2','CENTER_RA','CENTER_DEC','ORIGN_Z', 'P_SCALE']
		value = ['T', 32, 2, x0, y0, ix0, iy0, xn, yn, RA0, DEC0, ra_g, dec_g, z_g, pixel]
		ff = dict(zip(keys,value))
		fil = fits.Header(ff)

		fits.writeto(load + 
			'resample/resam_B/frameB-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % (band[ii], ra_g, dec_g, z_g), resam, header = fil, overwrite=True)

		plt.figure()
		ax = plt.imshow(resam, cmap = 'Greys', origin = 'lower', vmin = 1e-3, vmax = 1e2, norm = mpl.colors.LogNorm())
		plt.colorbar(ax, fraction = 0.035, pad =  0.01, label = '$flux[nmaggy]$')

		hsc.circles(xn, yn, s = Rpp, fc = '', ec = 'b', )
		hsc.circles(xn, yn, s = 1.1 * Rpp, fc = '', ec = 'b', ls = '--')
		plt.scatter(xn, yn, s = 10, marker = 'X', facecolors = '', edgecolors = 'r', linewidth = 0.5, alpha = 0.5)
		plt.title('resample B mask ra%.3f dec%.3f z%.3f in %s band' % (ra_g, dec_g, z_g, band[ii]))
		plt.xlim(0, resam.shape[1])
		plt.ylim(0, resam.shape[0])
		plt.savefig(
			'/mnt/ddnfs/data_users/cxkttwl/ICL/fig_class/resamp_B/resampB_%s_ra%.3f_dec%.3f_z%.3f.png'%(band[ii], ra_g, dec_g, z_g), dpi = 300)
		plt.close()

	print('Now band %s have finished!!' % band[ii])
	return
Exemple #10
0
def pix_resample(band_id, sub_z, sub_ra, sub_dec):

    tot_N = len(sub_z)
    ii = np.int(band_id)

    for k in range(tot_N):
        ra_g = sub_ra[k]
        dec_g = sub_dec[k]
        z_g = sub_z[k]
        Da_g = Test_model.angular_diameter_distance(z_g).value

        ## read image (applied mask, extinction correction)
        data = fits.getdata(tmp + 'test/A_mask_%s_ra%.3f_dec%.3f_z%.3f.fits' %
                            (band[ii], ra_g, dec_g, z_g),
                            header=True)
        img = data[0]
        cx0 = data[1]['CRPIX1']
        cy0 = data[1]['CRPIX2']
        RA0 = data[1]['CRVAL1']
        DEC0 = data[1]['CRVAL2']

        wcs = awc.WCS(data[1])
        cx, cy = wcs.all_world2pix(ra_g * U.deg, dec_g * U.deg, 1)

        Angu_z = R0 * rad2asec / Da_g
        Rp_z = Angu_z / pixel
        L_ref = Da_ref * pixel / rad2asec
        L_z0 = Da_g * pixel / rad2asec
        b = L_ref / L_z0

        f_goal = flux_recal(img, z_g, z_ref)
        ix0 = np.int(cx0 / b)
        iy0 = np.int(cy0 / b)

        if b > 1:
            resam, xn, yn = sum_samp(b, b, f_goal, cx, cy)
        else:
            resam, xn, yn = down_samp(b, b, f_goal, cx, cy)

        xn = np.int(xn)
        yn = np.int(yn)
        x0 = resam.shape[1]
        y0 = resam.shape[0]

        keys = [
            'SIMPLE', 'BITPIX', 'NAXIS', 'NAXIS1', 'NAXIS2', 'CRPIX1',
            'CRPIX2', 'CENTER_X', 'CENTER_Y', 'CRVAL1', 'CRVAL2', 'CENTER_RA',
            'CENTER_DEC', 'ORIGN_Z', 'P_SCALE'
        ]
        value = [
            'T', 32, 2, x0, y0, ix0, iy0, xn, yn, RA0, DEC0, ra_g, dec_g, z_g,
            pixel
        ]
        ff = dict(zip(keys, value))
        fil = fits.Header(ff)
        fits.writeto(tmp + 'test/resam-%s-ra%.3f-dec%.3f-redshift%.3f.fits' %
                     (band[ii], ra_g, dec_g, z_g),
                     resam,
                     header=fil,
                     overwrite=True)

    return
def resamp_func(
    d_file,
    z_set,
    ra_set,
    dec_set,
    img_x,
    img_y,
    band,
    out_file,
    z_ref,
    stack_info=None,
    pixel=0.396,
    id_dimm=False,
):
    """
	d_file : path where save the masked data (include file-name structure:'/xxx/xxx/xxx.xxx')
	z_set, ra_set, dec_set : ra, dec, z of will be resampled imgs
	band : the band of imgs, 'str' type
	out_file : path where to save the resampling img
	pixel : pixel scale, in unit 'arcsec' (default is 0.396)
	z_ref : reference redshift, the redshift to which all clusters will be scaled
	id_dimm : if do cosmic dimming correction or not
	img_x, img_y : BCG location on image frame before pixel resampling
	"""
    zn = len(z_set)
    bcg_x, bcg_y = [], []

    for k in range(zn):

        ra_g = ra_set[k]
        dec_g = dec_set[k]
        z_g = z_set[k]

        file = d_file % (band, ra_g, dec_g, z_g)
        data = fits.getdata(file, header=True)

        img = data[0]
        cx0 = data[1]['CRPIX1']
        cy0 = data[1]['CRPIX2']
        RA0 = data[1]['CRVAL1']
        DEC0 = data[1]['CRVAL2']

        #. convert (ra, dec) to location in image frame
        #wcs = awc.WCS(data[1])
        #cx, cy = wcs.all_world2pix(ra_g * U.deg, dec_g * U.deg, 1)

        #. read BCG position from catalog
        cx, cy = img_x[k], img_y[k]

        Da_g = Test_model.angular_diameter_distance(z_g).value
        Da_ref = Test_model.angular_diameter_distance(z_ref).value

        Dl_g = Test_model.luminosity_distance(z_g).value
        Dl_ref = Test_model.luminosity_distance(z_ref).value

        #. observation angle and flux factor at z_ref
        pixel_ref = pixel * (Da_g / Da_ref)
        eta_flux = Dl_g**2 / Dl_ref**2  #... flux change due to distance

        eta_pix = pixel / pixel_ref

        if id_dimm == True:

            dimm_flux = flux_recal(img, z_g, z_ref)
            pre_img = dimm_flux * eta_flux

        else:
            pre_img = img * 1.

        ix0 = np.int(cx0 / eta_pix)
        iy0 = np.int(cy0 / eta_pix)

        if eta_pix > 1:
            resam, xn, yn = sum_samp(eta_pix, eta_pix, pre_img, cx, cy)
        else:
            resam, xn, yn = down_samp(eta_pix, eta_pix, pre_img, cx, cy)

        # cheng the data type
        out_data = resam.astype('float32')

        bcg_x.append(xn)
        bcg_y.append(yn)

        x0 = resam.shape[1]
        y0 = resam.shape[0]

        keys = [
            'SIMPLE', 'BITPIX', 'NAXIS', 'NAXIS1', 'NAXIS2', 'CRPIX1',
            'CRPIX2', 'CENTER_X', 'CENTER_Y', 'CRVAL1', 'CRVAL2', 'BCG_RA',
            'BCG_DEC', 'ORIGN_Z', 'P_SCALE'
        ]
        value = [
            'T', 32, 2, x0, y0, ix0, iy0, xn, yn, RA0, DEC0, ra_g, dec_g, z_g,
            pixel
        ]
        ff = dict(zip(keys, value))
        fil = fits.Header(ff)
        fits.writeto(out_file % (band, ra_g, dec_g, z_g),
                     out_data,
                     header=fil,
                     overwrite=True)

    bcg_x = np.array(bcg_x)
    bcg_y = np.array(bcg_y)

    if stack_info != None:
        keys = ['ra', 'dec', 'z', 'bcg_x', 'bcg_y']
        values = [ra_set, dec_set, z_set, bcg_x, bcg_y]
        fill = dict(zip(keys, values))
        data = pds.DataFrame(fill)
        data.to_csv(stack_info)

    return