Source code for rgbmaker.wrightCC

# cosmology calculator by Wright
# python script evolved from James Schobert

from math import sqrt ,exp ,sin , pi, log10

[docs]def cosmo_calc(z, H0=69.6, WM=0.286, WV=None, univ=2): ''' Cosmology calculator aka Ned Wright www.astro.ucla.edu/~wright *Input values* redshift, Ho, Omega_m, Omega_vac *ouput values* age at z, distance in Mpc, kpc/arcsec, apparent to abs mag conversion *Options* :-h: for help message :-v: for verbose response :H0 = 75: Hubble constant :WM = 0.3: Omega(matter) ''' z = float(z) # redshift H0 = float(H0) # Hubble constant WM = float(WM) # Omega(matter) if univ == 0: # Universe is flat - WV = (1.0 - WM) - (0.4165/(H0*H0)) # Omega(vacuum) or lambda elif univ == 1: # Universe is open -- WV = 0 elif univ == 2: # Universe is General --- WV = 0.714 scale = _calc_rate(z, H0, WM, WV) return scale['scale'] + ' Kpc/"'
def _calc_rate(z, H0, WM, WV, verbose=False): # initialize constants WR = 0. # Omega(radiation) WK = 0. # Omega curvaturve = 1-Omega(total) c = 299792.458 # velocity of light in km/sec Tyr = 977.8 # coefficent for converting 1/H into Gyr DTT = 0.5 # time from z to now in units of 1/H0 DTT_Gyr = 0.0 # value of DTT in Gyr age = 0.5 # age of Universe in units of 1/H0 age_Gyr = 0.0 # value of age in Gyr zage = 0.1 # age of Universe at redshift z in units of 1/H0 zage_Gyr = 0.0 # value of zage in Gyr DCMR = 0.0 # comoving radial distance in units of c/H0 DCMR_Mpc = 0.0 DCMR_Gyr = 0.0 DA = 0.0 # angular size distance DA_Mpc = 0.0 DA_Gyr = 0.0 kpc_DA = 0.0 DL = 0.0 # luminosity distance DL_Mpc = 0.0 DL_Gyr = 0.0 # DL in units of billions of light years V_Gpc = 0.0 a = 1.0 # 1/(1+z), the scale factor of the Universe az = 0.5 # 1/(1+z(object)) h = H0/100. WR = 4.165E-5/(h*h) # includes 3 massless neutrino species, T0 = 2.72528 WK = 1-WM-WR-WV az = 1.0/(1+1.0*z) age = 0. n = 1000 # number of points in integrals for i in range(n): a = az*(i+0.5)/n adot = sqrt(WK+(WM/a)+(WR/(a*a))+(WV*a*a)) age = age + 1./adot zage = az*age/n zage_Gyr = (Tyr/H0)*zage DTT = 0.0 DCMR = 0.0 # do integral over a=1/(1+z) from az to 1 in n steps, midpoint rule for i in range(n): a = az+(1-az)*(i+0.5)/n adot = sqrt(WK+(WM/a)+(WR/(a*a))+(WV*a*a)) DTT = DTT + 1./adot DCMR = DCMR + 1./(a*adot) DTT = (1.-az)*DTT/n DCMR = (1.-az)*DCMR/n age = DTT+zage age_Gyr = age*(Tyr/H0) DTT_Gyr = (Tyr/H0)*DTT DCMR_Gyr = (Tyr/H0)*DCMR DCMR_Mpc = (c/H0)*DCMR # tangential comoving distance ratio = 1.00 x = sqrt(abs(WK))*DCMR if x > 0.1: if WK > 0: ratio = 0.5*(exp(x)-exp(-x))/x else: ratio = sin(x)/x else: y = x*x if WK < 0: y = -y ratio = 1. + y/6. + y*y/120. DCMT = ratio*DCMR DA = az*DCMT DA_Mpc = (c/H0)*DA kpc_DA = DA_Mpc/206.264806 DA_Gyr = (Tyr/H0)*DA DL = DA/(az*az) DL_Mpc = (c/H0)*DL DL_Gyr = (Tyr/H0)*DL # comoving volume computation ratio = 1.00 x = sqrt(abs(WK))*DCMR if x > 0.1: if WK > 0: ratio = (0.125*(exp(2.*x)-exp(-2.*x))-x/2.)/(x*x*x/3.) else: ratio = (x/2. - sin(2.*x)/4.)/(x*x*x/3.) else: y = x*x if WK < 0: y = -y ratio = 1. + y/5. + (2./105.)*y*y VCM = ratio*DCMR*DCMR*DCMR/3. V_Gpc = 4.*pi*((0.001*c/H0)**3)*VCM if verbose == True: print( 'For H_o = ' + '%1.1f' % H0 + ', Omega_M = ' + '%1.3f' % WM + ', Omega_vac = ',) print( '%1.3f' % WV + ', z = ' + '%1.3f' % z) print( 'It is now ' + '%1.3f' % age_Gyr + ' Gyr since the Big Bang.') print( 'The age at redshift z was ' + '%1.1f' % zage_Gyr + ' Gyr.') print( 'The light travel time was ' + '%1.1f' % DTT_Gyr + ' Gyr.') print( 'The comoving radial distance, which goes into Hubbles law, is',) print( '%1.1f' % DCMR_Mpc + ' Mpc or ' + '%1.1f' % DCMR_Gyr + ' Gly.') print( 'The comoving volume within redshift z is ' + '%1.1f' % V_Gpc + ' Gpc^3.') print( 'The angular size distance D_A is ' + '%1.1f' % DA_Mpc + ' Mpc or',) print( '%1.1f' % DA_Gyr + ' Gly.') print( 'This gives a scale of ' + '%.2f' % kpc_DA + ' kpc/".') print( 'The luminosity distance D_L is ' + '%1.1f' % DL_Mpc + ' Mpc or ' + '%1.1f' % DL_Gyr + ' Gly.') print( 'The distance modulus, m-M, is '+'%1.2f' % (5*log10(DL_Mpc*1e6)-5)) else : return {'scale': '{:0.4f}'.format(kpc_DA)}