Python Package

a3cosmos-gas-evolution

A Python Package for Galaxy Cold Molecular Gas Evolution Functions.

Introduction:

The evolution of star-forming galaxies' star formation rate (SFR) and cold molecular gas reservoir have now been reasonably well measured out to very high redshift (z~6), from present time up to as early as one giga-year after the Big Bang (Madau & Dickinson 2014; Genzel et al. 2015; Scoville et al. 2016, 2017; Tacconi et al. 2018; Liu et al. 2018, 2019). These studies have found that the majority of galaxies have a steady and parametrizable evolution in their stellar mass growth, SFR, and molecular gas mass (or molecular gas to total baryon fraction, i.e., gas fraction). These evolution parametrizations have provided crucial constraints to cosmological simulations of dark matter halo evolution and the semi-analytic modeling of the simulated galaxy evolution in the dark matter halo (e.g., Popping et al. 2014ab, 2016, 2017, 2019ab).

However, currently there are many parametrizations (or we say "equations") in the literature and each has its own limitation which is not very well aware by the generic users. Therefore, we provide this Python package which contains as many galaxy gas, dust, star formation and stellar mass evolution equations as possible for easier comparison and study.

Below is a figure from Liu+2019b (arxiv link to appear here) showing how we parametrize the molecular gas to stellar mass ratio, µmolgas, or gas fraction.

Installation guide:

First install it from PyPI package library by running pip:

pip install --user a3cosmos-gas-evolution

Then run Python and import:

import a3cosmos_gas_evolution
a3cosmos_gas_evolution.help() # print help message

Usage:

Computing molecular gas to stellar mass ratio, ``µ_molgas`` or ``M_molgas / M_star``::

from a3cosmos_gas_evolution import calc_gas_fraction_A3COSMOS
from a3cosmos_gas_evolution import calc_gas_fraction_Tacconi2018
from a3cosmos_gas_evolution import calc_gas_fraction_Scoville2017
import numpy as np
z = 3.0                          # assuming a galaxy is at redshift 3.0
stellar_mass = 5e10              # assuming its stellar mass is this many
lgMstar = np.log10(stellar_mass) # convert stellar mass to log10
DeltaMS = 0.0                    # assuming this galaxy is on the SFR-Mstar main sequence
mu_gas_1 = calc_gas_fraction_A3COSMOS(z = z, lgMstar = lgMstar, DeltaMS = DeltaMS)
mu_gas_2 = calc_gas_fraction_Tacconi2018(z = z, lgMstar = lgMstar, DeltaMS = DeltaMS)
mu_gas_3 = calc_gas_fraction_Scoville2017(z = z, lgMstar = lgMstar, DeltaMS = DeltaMS)
gas_mass_1 = stellar_mass * mu_gas_1
gas_mass_2 = stellar_mass * mu_gas_2
gas_mass_3 = stellar_mass * mu_gas_3
print('Calculated gas masses using A3COSMOS, Tacconi2018 and Scoville2017 functions are: %.1e, %.1e and %.1e, respectively.'%(gas_mass_1, gas_mass_2, gas_mass_3))
#-- 
#-- "Calculated gas masses using A3COSMOS, Tacconi2018 and Scoville2017 functions are: 7.3e+10, 6.4e+10 and 1.5e+11, respectively."
#-- 


Computing gas depletion time, i.e., ``M_molgas / SFR``::

import a3cosmos_gas_evolution
a3cosmos_gas_evolution.calc_gas_depletion_time_A3COSMOS(z = 3.0, lgMstar = 10.5, DeltaMS = 0.0)
a3cosmos_gas_evolution.calc_gas_depletion_time_Tacconi2018(z = 3.0, lgMstar = 10.5, DeltaMS = 0.0)
a3cosmos_gas_evolution.calc_gas_depletion_time_Scoville2017(z = 3.0, lgMstar = 10.5, DeltaMS = 0.0)


Compute galaxy main-sequence star formation rate, i.e., ``SFR_MS``::

