Пример #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
Пример #3
0
def photo_sky_resamp(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.open(load + 'photo_z/sky/sky_img/sky-ra%.3f-dec%.3f-z%.3f-%s-band.fits' % (ra_g, dec_g, z_g, band[ii]) )
			img = data[0].data
			head = data[0].header
			cx0 = data[0].header['CRPIX1']
			cy0 = data[0].header['CRPIX2']
			RA0 = data[0].header['CRVAL1']
			DEC0 = data[0].header['CRVAL2']
			wcs = awc.WCS(head)
			cx, cy = wcs.all_world2pix(ra_g*U.deg, dec_g*U.deg, 1)

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

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

			if b > 1:
				resam, xn, yn = sum_samp(b, b, img, cx, cy)
			else:
				resam, xn, yn = down_samp(b, b, img, 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 + 
				'photo_z/sky/sky_resam_img/resampl_sky-%s-ra%.3f-dec%.3f-redshift%.3f.fits' % (band[ii], ra_g, dec_g, z_g), 
				resam, header = fil, overwrite = True)
		except FileNotFoundError:
			continue
Пример #4
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)
Пример #5
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
Пример #6
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
Пример #7
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
Пример #8
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
Пример #9
0
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