def app2abs(self,m_app,color,z,photo_band,color_band): ''' takes apparent magnitude of a galaxy in some photometric band (SDSS g or r or i) and converts it to an absolute magnitude via distance modulus and k correction M_abs = m_app - Dist_Mod - K_corr takes: m_app : float, apparent magnitude of galaxy color : float, color of galaxy between two SDSS bands z : float, total redshift of galaxy photo_band : str, SDSS band for magnitude. Ex: 'g' or 'r' or 'i' color_band : str, color between two SDSS bands. Ex: 'g - r' or 'g - i' or 'r - i', etc.. ''' dm = self.distance_mod(z) K_corr = calc_kcor(photo_band,z,color_band,color) return m_app - dm - K_corr
def plot_mz(x, y, xlim=[ 0.1, ], ylim=[0, 1], nxbins=151, nybins=151, xlabel='x', ylabel='y', Om0=0.3, OmL=0.7, h=0.7, savefig=None): """ plot a binned histogram showing distribution of galaxies in the apparent magnitude-redshift plane along with the expected m-z relation expected for a "standard candle" (object of fixed luminosity) + the same with correction for evolution (e-korrection) and spectrum redshift (k-correction) """ fig, ax = plt.subplots(figsize=(2.5, 2.5)) plt.ylabel(ylabel) plt.xlabel(xlabel) plt.xlim(xlim[0], xlim[1]) plt.ylim(ylim[0], ylim[1]) plot_2d_dist(x, y, xlim, ylim, nxbins, nybins, xlabel=xlabel, ylabel=ylabel, fig_setup=ax) # plot curve showing m-z relation for the constant luminosity ignoring K correction # set cosmology to the best values from 9-year WMAP data zd = np.linspace(x.min(), x.max(), 100) dlum = d_l(zd, Om0, OmL) * d_H / h # and k-correction using polynomial approximations of Chilingarian et al. 2010 # see http://kcor.sai.msu.ru/getthecode/ # this k-correction is not designed for z>0.6, so limit the z for correction calculation grzd = np.ones_like(zd) grzd = 0.8 * grzd kcorr = calc_kcor('r', zd, 'g - r', grzd) mcandle = -23. + 5. * np.log10(dlum * 1.e6 / 10.) mcandlevol = -23. + 5. * np.log10(dlum * 1.e6 / 10.) - 1.3 * zd mcandlevolkcorr = -23. + 5. * np.log10( dlum * 1.e6 / 10.) - 1.3 * zd + kcorr plt.plot(zd, mcandle, '--', c='r', lw=2., label=r'$\mathrm{st.\ candle}\ M_r=-23$') plt.plot(zd, mcandlevol, '--', c='darkorange', lw=1.5, label=r'$\mathrm{+evo\ correction}$') plt.plot(zd, mcandlevolkcorr, '--', c='y', lw=1., label=r'$\mathrm{+evo+k\ corrections}$') if savefig != None: plt.savefig(savefig, bbox_inches='tight') plt.legend(loc='lower right', fontsize=8, frameon=False) plt.show() return
def plot_Mz(x, y, xlim=[0, 1], ylim=[0, 1], nxbins=151, nybins=151, xlabel='x', ylabel='y', Om0=0.3, OmL=0.7, h=0.7, savefig=None): fig, ax = plt.subplots(figsize=(3., 3.)) plt.ylabel(ylabel) plt.xlabel(xlabel) plt.xlim(xlim[0], xlim[1]) plt.ylim(ylim[0], ylim[1]) # plot_2d_dist(x, y, xlim, ylim, nxbins, nybins, xlabel=xlabel, ylabel=ylabel, fig_setup=ax) zd = np.linspace(x.min(), x.max(), 100) dld = d_l(zd, Om0, OmL) * d_H / h # this k-correction is not design for z>0.5, so limit the z for correction calculation grzd = np.ones_like(zd) grzd = 0.8 * grzd kcorr = calc_kcor('r', zd, 'g - r', grzd) # main galaxy magnitude limit Mlim = 17.77 - 5. * np.log10(dld * 1.e5) mcandle = -23. * np.ones_like(zd) mcandlevol = -23. - 1.3 * zd mcandlevolkcorr = -23. - 1.3 * zd + kcorr plt.plot(zd, Mlim, '--', c='m', lw=2., label=r'$\mathrm{SDSS\ spec.\ sample}\ m_{\rm lim}=17.77$') plt.plot(zd, mcandle, '--', c='r', lw=2., label=r'$\mathrm{st.\ candle}\ M_r=-23$') plt.plot(zd, mcandlevol, '--', c='darkorange', lw=1.5, label=r'$\mathrm{+evo\ correction}$') plt.plot(zd, mcandlevolkcorr, '--', c='y', lw=1., label=r'$\mathrm{+evo+k\ corrections}$') if savefig != None: plt.savefig(savefig, bbox_inches='tight') plt.legend(loc='upper right', fontsize=8, frameon=False) plt.show() return
header = data.readline() headers = header.split(csv_delimiter) ids = {} for field in required_fields: if required_fields[field] in headers: ids[field] = headers.index(required_fields[field]) if len(ids) != len(required_fields): print "can't find all required fields in the catalogue." sys.exit() print " z(TAO) d(TAO) d(z) d(DM) diff %" for i in range(0,n): line = data.readline() values = line.split(csv_delimiter) z = float(values[ids['z']]) d = float(values[ids['d']]) b_abs = float(values[ids['b_abs']]) b_app = float(values[ids['b_app']]) r_app = float(values[ids['r_app']]) d_z = z2d(z, 1) # [Mpc/h] color = b_app - r_app k_corr = calc_kcor('B', z, 'B - Rc', color) dm = b_app - b_abs - k_corr # distance modulus d_lum = math.pow(10, 0.2*dm + 1)/1e6 # luminosity distance [Mpc] d_m = h*d_lum/(1+z) # co-moving distance [Mpc/h] diff = 100*d_m/d - 100; # % print "%e\t%e\t%e\t%e\t%.2f" % (z, d, d_z, d_m, diff)
#z = data[:, 35] data = np.loadtxt("output.csv", delimiter=",", skiprows=1) fiber_u = data[:, 2] fiber_g = data[:, 3] fiber_r = data[:, 4] fiber_i = data[:, 5] fiber_z = data[:, 6] petro_u = data[:, 12] petro_g = data[:, 13] petro_r = data[:, 14] petro_i = data[:, 15] petro_z = data[:, 16] z = data[:, -4] del mags kcor_fu = kcor.calc_kcor("u", z, "u - r", fiber_u - fiber_r) kcor_fg = kcor.calc_kcor("g", z, "g - r", fiber_g - fiber_r) kcor_fr = kcor.calc_kcor("r", z, "g - r", fiber_g - fiber_r) kcor_fi = kcor.calc_kcor("i", z, "g - i", fiber_g - fiber_i) kcor_fz = kcor.calc_kcor("z", z, "r - z", fiber_r - fiber_z) kcor_pu = kcor.calc_kcor("u", z, "u - r", petro_u - petro_r) kcor_pg = kcor.calc_kcor("g", z, "g - r", petro_g - petro_r) kcor_pr = kcor.calc_kcor("r", z, "g - r", petro_g - petro_r) kcor_pi = kcor.calc_kcor("i", z, "g - i", petro_g - petro_i) kcor_pz = kcor.calc_kcor("z", z, "r - z", petro_r - petro_z) fiber_u += kcor_fu fiber_g += kcor_fg fiber_r += kcor_fr fiber_i += kcor_fi fiber_z += kcor_fz
#z = data[:, 35] data = np.loadtxt("output.csv", delimiter = ",", skiprows = 1) fiber_u = data[:, 2] fiber_g = data[:, 3] fiber_r = data[:, 4] fiber_i = data[:, 5] fiber_z = data[:, 6] petro_u = data[:, 12] petro_g = data[:, 13] petro_r = data[:, 14] petro_i = data[:, 15] petro_z = data[:, 16] z = data[:, - 4] del mags kcor_fu = kcor.calc_kcor("u", z, "u - r", fiber_u - fiber_r) kcor_fg = kcor.calc_kcor("g", z, "g - r", fiber_g - fiber_r) kcor_fr = kcor.calc_kcor("r", z, "g - r", fiber_g - fiber_r) kcor_fi = kcor.calc_kcor("i", z, "g - i", fiber_g - fiber_i) kcor_fz = kcor.calc_kcor("z", z, "r - z", fiber_r - fiber_z) kcor_pu = kcor.calc_kcor("u", z, "u - r", petro_u - petro_r) kcor_pg = kcor.calc_kcor("g", z, "g - r", petro_g - petro_r) kcor_pr = kcor.calc_kcor("r", z, "g - r", petro_g - petro_r) kcor_pi = kcor.calc_kcor("i", z, "g - i", petro_g - petro_i) kcor_pz = kcor.calc_kcor("z", z, "r - z", petro_r - petro_z) fiber_u += kcor_fu fiber_g += kcor_fg fiber_r += kcor_fr fiber_i += kcor_fi fiber_z += kcor_fz
def apply_kcor(s): return calc_kcor("B", s["Redshift_Cosmological"], "B - Rc", s["colour"])
SDSS = CSV('data_all_2') SDSS_data = SDSS.read_all() # -1 because of column titles print(SDSS.row_count_data) calculated = np.zeros((SDSS.row_count_data, 3)) #add area print('read data') for index, row in enumerate(SDSS_data): if index % 1000 == 0: pass z, zErr_noqso, cModelMag_r, cModelMagErr_r, cModelMag_u, cModelMagErr_u, petroRad_r, petroRadErr_r, modelMag_r, modelMag_u, petroMag_r, petroMagErr_r, petroMagErr_u, petroMag_u, Pr90 = row dist = cosmo.luminosity_distance(z).value # in Mpc k_corr = calc_kcor('r', z, 'u - r', (petroMag_u - petroMag_r)) M = petroMag_r - (5 * np.log10(dist)) - 25 - k_corr M_Err = abs(petroMagErr_r) calculated[index, 0] = M_Err calculated[index, 1] = M # absolute mag if index % 5000 == 0: print(index) array = (SDSS_data[1:, 0] * 100).astype(int) print(array) y = np.bincount(array) ii = np.nonzero(y)[0] freq = (np.vstack((ii, y[ii])).T) #.astype(float)