import a3cosmos_gas_evolution
a3cosmos_gas_evolution.calc_SFR_MS_Speagle2014(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Speagle2014_with_z(z = 3.0, lgMstar = 10.5) # their Table 8, not valid at high redshift!
a3cosmos_gas_evolution.calc_SFR_MS_Sargent2014(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Whitaker2014(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Bethermin2015(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Schreiber2015(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Lee2015(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Tomczak2016(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Pearson2018(z = 3.0, lgMstar = 10.5)
a3cosmos_gas_evolution.calc_SFR_MS_Tacconi2018(z = 3.0, lgMstar = 10.5)



Compute CO-to-H2 conversion factor, i.e., ``α_CO``::

import a3cosmos_gas_evolution as a3g
metalZ = 8.9 # assuming a metallicity 12+log10(O/H) = 8.9
a3g.calc_alphaCO_from_metalZ_following_Wilson1995(metalZ)
a3g.calc_alphaCO_from_metalZ_following_Genzel2012(metalZ)
a3g.calc_alphaCO_from_metalZ_following_Genzel2015a(metalZ) # their Eq. (6)
a3g.calc_alphaCO_from_metalZ_following_Genzel2015b(metalZ) # their Eq. (7)
a3g.calc_alphaCO_from_metalZ_following_Accurso2017(metalZ, DeltaMS = 0.0)
a3g.calc_alphaCO_from_metalZ_following_Bertemes2018(metalZ)
a3g.calc_alphaCO_from_metalZ_following_Tacconi2018(metalZ)
a3g.calc_alphaCO_from_metalZ_following_Boselli2014(lgL_Hband) # this needs H-band luminosity in solar luminosity unit, see their paper.


Compute Rayleigh-Jeans-tail-dust-continuum-to-H2 conversion factor, i.e., ``α_RJ``::

import a3cosmos_gas_evolution as a3g
TODO


Compute metallicity 12+log10(O/H) from stellar mass, redshift and/or star formation rate, i.e., mass-metallicity relations and Fundamental Plane relations (sorry about the function naming)::

import a3cosmos_gas_evolution as a3g
M_star = 5e10 # assuming a stellar mass
SFR = 100.0 # assuming a star formation rate
z = 1.5 # assuming a redshift
a3g.calc_metalZ_from_FMR_following_Kewley2008_PP04_O3N2(M_star)
a3g.calc_metalZ_from_FMR_following_Kewley2008_PP04_N2(M_star)
a3g.calc_metalZ_from_FMR_following_Kewley2008_KK04(M_star)
a3g.calc_metalZ_from_FMR_following_Kewley2008_KD02(M_star)
a3g.calc_metalZ_from_FMR_following_Mannucci2010(M_star, SFR)
a3g.calc_metalZ_from_FMR_following_Mannucci2010_Eq2(M_star, SFR)
a3g.calc_metalZ_from_FMR_following_Mannucci2010_Eq4(M_star, SFR)
a3g.calc_metalZ_from_FMR_following_Mannucci2011(M_star, SFR)
a3g.calc_metalZ_from_FMR_following_Maiolino2008(M_star, z)
a3g.calc_metalZ_from_FMR_following_Magnelli2012(M_star, z)
a3g.calc_metalZ_from_FMR_following_Genzel2015_Eq12a(M_star, z)
a3g.calc_metalZ_from_FMR_following_Genzel2015a(M_star, SFR, z)
a3g.calc_metalZ_from_FMR_following_Genzel2015_Eq12b(M_star, SFR)
a3g.calc_metalZ_from_FMR_following_Genzel2015b(M_star, SFR)
a3g.calc_metalZ_from_FMR_following_Genzel2015ab_combined_by_dzliu(M_star, SFR, z) # used in Liu+2019b
a3g.calc_metalZ_from_FMR_following_Guo2016(M_star, SFR)
a3g.convert_metalZ_M08_to_metalZ_PP04(metalZ_M08) # note the metallicity calibration frame...
a3g.convert_metalZ_M08_to_metalZ_PP04_N2_polynomial(metalZ_M08)
a3g.convert_metalZ_D02_to_metalZ_PP04(metalZ_D02)
a3g.convert_metalZ_KK04_to_metalZ_PP04(metalZ_KK04)
a3g.convert_metalZ_KK04_to_metalZ_PP04_O3N2(metalZ_KK04)
a3g.convert_metalZ_KD02_to_metalZ_PP04(metalZ_KD02)
a3g.convert_metalZ_KD02_to_metalZ_PP04_O3N2(metalZ_KD02)
a3g.convert_metalZ_PP04_N2_to_metalZ_PP04_O3N2(metalZ_PP04_N2)
a3g.convert_metalZ_PP04_N2_linear_to_metalZ_PP04_N2_polynomial(metalZ_PP04_N2_linear)