{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Example 9: $\\chi \\chi \\to b \\bar{b}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook, we'll show you how to use the code to obtain the temperature and ionization histories for a dark matter particle with mass $m_\\text{DM}$ that annihilates/decays into a pair of Standard Model particles with some (redshift-dependent) rate, characterized by either a thermally-averaged $s$-wave annihilation cross section $\\langle \\sigma v \\rangle$ or a decay lifetime $\\tau$. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Initialization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, let's initialize some of the modules that are required. In order to perform the calculation, we need to point the code to a set of transfer functions that determine how high-energy particles in our code cool. \n",
    "\n",
    "The user must first download the data files located [*here*](https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/DUOUWA). When these files are required, the user will be prompted for the directory in which they are stored. To avoid this prompt, the directory can be entered into `data_path` defined in the [*config*](https://darkhistory.readthedocs.io/en/master/_autosummary/config.html) module. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "import sys\n",
    "sys.path.append(\"..\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%autoreload\n",
    "\n",
    "import matplotlib\n",
    "matplotlib.rc_file('matplotlibrc')\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "import darkhistory.physics as phys\n",
    "\n",
    "import darkhistory.main as main"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Structure Formation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dark matter annihilation rates are significantly enhanced after the formation of structures, owing to the fact that $\\langle \\rho^2 \\rangle$ becomes greater than $\\langle \\rho_\\text{DM} \\rangle^2$, where $\\rho_\\text{DM}$ is the mass density of dark matter. To account for this increase in annihilation rate, boost factors, defined as\n",
    "\n",
    "$$ 1 + \\mathcal{B}(z) \\equiv \\frac{\\langle \\rho_\\text{DM}^2 \\rangle}{\\langle \\rho_\\text{DM} \\rangle^2} $$\n",
    "\n",
    "have been computed under a wide variety of assumptions in the literature. The boost factor allows us to write the energy injection rate as\n",
    "\n",
    "$$ \\left( \\frac{dE}{dV \\, dt} \\right)^\\text{inj} = [1 + \\mathcal{B}(z)] \\left( \\frac{dE}{dV \\, dt} \\right)^\\text{inj}_\\text{smooth} \\,,$$\n",
    "\n",
    "where the subscript 'smooth' indicates the smooth energy injection rate with the average mass density of dark matter assumed. \n",
    "\n",
    "In DarkHistory, we provide the 4 $s$-wave boost factors calculated in [[1]](#cite_2016), and shown in Fig. 2. We also include the $\\text{erfc}$ model provided in [[2]](#cite_erfc), Eq. (2.7). The user can obtain these boost factors as *functions* that themselves return $1 + \\mathcal{B}(z)$ as a function of redshift $1+z$, using [*struct_boost_func()*](https://darkhistory.readthedocs.io/en/master/_autosummary/darkhistory/physics/darkhistory.physics.struct_boost_func.html) in [*physics*](https://darkhistory.readthedocs.io/en/master/_autosummary/darkhistory/physics). See the documentation for details on how to use this function. Below, we use the \"Einasto with substructure\" model in [[1]](#cite_2016)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "struct_boost = phys.struct_boost_func(model='einasto_subs')\n",
    "struct_boost_NFW = phys.struct_boost_func(model='NFW_no_subs')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's plot this structure formation prescription to make sure that we have the right behavior. We'll make a plot of the effective density\n",
    "\n",
    "$$ \\rho_\\text{eff} \\equiv \\sqrt{1 + \\mathcal{B}(z)} \\langle \\rho_\\text{DM} \\rangle =  \\sqrt{1 + \\mathcal{B}(z)} \\rho_{\\text{DM},0} (1+z)^3 $$\n",
    "\n",
    "where $\\rho_{\\text{DM},0}$ is the dark matter density today, which is stored in [*physics.rho_DM()*](https://darkhistory.readthedocs.io/en/master/_autosummary/darkhistory/physics/darkhistory.physics.rho_DM.html). \n",
    "\n",
    "This plot should be directly compared with [[1]](#cite_2016). "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.figure()\n",
    "\n",
    "plt.loglog()\n",
    "\n",
    "z_vec = 10**np.arange(-1, 2, 0.005)\n",
    "# Note that struct_boost accepts 1+z as the argument, which is the default\n",
    "# way in which we pass redshift to functions in DarkHistory. \n",
    "rho_eff_vec = np.sqrt(struct_boost(1+z_vec)) * phys.rho_DM * (1+z_vec)**3 \n",
    "rho_eff_vec_NFW = np.sqrt(struct_boost_NFW(1+z_vec)) * phys.rho_DM * (1+z_vec)**3 \n",
    "\n",
    "# Convert to GeV/cm^3\n",
    "rho_eff_vec /= 1e9\n",
    "rho_eff_vec_NFW /= 1e9\n",
    "\n",
    "rho_eff_plot,    = plt.plot(z_vec, rho_eff_vec, label=r'$\\rho_\\mathrm{eff}$, Einasto with Sub.')\n",
    "rho_eff_plot_NFW,    = plt.plot(z_vec, rho_eff_vec_NFW, label=r'$\\rho_\\mathrm{eff}$, NFW without Sub.')\n",
    "smooth_rho_plot, = plt.plot(z_vec, phys.rho_DM * (1+z_vec)**3 / 1e9, 'k--', label=r'Smooth Dark Matter')\n",
    "\n",
    "plt.axis([0.1, 70, 1e-6, 2])\n",
    "plt.xlabel('Redshift $z$')\n",
    "plt.ylabel(r'Density [GeV cm$^{-3}$]')\n",
    "plt.title('Structure Formation Boost')\n",
    "\n",
    "plt.legend(handles=[smooth_rho_plot, rho_eff_plot, rho_eff_plot_NFW])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  $b\\bar{b}$ annihilation spectra"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the model we consider below, dark matter annihilates into b-quark/anti-quark pairs, $\\chi\\chi \\to b \\bar{b}$, which then resolve into spectra of stable particles.  As descibed in Section II of the paper, we need only consider the photon and electron/positron spectra, because the other stable particles (neutrinos, proton/anti-protons, heavier nuclei) are either ineffective at depositing their energy into the IGM or are produced in negligible amounts.\n",
    "\n",
    "Below we plot the resulting photon and electron/positron spectra coming from $\\chi\\chi \\to b \\bar{b}$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from darkhistory.spec.pppc import get_pppc_spec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "eng = np.exp(np.array(\n",
    "    [-9.171782342409985 + 0.07711606*i for i in np.arange(500)]\n",
    "))\n",
    "phot_spec = get_pppc_spec(50e9, eng, 'b', 'phot', decay=False)\n",
    "elec_spec = get_pppc_spec(50e9, eng, 'b', 'elec', decay=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "fig_bbbar = plt.figure(figsize=(15.5,6.5))\n",
    "\n",
    "ax = plt.subplot(1,2,1)\n",
    "\n",
    "ax.loglog()\n",
    "\n",
    "plt.plot(phot_spec.eng, phot_spec.eng**2 * phot_spec.dNdE)\n",
    "\n",
    "plt.axis([10, 80e9, 1e-29, 1e11])\n",
    "\n",
    "plt.title(r'Injected Photon Spectrum')\n",
    "plt.xlabel(r'Kinetic Energy $E$ [eV]')\n",
    "plt.ylabel(r'$E^2 \\; \\frac{d\\mathbf{N}^\\gamma_\\mathrm{inj}}{dE}$')\n",
    "\n",
    "plt.text(0.06, 0.88, r'$m_\\chi$ = 50 GeV', fontsize=20, transform=ax.transAxes)\n",
    "plt.text(0.09, 0.82, r'$\\chi\\chi \\to b \\bar{b}$', fontsize=20, transform=ax.transAxes)\n",
    "\n",
    "\n",
    "\n",
    "#################\n",
    "\n",
    "ax = plt.subplot(1,2,2)\n",
    "\n",
    "ax.loglog()\n",
    "\n",
    "plt.plot(elec_spec.eng, elec_spec.eng**2 * elec_spec.dNdE)\n",
    "\n",
    "plt.axis([10, 80e9, 1e-8, 1e11])\n",
    "\n",
    "plt.text(0.06, 0.88, r'$m_\\chi$ = 50 GeV', fontsize=20, transform=ax.transAxes)\n",
    "plt.text(0.09, 0.82, r'$\\chi\\chi \\to b \\bar{b}$', fontsize=20, transform=ax.transAxes)\n",
    "\n",
    "\n",
    "plt.title(r'Injected $e^+e^-$ Spectrum')\n",
    "plt.xlabel(r'Kinetic Energy $E$ [eV]')\n",
    "plt.ylabel(r'$E^2 \\; \\frac{d\\mathbf{N}^e_\\mathrm{inj}}{dE}$')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## $\\chi \\chi \\to b \\bar{b}$ Annihilation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are now ready to obtain the ionization and thermal history for a dark matter model with $m_\\chi = $ 50 GeV, and a thermally-averaged annihilation cross section of $\\langle \\sigma v \\rangle = 2 \\times 10^{-26} \\mathrm{ cm}^{3} s^{-1}$. This model has been found to be consistent with the galactic center excess [[3]](#cite_excess) and the AMS-02 cosmic ray antiproton spectrum [[4]](#cite_AMS). \n",
    "\n",
    "The function we will use is [*main.evolve()*](https://darkhistory.readthedocs.io/en/master/_autosummary/main/main.evolve.html). The function is called with the following arguments:\n",
    "\n",
    "```python\n",
    "def evolve(\n",
    "    in_spec_elec=None, in_spec_phot=None,\n",
    "    rate_func_N=None, rate_func_eng=None,\n",
    "    DM_process=None, mDM=None, sigmav=None, lifetime=None, primary=None,\n",
    "    struct_boost=None,\n",
    "    start_rs=None, end_rs=4, helium_TLA=False,\n",
    "    reion_switch=False, reion_rs=None,\n",
    "    photoion_rate_func=None, photoheat_rate_func=None, xe_reion_func=None,\n",
    "    init_cond=None, coarsen_factor=1, backreaction=True, \n",
    "    compute_fs_method='no_He', mxstep=1000, rtol=1e-4,\n",
    "    use_tqdm=True\n",
    ")\n",
    "```\n",
    "\n",
    "A full accounting of how to use all of the functions can be found throughout the examples given here and the documentation provided. Here we provide just a brief summary:\n",
    "\n",
    "* `in_spec_elec`, `in_spec_phot`, `rate_func_N` and `rate_func_eng` are used to specify input electron and photon spectra per energy injection event, occurring at some event and energy injection rate. This allows the user to define energy injection processes of any type; \n",
    "\n",
    "* `DM_process`, `mDM`, `sigmav`, `lifetime`, `primary` and `struct_boost` are used for dark matter models with annihilation/decay with some mass, $\\langle \\sigma v \\rangle$ or lifetime, forming some Standard Model primary particle and with some structure formation prescription;\n",
    "\n",
    "* `start_rs` and `end_rs` to define the redshift boundaries of the problem (`start_rs` needs to be specified for DM processes, but not if `in_spec_elec` or `in_spec_phot` is in use, which should have its redshift initialized instead);\n",
    "\n",
    "* `helium_TLA` determines whether to include helium or neglect it;\n",
    "\n",
    "* `reion_switch`, `reion_rs`, `photoion_rate_func`, `photoheat_rate_func`, `xe_reion_func` are all passed to `darkhistory.tla.get_history` for purposes of modeling reionization; \n",
    "\n",
    "* `init_cond` allows the user to specify initial conditions in temperature and ionization levels that are not the baseline conditions at the starting redshift; \n",
    "\n",
    "* `coarsen_factor` determines how much coarsening to use; \n",
    "\n",
    "* `backreaction` controls whether $f_c(z)$ are evaluated using the baseline ionization levels, or if they are evaluated based on the calculated ionization levels, which would include the backreaction effect; \n",
    "\n",
    "* `compute_fs_method` controls how $f_c(z)$ is calculated; \n",
    "\n",
    "* `mxstep` and `rtol` are parameters that can be used to control the ODE solver, and\n",
    "\n",
    "* `use_tqdm` controls whether to use the `tqdm` progress bar or not. \n",
    "\n",
    "When called for the first time, the data files that are downloaded as part of DarkHistory are loaded into memory for use by [*main.evolve()*](https://darkhistory.readthedocs.io/en/master/_autosummary/main/main.evolve.html). The successful import of these files will generate the following output:\n",
    "\n",
    "```\n",
    "****** Loading transfer functions... ******\n",
    "    for propagating photons...   Done!\n",
    "    for low-energy photons...  Done!\n",
    "    for low-energy electrons...  Done!\n",
    "    for high-energy deposition...  Done!\n",
    "    for total upscattered CMB energy rate...  Done!\n",
    "****** Loading complete! ******\n",
    "****** Loading transfer functions... ******\n",
    "    for inverse Compton (Thomson)...  Done!\n",
    "    for inverse Compton (relativistic)...  Done!\n",
    "    for inverse Compton (energy loss)...  Done!\n",
    "****** Loading complete! ******\n",
    "```\n",
    "\n",
    "Once the files have been properly loaded, the calculation will begin.\n",
    "\n",
    "Here is how we call the function to evaluate the ionization and temperature history for our dark matter model, *without* backreaction (we will run it with `coarsen_factor = 32` for speed). We do not include any reionization in this calculation, and also neglect helium here. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bbbar_noBR = main.evolve(\n",
    "    DM_process='swave', mDM=50e9, sigmav=2e-26, primary='b',\n",
    "    start_rs = 3000.,\n",
    "    coarsen_factor=32, backreaction=False,\n",
    "    struct_boost=struct_boost\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The output is a dictionary with the following keys:\n",
    "\n",
    "* `'rs'` -- the redshift abscissa of the outputs. \n",
    "* `'x'`  -- ($x_\\text{HII}$, $x_\\text{HeII}$) at each redshift point. \n",
    "* `'Tm'` -- $T_m$ at each redshift point. \n",
    "* `'highengphot'`, `'lowengphot'` and `'lowengelec'` -- the high-energy photon, low-energy photon and low-energy electron spectra at each step. \n",
    "* `'cmbloss'` -- the energy of CMB photons upscattered per unit time in each step. \n",
    "* `'f'`  -- A dictionary containing all the $f_c(z)$ values from both the low-energy spectra (`'low'`) and the high-energy electron deposition estimate (`'high'`). \n",
    "\n",
    "Next, let's run the same result *with* backreaction included."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "bbbar_BR = main.evolve(\n",
    "    DM_process='swave', mDM=50e9, sigmav=2e-26, primary='b',\n",
    "    start_rs = 3000,\n",
    "    coarsen_factor=32, backreaction=True,\n",
    "    struct_boost=struct_boost\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let's make a plot comparing these two results. Pull out the relevant information first:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Redshift abscissa. Identical for both cases. \n",
    "rs_vec = bbbar_noBR['rs']\n",
    "\n",
    "# Tm, stored in eV and converted to K. \n",
    "Tm_noBR = bbbar_noBR['Tm']/phys.kB\n",
    "Tm_BR   = bbbar_BR['Tm']/phys.kB\n",
    "\n",
    "# xHII. \n",
    "xHII_noBR = bbbar_noBR['x'][:,0]\n",
    "xHII_BR   = bbbar_BR['x'][:,0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And now the plotting!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "fig_bbbar = plt.figure(figsize=(15,6.5))\n",
    "\n",
    "ax = plt.subplot(1,2,1)\n",
    "\n",
    "ax.loglog()\n",
    "\n",
    "plot_Tm_noBR,   = plt.plot(rs_vec, Tm_noBR, label='No Backreaction')\n",
    "plot_Tm_BR, = plt.plot(rs_vec, Tm_BR, label='With Backreaction')\n",
    "# Plot the baseline result for comparison\n",
    "plot_Tm_std,    = plt.plot(rs_vec, phys.Tm_std(rs_vec)/phys.kB, 'k--', label='Baseline')\n",
    "\n",
    "plt.title(r'\\bf{Temperature History}')\n",
    "plt.xlabel(r'Redshift $(1+z)$')\n",
    "plt.ylabel(r'Matter Temperature $T_m$ [K]')\n",
    "\n",
    "plt.axis([4, 1e2, 0.3, 3e2])\n",
    "\n",
    "# Text\n",
    "plt.text(0.06, 0.88, r'$\\chi \\chi \\to b \\bar{b}$, $m_\\chi$ = 50 GeV', fontsize=20, transform=ax.transAxes) \n",
    "plt.text(0.06, 0.82, r'$\\langle \\sigma v \\rangle = 2 \\times 10^{-26}$ cm$^3$ s$^{-1}$', fontsize=20, transform=ax.transAxes) \n",
    "\n",
    "leg = plt.legend(handles=[plot_Tm_noBR, plot_Tm_BR, plot_Tm_std], loc=4)\n",
    "\n",
    "#################\n",
    "\n",
    "ax = plt.subplot(1,2,2)\n",
    "\n",
    "ax.loglog()\n",
    "\n",
    "plot_xHII_noBR,   = plt.plot(rs_vec, xHII_noBR, label='No Backreaction')\n",
    "plot_xHII_BR, = plt.plot(rs_vec, xHII_BR, label='With Backreaction')\n",
    "# Plot the baseline result for comparison\n",
    "plot_xHII_std,    = plt.plot(rs_vec, phys.xHII_std(rs_vec), 'k--', label='Baseline')\n",
    "\n",
    "plt.title(r'\\bf{Ionization History}')\n",
    "plt.xlabel(r'Redshift $(1+z)$')\n",
    "plt.ylabel(r'Hydrogen Ionization Fraction $x_\\mathrm{HII}$')\n",
    "\n",
    "plt.axis([4, 1e2, 0.8e-4, 2e-3])\n",
    "\n",
    "# Text\n",
    "plt.text(0.06, 0.88, r'$\\chi \\chi \\to b \\bar{b}$, $m_\\chi$ = 50 GeV', fontsize=20, transform=ax.transAxes) \n",
    "plt.text(0.06, 0.82, r'$\\langle \\sigma v \\rangle = 2 \\times 10^{-26}$ cm$^3$ s$^{-1}$', fontsize=20, transform=ax.transAxes) \n",
    "\n",
    "leg = plt.legend(handles=[plot_xHII_noBR, plot_xHII_BR, plot_xHII_std], loc=4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Although the temperature difference with and without backreaction is only about 50\\% at $1+z = 4$, this is of course simply one example chosen to highlight how easy it is to get the temperature/ionization histories for any simple dark matter model. Models with decaying dark matter, for example, can lead to much larger differences. We will see an instance of this in a later example."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Details"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Importing `main` also imports a list of interpolation functions over various transfer functions. The first group of transfer functions involve propagation and deposition transfer functions that multiply a spectrum of propagating photons from a given redshift to give various quantities at the next redshift step. These include propagating photons (`highengphot_interp_tf`), low-energy photons (`lowengphot_interp_tf`), low-energy electrons (`lowengelec_interp_tf`), the energy of CMB photons upscattered per unit time (`CMB_engloss_interp`) and high-energy deposition (`highengdep_interp`). These interpolation functions are of type `TransferFuncInterps`, under the module `darkhistory.spec.transferfunclist`. See the documentation for more details on how to use these objects.\n",
    "\n",
    "Together with these, there are also transfer function matrices that multiply a spectrum of electrons to give the spectrum of scattered photons per unit time in the Thomson (`ics_thomson_ref_tf`) and relativistic (`ics_rel_ref_tf`) regimes, as well as the energy loss spectrum per unit time (`ics_engloss_ref_tf`), i.e. number of photons which lose some amount of energy per unit time. These are used to work out how injected electrons cool in `main.evolve()`. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bibliography"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[1]<a id='cite_2016'></a> Hongwan Liu, Tracy R. Slatyer, and Jesús Zavala, “Contributions to cosmic reionization from dark matter annihilation and decay,” Phys. Rev. D94, 063507 (2016), arXiv:1604.02457 [astro-ph.CO].\n",
    "\n",
    "[2]<a id='cite_erfc'></a> Carmelo Evoli, Andrei Mesinger, and Andrea Ferrara, “Unveiling the nature of dark matter with high redshift 21 cm line experiments,” JCAP 1411, 024 (2014), arXiv:1408.1109 [astro-ph.HE].\n",
    "\n",
    "[3]<a id='cite_excess'></a> Francesca Calore, Ilias Cholis, Christopher McCabe, and Christoph Weniger, “A Tale of Tails: Dark Matter Inter- pretations of the Fermi GeV Excess in Light of Back- ground Model Systematics,” Phys. Rev. D91, 063003 (2015), arXiv:1411.4647 [hep-ph]\n",
    "\n",
    "[4]<a id='cite_AMS'></a> Ming-Yang Cui, Qiang Yuan, Yue-Lin Sming Tsai, and Yi-Zhong Fan, “Possible dark matter annihilation signal in the AMS-02 antiproton data,” Phys. Rev. Lett. 118, 191101 (2017), arXiv:1610.03840 [astro-ph.HE]."
   ]
  }
 ],
 "metadata": {
  "cite2c": {
   "citations": {
    "6232408/3KKTSI4D": {
     "DOI": "10.1103/PhysRevD.94.063507",
     "abstract": "Dark matter annihilation or decay could have a significant impact on the ionization and thermal history of the universe. In this paper, we study the potential contribution of dark matter annihilation (s-wave- or p-wave-dominated) or decay to cosmic reionization, via the production of electrons, positrons and photons. We map out the possible perturbations to the ionization and thermal histories of the universe due to dark matter processes, over a broad range of velocity-averaged annihilation cross sections/decay lifetimes and dark matter masses. We have employed recent numerical studies of the efficiency with which annihilation/decay products induce heating and ionization in the intergalactic medium, and in this work extended them down to a redshift of 1+z=4 for two different reionization scenarios. We also improve on earlier studies by using the results of detailed structure formation models of dark matter haloes and subhaloes that are consistent with up-to-date N-body simulations, with estimates on the uncertainties that originate from the smallest scales. We find that for dark matter models that are consistent with experimental constraints, a contribution of more than 10% to the ionization fraction at reionization is disallowed for all annihilation scenarios. Such a contribution is possible only for decays into electron/positron pairs, for light dark matter with mass mχ≲100  MeV, and a decay lifetime τχ∼1024–1025  s.",
     "author": [
      {
       "family": "Liu",
       "given": "Hongwan"
      },
      {
       "family": "Slatyer",
       "given": "Tracy R."
      },
      {
       "family": "Zavala",
       "given": "Jesús"
      }
     ],
     "container-title": "Phys.Rev.",
     "id": "6232408/3KKTSI4D",
     "issue": "6",
     "issued": {
      "day": 8,
      "month": 9,
      "year": 2016
     },
     "page": "063507",
     "page-first": "063507",
     "title": "Contributions to cosmic reionization from dark matter annihilation and decay",
     "type": "article-journal",
     "volume": "D94"
    },
    "6232408/5QGGVCIF": {
     "URL": "https://journals.aps.org/prd/abstract/10.1103/PhysRevD.91.063003",
     "accessed": {
      "day": 18,
      "month": 3,
      "year": 2019
     },
     "id": "6232408/5QGGVCIF",
     "title": "Phys. Rev. D 91, 063003 (2015) - A tale of tails: Dark matter interpretations of the Fermi GeV excess in light of background model systematics",
     "type": "webpage"
    },
    "6232408/DNWD4W9M": {
     "URL": "https://arxiv.org/abs/1903.02549v1",
     "abstract": "An excess of $\\sim$10-20 GeV cosmic-ray antiprotons has been identified in\nthe spectrum reported by the AMS-02 Collaboration. The systematic uncertainties\nassociated with this signal, however, have made it difficult to interpret these\nresults. In this paper, we revisit the uncertainties associated with the time,\ncharge and energy-dependent effects of solar modulation, the antiproton\nproduction cross section, and interstellar cosmic-ray propagation. After\naccounting for these uncertainties, we confirm the presence of a 4.7$σ$\nantiproton excess, consistent with that arising from a $m_χ \\approx 64-88$\nGeV dark matter particle annihilating to $b\\bar{b}$ with a cross section of\n$σv \\simeq (0.8-5.2) \\times 10^{-26}$ cm$^{3}$/s. If we allow for the\nstochastic acceleration of secondary antiprotons in supernova remnants, the\ndata continues to favor a similar range of dark matter models ($m_χ\\approx\n46-94$ GeV, $σv \\approx (0.7-3.8)\\times 10^{-26}$ cm$^3/$s) with a\nsignificance of 3.3$σ$. The same range of dark matter models that are\nfavored to explain the antiproton excess can also accommodate the excess of\nGeV-scale gamma rays observed from the Galactic Center.",
     "accessed": {
      "day": 18,
      "month": 3,
      "year": 2019
     },
     "author": [
      {
       "family": "Cholis",
       "given": "Ilias"
      },
      {
       "family": "Linden",
       "given": "Tim"
      },
      {
       "family": "Hooper",
       "given": "Dan"
      }
     ],
     "id": "6232408/DNWD4W9M",
     "issued": {
      "day": 6,
      "month": 3,
      "year": 2019
     },
     "language": "en",
     "shortTitle": "A Robust Excess in the Cosmic-Ray Antiproton Spectrum",
     "title": "A Robust Excess in the Cosmic-Ray Antiproton Spectrum: Implications for Annihilating Dark Matter",
     "title-short": "A Robust Excess in the Cosmic-Ray Antiproton Spectrum",
     "type": "article-journal"
    },
    "6232408/LH5Z9TEB": {
     "DOI": "10.1088/1475-7516/2014/11/024",
     "URL": "https://doi.org/10.1088%2F1475-7516%2F2014%2F11%2F024",
     "abstract": "Observations of the redshifted 21 cm line from neutral hydrogen will open a new window on the early Universe. By influencing the thermal and ionization history of the intergalactic medium (IGM), annihilating dark matter (DM) can leave a detectable imprint in the 21 cm signal. Building on the publicly available 21cmFAST code, we compute the 21 cm signal for a 10 GeV WIMP DM candidate. The most pronounced role of DM annihilations is in heating the IGM earlier and more uniformly than astrophysical sources of X-rays. This leaves several unambiguous, qualitative signatures in the redshift evolution of the large-scale (k ≃ 0.1 Mpc-1) 21 cm power amplitude: (i) the local maximum (peak) associated with IGM heating can be lower than the other maxima; (ii) the heating peak can occur while the IGM is in emission against the cosmic microwave background (CMB); (iii) there can be a dramatic drop in power (a global minimum) corresponding to the epoch when the IGM temperature is comparable to the CMB temperature. These signatures are robust to astrophysical uncertainties, and will be easily detectable with second generation interferometers. We also briefly show that decaying warm dark matter has a negligible role in heating the IGM.",
     "accessed": {
      "day": 17,
      "month": 3,
      "year": 2019
     },
     "author": [
      {
       "family": "Evoli",
       "given": "C."
      },
      {
       "family": "Mesinger",
       "given": "A."
      },
      {
       "family": "Ferrara",
       "given": "A."
      }
     ],
     "container-title": "Journal of Cosmology and Astroparticle Physics",
     "container-title-short": "J. Cosmol. Astropart. Phys.",
     "id": "6232408/LH5Z9TEB",
     "issue": "11",
     "issued": {
      "month": 11,
      "year": 2014
     },
     "journalAbbreviation": "J. Cosmol. Astropart. Phys.",
     "language": "en",
     "page": "024–024",
     "page-first": "024",
     "title": "Unveiling the nature of dark matter with high redshift 21 cm line experiments",
     "type": "article-journal",
     "volume": "2014"
    }
   }
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.1.-1"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
