diff --git a/.github/workflows/python-tests.yml b/.github/workflows/python-tests.yml
index 3b40e6f..9553140 100644
--- a/.github/workflows/python-tests.yml
+++ b/.github/workflows/python-tests.yml
@@ -42,13 +42,7 @@ jobs:
- name: Install package
run: |
pip install -e .
-
- - name: Debug SFR_III function
- env:
- CLASSDIR: ${{ github.workspace }}/class_public
- run: |
- python -c "import zeus21; from zeus21.sfrd import SFR_III; import inspect; print('SFR_III parameters:', inspect.signature(SFR_III)); print('Parameter count:', len(inspect.signature(SFR_III).parameters))"
-
+
- name: Run tests with coverage
env:
CLASSDIR: ${{ github.workspace }}/class_public
@@ -64,4 +58,4 @@ jobs:
flags: unittests
name: codecov-umbrella
verbose: true
- fail_ci_if_error: false
\ No newline at end of file
+ fail_ci_if_error: false
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
new file mode 100644
index 0000000..2d192e0
--- /dev/null
+++ b/.readthedocs.yaml
@@ -0,0 +1,21 @@
+# .readthedocs.yml
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+# Required
+version: 2
+
+# Build documentation in the docs/ directory with Sphinx
+sphinx:
+ configuration: docs/conf.py
+
+build:
+ os: ubuntu-24.04
+ tools:
+ python: "3.12"
+
+python:
+ install:
+ - requirements: requirements.txt
+ - method: pip
+ path: .
\ No newline at end of file
diff --git a/AUTHORS.rst b/AUTHORS.rst
new file mode 100644
index 0000000..ede4112
--- /dev/null
+++ b/AUTHORS.rst
@@ -0,0 +1,11 @@
+=======
+Authors
+=======
+
+* Julian B. Muñoz - `github.com/JulianBMunoz `_
+* Hector Afonso G. Cruz `github.com/hcruz1998 `_
+* Yonny Sklansky - `github.com/yonboyage `_
+* Emilie Thélie - `github.com/EmilieThelie `_
+* Sarah Libanore - `github.com/slibanore `_
+* Emily Bregou - `github.com/ebregou `_
+* Alessandra Venditti - `github.com/alessandra-venditti `_
diff --git a/README.md b/README.md
index 369c0c6..bc92315 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,9 @@
-
+
-# Zeus21: Lightning-fast simulations of cosmic dawn
+
+# Zeus21: Lightning-fast simulations of cosmic dawn and reionization
[](https://github.com/JulianBMunoz/Zeus21/actions/workflows/python-tests.yml)
[](https://codecov.io/gh/JulianBMunoz/Zeus21)
@@ -11,57 +12,5 @@ Zeus21 encodes the effective model for the 21-cm power spectrum and global signa
Zeus21 (Zippy Early-Universe Solver for 21-cm) pairs well with data from [HERA](https://reionization.org/), but can be used for any 21-cm inference or prediction. Current capabilities include finding the 21-cm power spectrum (at a broad range of k and z), the global signal, IGM temperatures (Tk, Ts, Tcolor), neutral fraction xHI, Lyman-alpha fluxes, and the evolution of the SFRD; all across cosmic dawn z=5-35. Zeus21 can use three different astrophysical models, one of which emulates 21cmFAST, and can vary the cosmology through CLASS.
-If you want to get started I recommend checking the Jupyter tutorials in `docs/`. Full documentation in [ReadTheDocs](https://zeus21.readthedocs.io/en/latest/), more coming soon. Here is an example power spectrum (at k=0.3/Mpc) and global signal as a function of redshift, for two cases of X-ray luminosity. You can run it yourself with the tutorial included!
-
-
-
-
-
-Currently you can find tutorials for:
-
-
-
Basics, running and plotting 21-cm power spectra and global signals.
-
UVLFs, comparing to HST and JWST predictions at high redshifts.
-
PopIII stars, and how they affect the cosmic-dawn 21-cm signal.
-
-
-## Installation
-
-You can download and install this package by doing:
-
-```
-git clone https://github.com/julianbmunoz/zeus21.git zeus21
-cd zeus21/
-pip install .
-```
-
-that should take care of all dependencies (remember to work in your favorite conda env). If you have issues with cache'd versions of packages you can add `--no-cache-dir` at the end of `pip install .`.
-
-**NOTE:** You may run into problems when pip-installing `classy` (the Python wrapper of `CLASS`). If so, their installation guide is [here](https://github.com/lesgourg/class_public/wiki/Installation), but in short the steps are:
-
-```
-git clone https://github.com/lesgourg/class_public.git class
-cd class/
-make
-cd python/
-python setup.py install --user
-```
-
-(modifying the Makefile to your `gcc` as needed)
-
-## Citation
-
-If you find this code useful please cite:
-
-[An Effective Model for the Cosmic-Dawn 21-cm Signal](https://arxiv.org/abs/2302.08506)
-
-and include a link to [this Github](https://github.com/JulianBMunoz/Zeus21).
-
-If you use the UVLF module please cite:
-
-[Breaking degeneracies in the first galaxies with clustering](https://arxiv.org/abs/2306.09403)
-
-And if you use relative velocites, Lyman-Werner feedback, or Population III stars please cite:
-
-[The First Billion Years in Seconds: An Effective Model for the 21-cm Signal with Population III Stars](https://arxiv.org/abs/2407.18294).
+Full **documentation** (with [installation instructions](https://zeus21.readthedocs.io/en/latest/installation.html), [tutorials](https://zeus21.readthedocs.io/en/latest/tutorials.html), and [full api description](https://zeus21.readthedocs.io/en/latest/api/modules.html)) can be found on [ReadTheDocs](https://zeus21.readthedocs.io/en/latest/).
diff --git a/docs/README.md b/docs/README.md
deleted file mode 120000
index 32d46ee..0000000
--- a/docs/README.md
+++ /dev/null
@@ -1 +0,0 @@
-../README.md
\ No newline at end of file
diff --git a/docs/Tutorial_Zeus21_Basics.ipynb b/docs/Tutorial_Zeus21_Basics.ipynb
deleted file mode 100644
index e0d0166..0000000
--- a/docs/Tutorial_Zeus21_Basics.ipynb
+++ /dev/null
@@ -1,422 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This tutorial will cover the basics up to predicting the 21-cm power spectrum and global signal, assuming PopII stars only (see separate tutorial for PopIII). We will start by importing the necessary packages (Zeus, numpy, class)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import zeus21\n",
- "from matplotlib import pyplot as plt\n",
- "import numpy as np\n",
- "\n",
- "\n",
- "#set up the CLASS cosmology\n",
- "from classy import Class\n",
- "ClassCosmo = Class()\n",
- "ClassCosmo.compute()\n",
- "\n",
- "#and the user parameters\n",
- "UserParams = zeus21.User_Parameters(precisionboost=1.2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we set up the cosmology and astrophysics -- This will do the bulk of the work\n",
- "\n",
- "We begin by running CLASS, where you can change the input parameters as shown below. Then we save the cosmo parameters, the correlation functions, and the halo mass function at all desired z and M.\n",
- "\n",
- "After that we set up the astro parameters, calculate the SFRD and with it all the global signal and related quantities. In principle one can re-run the astrophysics part only if you're certain of the cosmology parameters. With the current implementation they take a comparable amount of time (classy takes ~5s and Zeus ~3s)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "CLASS has run, we store the cosmology.\n"
- ]
- }
- ],
- "source": [
- "#set up your parameters here, as an example the CDM (reduced) density\n",
- "omega_cdm = 0.12\n",
- "CosmoParams_input = zeus21.Cosmo_Parameters_Input(omegac = omega_cdm)\n",
- "ClassyCosmo = zeus21.runclass(CosmoParams_input)\n",
- "print('CLASS has run, we store the cosmology.')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Correlation functions saved.\n",
- "HMF interpolator built. This ends the cosmology part -- moving to astrophysics.\n",
- "SFRD and coefficients stored. Move ahead.\n"
- ]
- }
- ],
- "source": [
- "#define all cosmology (including derived) parameters, and save them to the CosmoParams structure\n",
- "CosmoParams = zeus21.Cosmo_Parameters(UserParams,CosmoParams_input, ClassyCosmo) \n",
- "CorrFClass = zeus21.Correlations(UserParams, CosmoParams, ClassyCosmo)\n",
- "print('Correlation functions saved.')\n",
- "HMFintclass = zeus21.HMF_interpolator(UserParams,CosmoParams,ClassyCosmo)\n",
- "print('HMF interpolator built. This ends the cosmology part -- moving to astrophysics.')\n",
- "\n",
- "#set up your astro parameters too, here the peak of f*(Mh) as an example\n",
- "epsilon_star = 0.15\n",
- "AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams, epsstar=epsilon_star)\n",
- "\n",
- "\n",
- "ZMIN = 10.0 #down to which z we compute the evolution\n",
- "CoeffStructure = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams, HMFintclass, zmin=ZMIN)\n",
- "zlist = CoeffStructure.zintegral\n",
- "print('SFRD and coefficients stored. Move ahead.')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The CoeffStructure holds all the information needed to find the 21-cm signal during cosmic dawn. It has saved the 21-cm global signal, the Wouthuysen-Field coupling, and all temperatures. It also has the effective biases $\\gamma_R$ for all $R$ (which will be used for the power spectrum below). This structure also has ancillary data like the evolution of the SFRD and Nion. If you want to learn what else the CoeffStructure holds, just do dir(CoeffStructure)\n",
- "\n",
- "Let us start by plotting the global signal."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(10.0, 25.0)"
- ]
- },
- "execution_count": 4,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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pW3h7OyMiRMnwsjICGXLloW/vz/++OMPLFmyRGDq/DVy5Ehs374dBw8eRLFixZR//2ZmZjAyMoJMJtOKfeWXtkNqaqpW7Cu/tB1KliypPvtKYdfbqZFz585JADItgwYNkiQp7bLXGTNmSNbW1pKBgYHUrFkz6ebNm2JDF4DPbYdHjx598jkA0rlz50RHz1df+n34mKpe8ppX2dkOGzdulL766ivJ0NBQqlWrlnTgwAFxgQvQl7bF8+fPpcGDB0u2traSoaGhVKVKFWnx4sWSQqEQGzwfZfX3v3nzZuU62rCv/NJ20JZ9ZXZ+Hz6mqvtKmSRJUj72LiIiIiKNwTFKRERERFlgUSIiIiLKAosSERERURZYlIiIiIiywKJERERElAUWJSIiIqIssCgRERERZYFFiYiIiCgLLEpEREREWWBRIiIiIsoCixIRERFRFliUiIj+Izw8HDKZLNPSvHlz0dGISAA90QGIiFSJvb09nj9/rvw6KioKrVu3RrNmzQSmIiJRZJIkSaJDEBGposTERDRv3hylSpXCwYMHoaPDg/BE2oZHlIiIsjBkyBDEx8fj9OnTLElEWopFiYjoE+bMmYMTJ07gypUrKFasmOg4RCQIT70REX1k79696NOnD44fP45WrVqJjkNEArEoERH9xz///IOGDRti3LhxGDlypPJxfX19lChRQmAyIhKBRYmI6D+2bNmC7777LtPjzs7OOH/+fOEHIiKhWJSIiIiIssDLOIiIiIiywKJERERElAUWJSIiIqIssCgRERERZYFFiYiIiCgLLEpEREREWWBRIiIiIsoCixIRERFRFliUiIiIiLLAokRERESUBRYlIiIioiz8H9Bx5z5no6YdAAAAAElFTkSuQmCC",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.plot(zlist,CoeffStructure.T21avg, 'k')\n",
- "plt.xlabel(r'z');\n",
- "plt.ylabel(r'$T_{21}$ [mK]');\n",
- "plt.xlim([10, 25])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "It has the usual absorption trough around $z\\sim15$ that we know and love (given so far we only have atomic-cooling haloes), and turns into emission at $z\\sim11$. Since we're stopping at `ZMIN=10` we don't get to see the bulk of reionization, but it's stored in CoeffStructure.xHI_avg.\n",
- "\n",
- "Let us plot the relevant temperatures too. Here is the CMB temperature $T_{\\rm CMB}$; the gas kinetic temperature $T_k$, which has an adiabatic/cosmological and an X-ray component; and the spin temperature $T_S$, which has the WF coupling in it (and we store its inverse in the code)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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fWDhQouLEhERKeOK3I3l5+fHzz//zLJly/j111/Jzc2lZcuW9OjRwxn1lSu1atWiYsWKpKens3r1ARYsqE9UFFzckUNERESuQZHCTnZ2NhUqVGDLli1069aNbt26OauucsnNzY369euzbds2WraMIzq6Ph06WF2ViIhI2VakbiwPDw/Cw8PJyclxVj3lXsOGDQGoUCGO4cOhcWOLCxIRESnjijxm57nnniuwcrIUL3vY2b17t8WViIiIuIYij9mZOnUqe/fuJTQ0lPDwcHx8fApc//XXX4utuPLIHnbi4uJYswZ274YhQ8DT0+LCREREyqgih53+/fs7oQyxs8/IiouLo2dPSEuDDh3g4mkREREpoiKHnRdffNEZdchF9padhIQEmjRJYft2P3bvVtgRERG5Vte067k4j7+/P8HBwQAEB5vjdjR8R0RE5NoVOey4ubnh7u5+1UOun711x8cnDgAtqCwiInLtityNNW/evAJfZ2VlsXnzZqZPn85LL71UbIWVZw0bNry4g7wZdtSyIyIicu2KHHb69et32blBgwZx8803M2vWLIYNG1YshZVn9kHK584p7IiIiFyvYhuzExkZydKlS4vr6co1ezfWiRNm2Dl6FM6ft7IiERGRsqtYwk56ejrvvPMOtWrVKo6nK/fsYWf//j1UrZoLwN69VlYkIiJSdhW5G6tq1arYbDbH14ZhkJqaSqVKlfjyyy+LtbjyKiIiAg8PD86fP0+DBsc4ezaM3buhaVOrKxMRESl7ihx23nrrrQJhx83NjerVqxMZGUnVqlWLtbjyytPTk7p167J7924CA+OAMI3bERERuUZFDjvdunUjLCysQOCxO3z4MLVr1y6Wwsq7hg0bsnv3bipUiAN6aPq5iIjINSrymJ2IiAhOnjx52fnTp08TERFRLEVJ3rid7GwtLCgiInI9ihx2DMO44vlz585RoUKF6y5ITPawk5wch48PVKxocUEiIiJlVKG7sUaPHg2AzWbjhRdeoFKlSo5rOTk5rF+/nubNmxd7geWVfa2d+Pg4UlPhCr2GIiIiUgiFDjubN28GzJad7du34+Xl5bjm5eVFs2bNGDt2bPFXWE41atQIgEOHDpGefr5AuBQREZHCK3TYWb58OQAPP/wwU6ZMwc/Pz2lFCVSvXp3AwEBOnTrFrl27aNWqldUliYiIlElFHrPz2Wef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NHCUzZuhdMRVERGR0qnIYefAgQPcfvvt+Pj4OGZgVa1alSpVqhTrbKyEhAQAgoODC5wPDg52XEtISMDLy+uyn5v/nisZN24cycnJjuPIkSPFVrezeXt7O3aXd3PbzKlTcOyYxUWJiIiUYkUes3P//fcD8OmnnxIcHIzNZiv2ovK79PkNw/jTn/ln93h7e+Pt7V0s9VmhRYsWbNu2jYCAXzl5si9btkCtWlZXJSIiYspOT2fbt98Su3w56zIziY2N5cMPP6Rbt26W1FPksLNt2zY2bdpEw4YNnVGPQ0hICGC23tSoUcNxPjEx0dHaExISQmZmJmfPni3QupOYmEj79u2dWp+VWrVqxfTp0/H03ACYg5T79LG4KBERKbcSt28n9quviF2+nNjff2djSgrnL7knNja27ISdNm3acOTIEaeHnYiICEJCQoiJiXFMt87MzGTlypW8+uqrgPmh7+npSUxMDIMHDwYgPj6eHTt28Nprrzm1PitFXtwUKylpPWCwebNzW9dERETsstLS2LZrF7Hr1hEbG0vs999z4Ny5y+7zt9mIDAggauhQom691fHZZYUih52PP/6Yxx57jGPHjtG4cWM8PT0LXG/atGmhn+vcuXPs3bvX8fWBAwfYsmUL1apVo3bt2owaNYpJkyZRv3596tevz6RJk6hUqRL33XcfYK7aPGzYMMaMGUNAQADVqlVj7NixNGnShB49ehT1VyszmjVrhpeXF+fPnwb2s2XLDVaXJCIiLurEli3Efv212WqzezcbU1JIv+QeG3CTtzdRERG0i4oiauBAGvXqhVspWQKmyGHn5MmT7Nu3j4cffthxzmazOcbJ5BRh/4KNGzfStWtXx9ejR48GYOjQoXz++ec8/fTTpKen88QTT3D27FkiIyNZsmSJY40dgLfeegsPDw8GDx5Meno63bt35/PPP3fJNXbsvL29adGiBevXrwfWc+DADSQlQZUqFhcmIiJlWlZWFlu3biV2xgxi581j3fHjHLjC53oVHx/a3XIL7dq1I6pJEyLbtsW/FA8eLfI6OzfddBM33ngjTz/99BUHKIeHhxdrgSWhrGwEmt/f//53pk6diq/v30hNncKKFdC5s9VViYhImWEYJGzaxLpZs8xWm9xcNv7+O+npBdttbMDNFSqYrTbt2xM1cCANo6NLRatNYT+/i9yyc+jQIb7//nvq1at3XQXK9WnXrh1Tp04lIGAdb7wBDRpYXZGIiJRmWefOsXXWLGJ/+IHYX38l9vhxDl6p1aZKFdq1aEGUmxtRvXrR9t578a9Z04KKi0+Rw063bt3YunWrwo7F7AO9jh/fwoMPZpTpqfQiIlLMDIMTGzcSu2kTsQcOEBsby8ZffiE93+4BkK/Vpm5dovr0Ierhh2nQoAFubte15nCpU+Swc8cdd/CPf/yD7du306RJk8sGKPft27fYipOri4iIIDAwkFOnTrFlyxZLR7mLiIi1spKT2TZ7NrE//mgGnPj4K4+1cXOjXWAgUU2bmq02992Hf77lXVxVkcfs/FHaK+oA5dKiLI7ZAejTpw8LFixg7Ngp1KnzNx56CHx8rK5KRESc7eTJk8TGxrJ29WpiP/iADampV54h5e9P1F13ERUVRVRUFA0bNnSpVhunjdnJzc29rsKk+ERGRrJgwQLee2896enQpAl06mR1VSIiUpyyk5PZMXs2a+1jbZKS2HeVdW3aVa9OVLNmRPXqReR99+F/cYHe8q7IYSe/CxcuUKFCheKqRYrI3nXl4bGeXr2gFAyMFxGR63T69GnWvfEGsYsXs3b3bn45d460K9x30003mS02ISFEdelCo65dS8UMqdKoyGEnJyeHSZMmMW3aNE6cOMHu3bupW7cuzz//PHXq1GHYsGHOqFOuoG3btgCkpu5jxoxTBAYGWlyRiIgURU5yMr/Nnk1sTAyxlSqxdu1adu/efdl9fjYbkdWr0755c7PV5sEHqRIQYEHFZVORw87LL7/M9OnTee2113j00Ucd55s0acJbb72lsFOCqlSpQsOGDYmLi+OXX37htttus7okERG5GsMgedMm1s+axdrly1kbF8f6c+dIucKtDUNCaB8QQFSHDkTddRc3du3q0ovlOluRw84XX3zBhx9+SPfu3Xnssccc55s2bcrvv/9erMXJn4uMjCQuLo7169fTsuVt+PpqkLKISGlgJCez99gx1m7YwNq1a4mdO5cdp05x6awgH5uNttWr037QIKJuu4127doRoFabYlXksHPs2LErrrGTm5tLVlZWsRQlhRcZGckXX3zBf/+7jn/9C2bPhkGDrK5KRKScyc0lfetWNs6axdply1j7+++sTU3l1BVurXtxNeKo9u1pP3gwTbp1w8PjuobQyp8o8qt78803s3r16su2hZg9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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.plot(zlist,CoeffStructure.T_CMB,'r--')\n",
- "plt.plot(zlist,CoeffStructure.Tk_avg,'b-.')\n",
- "plt.plot(zlist,1.0/CoeffStructure._invTs_avg,'k')\n",
- "plt.xlabel(r'z');\n",
- "plt.ylabel(r'Temperatures [K]');"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This lines up with our expectation from the 21-cm global signal above. Absorption begins when $T_S$ departs from $T_{\\rm CMB}$, at $z\\sim 20$, as it begins to couple to $T_k$. It turns into emission at $z\\sim 11$ when $T_S\\sim T_k > T_{\\rm CMB}$. Full WF coupling only occurs after there has been some X-ray heating, so we don't get a deep 21-cm trough for this model. This would be different with a lower X-ray luminosity $L_X$ as we will see below.\n",
- "\n",
- "Let's move now to the 21-cm fluctuations."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Computed the 21-cm power spectrum.\n"
- ]
- }
- ],
- "source": [
- "RSDMODE = 1 #which RSD mode you want, 0 is no RSDs (real space), 1 is spherical (as simulations usually take), 2 is mu~1 (outside the wedge, most relevant for observations)\n",
- "PS21 = zeus21.Power_Spectra(UserParams,CosmoParams, AstroParams, ClassyCosmo, CorrFClass, CoeffStructure, RSD_MODE = RSDMODE)\n",
- "print('Computed the 21-cm power spectrum.')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(1, 200)"
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#choose a k to plot\n",
- "klist = PS21.klist_PS\n",
- "kchoose=0.3;\n",
- "_ik = min(range(len(klist)), key=lambda i: np.abs(klist[i]-kchoose))\n",
- "\n",
- "plt.semilogy(zlist,PS21.Deltasq_T21[:,_ik], color='k', linewidth=2.0)\n",
- "plt.semilogy(zlist,PS21.Deltasq_T21_lin[:,_ik], color='gray', linewidth=1.2)\n",
- "\n",
- "plt.xlabel(r'$z$');\n",
- "plt.ylabel(r'$\\Delta^2_{21}\\,\\rm[mK^2]$');\n",
- "plt.legend([r'Full Zeus21', r'Linear'])\n",
- "\n",
- "plt.xlim([10, 25])\n",
- "plt.ylim([1,200])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This shows the evolution of the fluctuations at a particular scale (i.e., wavenumber $k$). We have shown the full result from Zeus21, as well as the linear approximation (which is also stored). We can flip the script now and show the 21-cm power against wavenumber at a particular redshift."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "(1, 200)"
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk8AAAG9CAYAAAAMdZLhAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUxxJREFUeJzt3XdcFHfiP/7XsvTeizQbFkREWsSOBWwoRVExoERN/NrOmH6mGJM7Yy6JJhdNzniWaDRcPGs08TABNaKJDRU7CoIUERCWXnbn90c+7E8ElYWFWeD1fDz2ITuzO/Nadd2XM+99j0QQBAFERERE1CRaYgcgIiIiak9YnoiIiIhUwPJEREREpAKWJyIiIiIVsDwRERERqYDliYiIiEgFLE9EREREKmB5IiIiIlKBttgBNJ1CoUB2djZMTEwgkUjEjkNERERNIAgCSkpK0KVLF2hpqfdYEcvTE6xfvx7r169HdXU1bt++LXYcIiIiaobMzEw4OTmpdZsSXp7l6YqLi2Fubo7MzEyYmpqKHYeIiIiaQCaTwdnZGUVFRTAzM1Prtnnk6RnqTtWZmpqyPBEREbUzrTHkhgPGiYiIiFTA8kRERESkApYnIiIiIhVwzBMREbVrcrkcNTU1YsegNqajowOpVCrKvlmeiIioXRIEAbm5uSgqKhI7ConE3Nwc9vb2bT4PI8sTERG1S3XFydbWFoaGhpzIuBMRBAHl5eXIy8sDADg4OLTp/lmeiIio3ZHL5criZGVlJXYcEoGBgQEAIC8vD7a2tm16Co8DxomIqN2pG+NkaGgochISU92ff1uPeWN5IiKidoun6jo3sf78WZ6IiIiIVMDyRERE1I6MHDkSy5YtU97v2rUr1q1bJ1qezojliYiIqA3NmTMHEomkwS01NVXt+0pPT290X3W3bt26qX2fT7J69Wr4+fnBxMQEtra2CA0NxY0bN+o9Zs+ePQgODoa1tTUkEgmSk5PbLJ8qWJ6IiIja2Lhx45CTk1Pv1hpFxtnZucF+cnJycPDgQUilUixatEjt+3ySY8eOYdGiRTh9+jTi4+NRW1uLoKAglJWVKR9TVlaGIUOG4KOPPmqzXM3B8kRERNTG9PT0YG9vX+8mlUoxZ84chIaG1nvssmXLMHLkyGbtRyqVNtiPRCLB//t//w8zZszAq6++qnxsVlYWpk+fDgsLC1hZWWHKlClIT09Xrn/8dCEAhIaGYs6cOcr7GzZsgJubG/T19WFnZ4epU6cq1/3888+YM2cO+vXrhwEDBmDLli3IyMjAuXPnlI+Jjo7Gu+++izFjxjTr9bYVliciIqJOoqamBhEREbC3t8emTZuUy8vLyxEYGAhjY2McP34cv/32G4yNjTFu3DhUV1c3adtnz57F0qVLsWrVKty4cQM///wzhg8f/sTHFxcXAwAsLS1b9qJEwEkyiYiow/D19UVubm6b79fe3h5nz55t8uN//PFHGBsbK++PHz8eP/zwQ2tEq2fx4sVITU3F2bNnoa+vr1z+/fffQ0tLC5s2bVJ+/X/Lli0wNzdHYmIigoKCnrntjIwMGBkZYdKkSTAxMYGrqysGDhzY6GMFQcDy5csxdOhQeHh4qOfFtSGWJyIi6jByc3ORlZUldoxnCgwMxFdffaW8b2Rk1Or7/Prrr7F161YkJCTAycmp3rpz584hNTUVJiYm9ZZXVlbi9u3bTdr+2LFj4erqiu7du2PcuHEYN24cwsLCGp3IdPHixbh06RJ+++235r8gEbE8ERFRh2Fvb98u9mtkZISePXs2WK6lpQVBEOotU8fs2b/99huWLl2KDRs2YPDgwQ3WKxQK+Pj44LvvvmuwzsbGpknZTExMcP78eSQmJuJ///sf3n33XaxcuRJnzpyBubm58nFLlizBgQMHcPz48QYlrr1geSIiog5DlVNnmsjGxgYpKSn1liUnJ0NHR6fZ28zMzERERARefPFFzJs3r9HHeHt7Iy4uDra2tjA1NX1itpycHOV9uVyOlJQUBAYGKpdpa2tjzJgxGDNmDN577z2Ym5vj119/RXh4OARBwJIlS7B3714kJia26TQJ6sYB40RERBpi1KhROHv2LL799lvcunUL7733XoMypYrKykqEhYXB0dERb775JnJzcxvcAGDWrFmwtrbGlClTcOLECaSlpeHYsWP4y1/+gnv37imzHTp0CIcOHcL169excOFCFBUVKff1448/4osvvkBycjLu3r2Lb7/9FgqFAr179wYALFq0CDt27MDOnTthYmKi3H9FRYVyG4WFhUhOTsbVq1cBADdu3EBycrIo49iehkeeiIiINERwcDDeeecdvP7666isrMQLL7yAmJgYXL58uVnb+/3335VTATg7Ozf6GEEQYGhoiOPHj+ONN95AeHg4SkpK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D+d5IiIiItIQLE9EREREKmB5IiIiIlIByxMRERGRClieiIiIiFTA8kRERESkApYnIiIiIhWwPD0BJ8kkIiKixnCSzGfgJJlERETtDyfJJCIiItIQLE9EREREKmB5IiIiIlIByxMRERGRClieiIiIiFTA8kRERESkApYnIiIiIhWwPBERERGpgOWJiIiISAUsT0/Ay7MQERFRY3h5lmfg5VmIiIjaH16ehYiIiEhDsDwRERERqYDliYiIiEgFLE9EREREKmB5IiIiIlIByxMRERGRClieiIiIiFTA8kRERESkApYnIiIiIhWwPBERERGpgOWJiIiISAUsT0/ACwMTERFRY3hh4GfghYGJiIjaH14YmIiIiEhDsDwRERERqYDliYiIiEgFLE9EREREKmB5IiIiIlIByxMRERGRClieiIiIiFTA8kRERESkApYnIiIiIhWwPBERERGpgOWJiIiISAUsT0REREQqYHkiIiIiUgHL0xOsX78e7u7u8PPzEzsKERERaRCJIAiC2CE0mUwmg5mZGYqLi2Fqaip2HCIiImqC1vz85pEnIiIiIhWwPBERERGpgOWJiIiISAUsT0REREQqYHkiIiIiUgHLExEREZEKWJ6IiIiIVMDyRERERKQCliciIiIiFbA8EREREamA5YmIiIhIBSxPRERERCpgeSIiIiJSAcsTERERkQpYnoiIiIhUwPJEREREpAKWJyIiIiIVsDwRERERqYDl6QnWr18Pd3d3+Pn5iR2FiIiINIhEEARB7BCaTCaTwczMDMXFxTA1NRU7DhERETVBa35+88gTERERkQpYnoiIiIhUwPJEREREpAKWJyIiIiIVsDwRERERqYDliYiIiEgFLE9EREREKmB5IiIiIlIByxMRERGRClieiIiIiFTA8kRERESkApYnIiIiIhWwPBERERGpgOWJiIiISAUsT0REREQqYHkiIiIiUgHLExEREZEKWJ6IiIiIVMDyRERERKQCliciIiIiFWg350kHDhxQ+Tljx46FgYFBc3ZHREREpDGaVZ5CQ0NVerxEIsGtW7fQvXv35uyOiIiISGM0+7Rdbm4uFApFk26GhobqzExEREQkmmaVp9mzZ6t0Cu7555+Hqalpc3ZFREREpFEkgiAIYofQZDKZDGZmZiguLmYBJCIiaida8/Ob37YjIiIiUoHK5amiogJZWVkNll+5ckUtgYiIiIg0mUrlaffu3ejVqxcmTJgAT09P/P7778p10dHRag8npvXr18Pd3R1+fn5iRyEiIiINolJ5+vDDD3H+/HlcvHgRmzdvxgsvvICdO3cCADra0KlFixbh6tWrOHPmjNhRiIiISIOoNM9TTU0NbGxsAAC+vr44fvw4wsPDkZqaColE0ioBiYiIiDSJSkeebG1tcenSJeV9KysrxMfH49q1a/WWExEREXVUKpWn7du3w9bWtt4yXV1d7Nq1C8eOHWvweJlM1rJ0RERERBpGpfLk5OQEe3t7AMAnn3xSb92QIUPq3ZfJZAgKCmphPCIiIiLN0ux5nt555x1s2bKl0XWlpaUIDg7mkSciIiLqcJpdnrZv346FCxdi37599ZaXlpYiKCgIhYWFSEhIaGk+IiIiIo2i0rftHjV16lQUFRUhKioKhw4dQmBgIEpLSzFu3Djk5+fj2LFjsLOzU2dWIiIiItE1uzwBwLx581BYWIjQ0FDs378f77zzDnJzc3Hs2DE4ODioKyMRERGRxmhReQKA119/HQ8fPsTo0aPRtWtXHDt2DI6OjurIRkRERKRxml2ewsPD693X0dGBtbU1li5dWm/5nj17mrsLIiIiIo3T7PJkZmZW7/7MmTNbHIaIiIhI0zW7PD1pmgIiIiKijqzFY54AoLKyEpcuXUJeXh4UCoVyuUQiQUhIiDp2QURERKQRWlyefv75Z0RHR6OgoKDBOolEArlc3tJdEBEREWmMZk+SWWfx4sWIjIxETk4OFApFvRuLExEREXU0LS5PeXl5WL58OSfEJCIiok6hxeVp6tSpSExMVEMUIiIiIs0nEQRBaMkGysvLMW3aNNjY2KB///7Q0dGpt/7xeZ/aG5lMBjMzMxQXF8PU1FTsOERERNQErfn53eIB4zt37sSRI0dgYGCAxMRESCQS5TqJRNLuyxMRERHRo1pcnt5++22sWrUKb775JrS0WnwWkIiIiEijtbjtVFdXY/r06SxORERE1Cm0uPHMnj0bcXFx6shCREREpPFafNpOLpfj448/xpEjR+Dp6dlgwPhnn33W0l0QERERaYwWl6fLly9j4MCBAICUlJR66x4dPE5ERETUEbS4PCUkJKgjBxEREVG7wFHeRERERCpoVnm6dOkSFApFkx9/5coV1NbWNmdXRERERBqlWeVp4MCBKCgoaPLjAwICkJGR0ZxdEREREWmUZo15EgQB77zzDgwNDZv0+Orq6ubshoiIiEjjNKs8DR8+HDdu3Gjy4wMCAmBgYNCcXRERERFplGaVp8TERDXHICIiImof+G07IiIiIhWwPBERERGpgOWJiIiISAVtWp7OnTvXlrsjIiIiUrs2LU9hYWFtuTsi6iRKSkqQkpKCnJwcTshLRK2uxde2e1xkZGSjywVBQGFhobp3R0Sd2M2bN/H5559j69atKC8vB/DnBcmtra1hZ2cHOzs72NvbK39+/L6NjQ20tdX+z6BKBEFAcXExMjMzkZmZiezsbJibm6N3795wc3ODvr6+qPmIqCG1/6tx9OhRbN++HcbGxvWWC4KA48ePq3t3RNTJCIKAhIQErF27Fj/++GOj6x88eIAHDx4gJSXlqdt6vGjZ2trCwsICFhYWsLS0bPRnCwsLGBoaQiKRNClvcXEx7t27pyxHjf1cVlb2xHxdu3ZF796969369OkDBweHJmcgIvVSe3kaOXIkjI2NMWLEiAbrBg4cqO7dEVEnUVVVhV27dmHt2rW4dOlSvXWGhoaYNGkSKioqkJubi/v37+P+/fuoqqp66jZVKVqP0tXVfWKxKi8vr1eOSkpKmvV66/KlpaUhLS0NP//8c711xsbGDUpV79690atXryZf/YGImkciCIIgdghNJpPJYGZmhuLiYpiamoodh6jTycvLw9dff40NGzbg/v379dY5OztjyZIlmDdvHiwsLOqtEwQBMpmsXpl69OfH7z+raLUGQ0NDODs7w8nJSfmro6Mj8vPzcePGDVy/fh03btxQuYA5OzvDysoKhoaGMDIyavTXpqwzMDCodxP7FCeRKlrz81vl8lRRUYHCwkI4OjrWW37lyhX069evyY9pS2FhYUhMTMTo0aOxe/dulZ7L8kQkjpSUFKxbtw47duxoUGyee+45vPzyywgPD4eOjk6L91VXtPLz81FYWIiHDx8qb4/eb+zn0tLSRrepr68PZ2fneuXo8aJkYWHxzFNvgiAgNzcXN27cqFeobty4gfT0dCgUiha//qbS1tZuUKgevRkaGta7b2RkBEtLS1hZWcHKygrW1tbKn62srKCnp9dm2anz0ZjytHv3brz88suwtLSEIAj45ptv8NxzzwEAvL29cf78+SY9pq0lJCSgtLQU27ZtY3ki0mAKhQI///wz1q5di6NHj9Zbp6WlhYiICLz88ssICAgQKWFDNTU19cpWXWmytLRs9TFJVVVVSE1NbVCqUlNTUVJSovEXZTcyMmpQqB4vWZaWljAzM6t3MzIy4ngveqbW/PxW6Rjshx9+iPPnz8PGxgZnz57F7NmzsWLFCkRFRTXpMWKdIQwMDOT1+Ig0WHl5Ob799lt8/vnnuH79er11pqammD9/PpYsWQJXV1eREj6Zjo4ObG1tYWtr2+b71tPTQ79+/Z54RL+mpgYVFRUoKytDeXm58tdHf37arxUVFU26NXd6iLKyMpSVleHu3bsqPU8qlcLU1LRBqTI3N2+wzMzMDKampjA2NoaJiQmMjY2VP6sy8J/oUSqVp5qaGtjY2AAAfH19cfz4cYSHhyM1NbVJj2nOX9Ljx4/jH//4B86dO4ecnBzs3bsXoaGh9R6zYcMG/OMf/0BOTg769euHdevWYdiwYSrvi4haV0VFBdLT05Genq4cCJ2WloaEhIQGU5l0794df/nLXxAbGwsTE5OnblehUKC2tha6urqtGb/d0dHRgY6OTqsfNa+trW20VJWWlqKgoKDeLT8/v8H9wsJCyOXyJu9PLpcrj/S1hEQigZGRUYNS9fjPJiYmMDIyavLNwMCApayDU6k82dra4tKlS/D09AQAWFlZIT4+HrNnz1Z++6Upj1FFWVkZBgwYgNjYWERERDRYHxcXh2XLlmHDhg0YMmQI/vWvf2H8+PG4evUqXFxcVN4fETVfbW0tMjMz6xWjR2+5ubnP3Mbw4cPx8ssvIyQkBFKp9ImPEwQB9+/fx8WLF5GSkoLS0lLY2dmha9eu6NatG1xdXTlHUhvR1taGiYnJM0vukygUCshkskbLVWFhIYqLi596q6mpadZ+BUFAaWnpE8etNZdEIlEOuq+7GRsbN/j5Sb8+bZ06xvhRy6k05unevXvQ1taGvb19g3UnT57EkCFDcO/ePejo6MDOzg7Jycnw8vJq8Jhmh5VIGhx5eu655+Dt7Y2vvvpKuaxv374IDQ3F6tWrlcsSExPx5ZdfPnPMU1VVVb3BqTKZDM7OzhzzRB3KrVu3sG3bNhw+fBiVlZXQ1tZW3qRS6TN/fvS+QqFARkYG0tLSkJmZqdIRhDq6urqIjIzEyy+/DG9v76c+ViaT4dKlS7h06RIePHgAALCwsIC9vT0yMjKUcyZJJBI4ODiga9eu6Nq1K1xcXDhAuQMSBAGVlZVPLVclJSUoKSlRFqW6nx9fVlJS0qy/v21JX1+/0VOTj5+mfNI6c3PzTvM+0JgxT05OTk9cV1eKTExM8N133+Hf//43Ll68WO9ceEuKU2Oqq6tx7tw5vPnmm/WWBwUFISkpqVnbXL16Nd5//311xCPSKEVFRYiLi8O2bdtw6tSpNt+/vb09unXrhm7duimPDtXdnJ2dn/o/6qqqKly9ehWXLl1Ceno6AMDAwAC+vr7w9PSEk5MTJBIJBEFAfn4+0tLSlKcHs7OzkZSUBIlEAkdHR+W+n7VPah8kEony232N/cdeFYIgoLq6ukG5KikpUY7PetqttLT0iesqKyvV8norKytRWVnZYNoOVZiamjaYbf9JP/PobePUNmnHr7/+is2bN2PPnj0wMTHB0KFDkZycrK7NNyo/Px9yuRx2dnb1ltvZ2dU7PRAcHIzz58+jrKwMTk5O2Lt3L/z8/Brd5ltvvYXly5cr79cdeSJqj2praxEfH4+tW7di//79Db7yr6WlBSMjI9TW1kIul6O2trbZX323sLCoV4geLUhdu3aFgYGBStuTy+W4ffs2Ll26hBs3bqC2thZSqRR9+/aFp6cn3NzcGpzWk0gksLGxgY2NDfz9/ZWn9urK1N27d3Hv3j389ttvkEqlcHJyUh6ZcnJy4jxGnZxEIoGenh709PRgbW2t1m3L5XLlQPxHS1bdz01ZVlpaCplMpjyiJpPJmvVFLJlMBplMhlu3bj3zsWZmZg1KlYODA9zc3JSXEFL1vd0RtOhfinv37mHr1q3YsmUL7t+/jylTpmD37t0IDg7GtWvXsG/fPjXFfLrHB+YJglBv2ZEjR5q8rbo3DlF7lpKSgm3btmHHjh2NjjPy8PDAnDlzMGPGDHTp0qXe+0UQBGWRerRUPelnQRDg6OgIMzOzFucWBAHZ2dm4ePEirly5orxenYuLCzw9PeHu7q7SP9QSiQT29vawt7dHQEAAFAoFcnNz65Wpu3fv4tixY9DW1oaLiwu6d++OHj16wM7OjoN+SW2kUmmLxoU1RqFQoLS09Jljwh69PXz4EHl5ecjNzW3S5Kt1z7t582aj6yUSCVxcXNCrV68GM907OztDS0tLba9XkzS7PE2YMAEJCQkYNWoUVq1ahdDQUBgZGSnXt8U/OtbW1pBKpQ0+HPLy8hocjSLq6PLz87Fz505s27at0fnUrK2tERUVhRkzZkBHRwfXr1/H5s2bIZFIlN8uauxW940jc3Pzpw7gbi5BEFBUVIRLly7h8uXLKCgoUOYdNGgQ+vfvD3Nzc7XsS0tLC126dEGXLl0wZMgQyOVyZGdn1ytTd+7cwdGjR2FoaIgePXqge/fu6N69O8c8ksbR0tKCqakpTE1Nm3WGpKKiotHZ9hubif9JRUsQBOV/QuLj4+utMzAwUB6herxcqeM/W2Jq9uVZtLS0EBUVhWXLlsHX17fB+itXrsDT01Otg++eNGDcx8cHGzZsUC5zd3fHlClT6g0Yby5OkkmarLq6GocPH8bWrVtx6NChBvPt6OjoYNKkSYiKikKXLl1w69Yt3L17F4IgQEtLC926dYNUKlWO7SgrK3vqaTsDA4N6parum0EKhQI1NTWora1V/lp3a2z548vqGBkZwcPDA56enqJc+LampgYZGRm4ffs27ty5U29ciY2NjfKolKurK6dFoE6lrmjl5uYiMzMTN2/exI0bN5S/FhUVqbS9Ll26YMSIEQgMDMSoUaPQvXt3tb/fNWaG8UedOnUKmzdvRlxcHBwcHDBr1ixERUWhZ8+eANRXnkpLS5XzSA0cOBCfffYZAgMDYWlpCRcXF8TFxSE6Ohpff/01AgICsHHjRnzzzTe4cuWKWibUY3kiTZSfn48PP/wQO3bsUB6peZSPjw+io6PRr18/ZGRkIDMzE8CfXynv2bMn+vbti169ejUYDCoIAsrLy5XjKx7/RtKjt6ZcC04ikUBbWxs6OjrKb+nV/fzoMgMDA/Tt2xc9evTQqMP8paWluHPnDu7cuYPbt28rv9IulUrh7OysLFNiFD0iTVF3ge1Hy1Td7fbt202aRNXZ2RmjRo1Slil1jDXWyPJUp7y8HN9//z02b96MU6dOwc/PD7NmzUK/fv0wduzYFpenxMREBAYGNlg+e/ZsbN26FcCfk2R+/PHHyMnJgYeHB9auXYvhw4e3aL91WJ5I0/zyyy+Ijo5GTk5OveUODg6Ijo6Gv78/CgoKlOt1dHTQq1cv9O3bF25ubmo7YlJTU6M8WlU3bcHjxUhLS6vDlIq6D4i6o1Lp6enKDwUDAwNlkbK3t1fOyaNJRZBIDLW1tUhLS1OWqbpyde7cuafOr9WjRw9lmQoMDGzWNyk1ujw96saNG/j3v/+N7du34/79+5BIJBo/Z8aTrF+/HuvXr4dcLsfNmzdZnkh01dXVePfdd/Hxxx8rv2Gjr6+PyMhIDBs2DDU1NcjLywPw5xcfevfurTyaw6/kq1/dhKB1ZerxMgtAOVHi45MfNjYpYmuMJyPSVDU1NTh37hx+/fVXJCQk4LfffnvqdA59+/ZVHpUaOXIkrKysnrmPdlOe6sjlchw8eBCbN2/GgQMH1L35NsUjT6QJUlNTMXPmTJw9exbAn6ffoqOj4enpieLiYgB/Hv3o06cP+vbti+7du/PDuI2VlZUhLS0NhYWFDb5q3pTTnI+OJ+vRowd8fX35zV/qNKqqqvD7778ry9SpU6eeOnP8gAEDEBwcjJdeegndu3dv9DHtrjx1JCxPJLbt27dj4cKFykPcTk5OmD9/PgRBgLGxsbIwde3alaeJNFhtbW29+XqeNLePTCZDdXU19PX14e/vj+eeew6GhoZixydqU+Xl5UhKSlKWqTNnzjR6JksikSAkJARLly7FqFGj6g0TYHkSEcsTiUUmk2HhwoX47rvvAPz5j8TkyZPh7e0NiUSCESNGYOjQoSxMHUxtbS0uXbqEkydPorCwEDo6OvD19UVAQIBa5wgiak9KSkpw4sQJJCQk4Ndff8WFCxcaTBDar18/LF26FM8//zwMDQ1ZnsTE8kRiOH36NKKiopCWlgYAMDc3x4IFC6Cvrw9ra2uEhYWhS5cuIqek1qRQKHD16lWcOHECeXl5kEql8PLywpAhQ2BhYSF2PCJRPXjwAJs2bcL69euRlZVVb52FhQXmz5+P6Oho9O/fn+VJDCxP1JbkcjnWrFmDd999V3mIOiAgAOPGjYMgCPD398eYMWM4ALwTEQQBN2/exIkTJ5CVlQWJRIL+/ftj6NChsLGxETsekahqamqwb98+fP755zh58mS9dXXXu2R5EgHLE7WVrKwsREdHIyEhAcCfE0bGxMTAzs4OJiYmmDJlCnr06CFyShKLIAhIT0/HiRMnlEck+/Tpg2HDhvEoJBGAc+fO4Z///Cd27dqF6upq5XKWJxGwPFFb2L9/P1544QUUFhYCAHr37o0ZM2ZAIpHAw8MDEyZM6JQX36TG1V3c+MaNGwD+nBNn6NChcHV17TDzahE11/3797Fx40Z8+eWXyMvLY3lqS5znidpCRUUFXnnlFXz11VcAAF1dXYSHh6NPnz7Q19fHhAkT0L9/f5FTkqa6f/8+Tp48iZSUFAiCAGdnZwwdOhRubm4sUdTp5efnw8bGhuVJDDzyRK0lJSUFM2bMwJUrVwD8eXmC559/Hnp6eujWrRtCQ0P5d46apLCwECdPnkRycjIUCgXs7Ozw3HPPoV+/frwGH3Va/LadiFieSN0EQcBXX32F5cuXo6qqClKpFKNHj8bgwYOhra2NMWPGwN/fn0cOSGUymQxJSUk4f/48ampqoKurCw8PD3h7e6NLly78O0WdCsuTiFieSJ3Ky8sxf/587Ny5EwBgY2ODqKgoWFhYwMHBAWFhYfwGFbVYZWUlLl++jAsXLigvG2Nrawtvb294enpy/Bx1CixPImJ5InVJT09HWFgYkpOTIZFI4O/vj3HjxkFLSwtDhw7FiBEjeEkVUrucnBxcuHABly5dUh7p7Nu3L7y9vdG1a1cejaIOi+VJRCxPpA6//PILpk+fjoKCAhgaGmLatGno1q0bLCwsEBYWBmdnZ7EjUgdXU1ODa9eu4fz587h79y6APycTHDhwILy8vDh7OXU4LE8iYnmilhAEAWvXrsVrr70GhUIBR0dHREVFwcjICAMHDsS4ceM4oJfaXEFBAS5cuIDk5GSUlZVBIpHAzc0N3t7ecHNz4yV/qENgeRIRyxM11+Pjm3x9fTFhwgTo6Ohg0qRJ8PLyEjcgdXpyuRy3bt3C+fPnkZqaqrzYtJeXFwYOHAhLS0uxIxI1G8uTiFieqDkeHd9UV5YGDBgACwsLREZGwt7eXuyIRPXIZDIkJyfjwoULKCoqAgC4ublh0KBB6NatG8dGUbvD8iQilidS1aPjmywtLTFjxgzY2tqiV69eCA0N5TedSKMJgoC0tDScPXsW169fhyAIsLOzw6BBg+Dh4QFtbW2xIxI1CcuTCDjDOKnq8fFNvXv3RkREBHR1dREYGIhhw4bxf+/Urjx8+BC///47Lly4gOrqahgZGcHf3x++vr4wNDQUOx7RU7E8iYhHnqgpHh3fJJFIEBgYiOHDh0NfXx9Tp07lBX2pXausrMT58+fx+++/QyaTQVtbG56enhg0aBDnJSONxfIkIpYnepZHxzcZGhoiIiICPXr0gIODAyIjI2Fubi52RCK1kMvluHbtGk6dOoXs7GwAQM+ePREQEMBxUaRxWJ5ExPJET/Po+CZHR0dMnz4dpqam8PHxwbhx4zg+hDokQRCQmZmJ06dPK8dF2draYtCgQejfvz//3pNGYHkSEcsTNebx8U2+vr4YP348dHR0EBISwmkIqNNobFyUn58ffH19YWRkJHY86sRYnkTE8kSPe3R8k46ODiZOnAgvLy+YmZlhxowZnIaAOqUnjYsaOXIkZy8nUbA8iYjliR6VmpqKadOmITk5GZaWlso5m9zc3BAWFsZpCKjTUygUuHr1Kk6fPo2srCzo6upi2LBhGDRoEE/nUZtieRIRyxPV+f777/Hiiy+ipKQEvXv3RlhYGPT19TkNAVEjBEHAzZs3ceTIETx8+BCWlpYIDg5Gr169xI5GnQTLk4hYnqi8vBzLli3DN998Ay0tLWVZ0tXVRWRkJKchIHqK2tpanDp1CidOnEBNTQ169uyJ4OBgWFtbix2NOjiWJxGxPHVuV69exfTp05GSkgILCwtERETAyckJ9vb2mD59OqchIGoimUyGo0eP4vLly9DS0sJzzz2HESNGQE9PT+xo1EGxPImI5anz2rp1KxYtWoTy8nL0798fkyZNgp6eHgYPHoxRo0ZBKpWKHZGo3cnIyMDPP/+MnJwcGBkZYcyYMRgwYABPe5PasTyJgJdn6bxKS0uxcOFCbN++HXp6epgwYQIGDBgAfX19TJs2Dd27dxc7IlG7plAokJycjF9++QXl5eVwdHTE+PHj4ejoKHY06kBYnkTEI0+dy8WLFzF9+nTcuHEDjo6OiIiIgKWlJXr06IGwsDDOW0OkRpWVlUhMTMQff/wBQRDg5eWF0aNHw9jYWOxo1AGwPImI5alzEAQB//rXv7Bs2TJUV1djyJAhCAwMhLa2NsaNGwc/Pz+eViBqJQ8ePMDPP/+MO3fuQFdXFyNGjMBzzz3HU+PUIixPImJ56viKi4vx4osv4j//+Q9MTEwQFhaG7t27w9TUFFFRUbCzsxM7IlGHJwgCbty4gSNHjqCoqAhWVlYIDg6Gm5ub2NGonWJ5EhHLU8d29uxZTJ8+HXfu3EGvXr0QGhoKQ0NDeHl5YcKECdDR0RE7IlGnUltbi6SkJPz222+oqalBr169MGHCBJiZmYkdjdoZlicRsTx1TIIg4IsvvsBrr70GQRAQFBQEf39/SKVSREREoG/fvmJHJOrUZDIZ4uPjkZKSAh0dHYwePRp+fn7Q0tISOxq1EyxPImJ56ngKCwsRGxuLAwcOwMbGBlOnToWdnR3s7OwQFRXFP2ciDZKamooff/wRxcXFcHR0xOTJk2Frayt2LGoHWJ5ExPLUsSQlJWHGjBnIzMyEr68vgoODoa2tjREjRmDEiBH8Xy2RBqqurkZCQgJ+//13SCQSDB06FMOGDeO18uipWJ5ExPLUMcjlcnz00Ud47733oKuri8mTJ6Nv377Q1dXF888/D2dnZ7EjEtEzZGVl4eDBg7h//z6sra0REhICFxcXsWORhmJ5EhHLU/uXlZWF559/HomJiejatSvCw8NhamqK7t27Y9q0adDX1xc7IhE1kVwuR1JSEo4dOwa5XA5fX1+MHj2a72NqgOVJRCxP7duBAwcQGxuL4uJijBo1CoMHDwYATJ48GQMHDuTcTUTtVEFBAQ4ePIi7d+/CxMQEEyZMQJ8+fcSORRqE5UlELE/tU0VFBV577TWsX78e1tbWiIiIgIODA0xMTDBnzhxYWlqKHZGIWkgQBJw/fx7x8fGoqqqCu7s7xo8fzxnKCUDrfn5ztN0TPHptO2pfrl69ihkzZuDy5cvw8/NDUFAQtLW14efnh+DgYM5aTNRBSCQS+Pj4oFevXvjpp59w9epV3LlzB2PHjuWRZWpVPPL0DDzy1H4IgoCNGzdi2bJlkEqlmDJlCnr16gUtLS3ExMTA1dVV7IhE1IquXbuGw4cPo7S0FF27dsWkSZNgZWUldiwSCU/biYjlqX0oLCzE/PnzsWfPHri5uWHKlCkwNjaGi4sLZs6cycGkRJ1EZWUljh49inPnzimnIQkICOAR506I5UlELE+a7/jx45g1axbu37+PsWPHwt/fHwqFAlOmTIG3t7fY8YhIBHfv3sXBgwdRUFAAe3t7hIeHw8bGRuxY1IZYnkTE8qS5amtr8eGHH+KDDz6Ara0tIiIiYGNjAyMjI8yfP5/XwiLq5Gpra3Hs2DGcPHkSUqkUQUFB8PX15VioToLlSUQsT5rp7t27mDVrFpKSkhAQEIDRo0dDIpHA398f48eP50zhRKSUkZGBvXv3oqioCG5ubpg8eTK/kdcJsDyJiOVJ8+zevRvz58+HQqFAaGgounfvDgCYO3cunJycRE5HRJqosrISP/30Ey5dugRDQ0PlF0qo42J5EhHLk+YoLy/HsmXL8M0338Dd3R0hISEwMDCAk5MTYmJioKOjI3ZEItJwKSkpOHToECorK+Hr64ugoCD+29FBcZ4n6vRu376N0NBQ3Lx5E6GhofDy8kJtbS1CQkI4KJyImszDwwPOzs7Yt28fzp49i/T0dISHh8PBwUHsaNSO8MjTM/DIk/iOHj2KyMhIGBgYYOrUqbC0tIS+vj4WLlwIExMTseMRUTukUChw6tQp/PrrrwCAwMBADB48mOMlOxCethMRy5N4BEHAunXr8Oqrr8LT0xOTJk2CRCKBn5+f8mciopbIycnBnj17kJ+fD1dXV4SFhfGbuh0Ey5OIWJ7EUVlZiZdeegk7duxAcHAwnnvuOVRVVSE2NhZubm5ixyOiDqSmpgbx8fE4c+YM9PT0MGnSJHh4eIgdi1qI5UlELE9tLysrC2FhYbh69SoiIyPh6uoKhUKBV199lafpiKjV3Lx5EwcOHEBZWRk8PT0xfvx4Xp2gHWN5EhHLU9tKSkpCREQEpFIppk+fDlNTU1haWmLRokUci0BEra6srAz79+/HrVu3YGZmhvDwcLi4uIgdi5qhNT+/+WlEGuPf//43Ro4cCQcHB8TGxsLQ0BA+Pj5YsmQJixMRtQkjIyPMnDkTEyZMQFlZGbZu3Ypff/0Vcrlc7GikQThVAYmupqYGy5cvx1dffYVx48bBz88PlZWViImJQd++fcWOR0SdTN0XU7p164Y9e/bgxIkTSEtLw7Rp03gGggDwtN0TrV+/HuvXr4dcLsfNmzd52q6VPHjwAJGRkTh79iwiIyPh4uKCmpoavPbaa/zGCxGJTi6X45dffsGpU6dgZGSEqVOnomvXrmLHoibgmCcRccxT60lOTkZoaCjkcjkiIyNhamoKExMTLFu2jKfpiEijXL16Ffv370dNTQ3GjBmDgIAATpei4TjmiTqc//znPxg8eDCsrKwQGxsLAwMD9O/fH8uXL2dxIiKN4+7ujvnz58PKygrx8fHYvXs3qqqqxI5FIuGnFLUpuVyOv/71r4iKisLo0aMxefJkVFVVYfr06QgPDxc7HhHRE1lbW2PevHlwd3fH1atXsWnTJuTn54sdi0TA03bPwNN26lNcXIxZs2bh+PHjiIyMhLOzMyoqKvD666/D0tJS7HhERE0iCAJOnz6N+Ph46OjoYMqUKXB3dxc7Fj2GY55ExPKkHjdv3sTkyZNRXl6OyMhImJiYQE9PD6+99hqkUqnY8YiIVJaeno7du3ejrKwMgwcPxujRoznsQINwzBO1a5cuXcLQoUNhbGyMOXPmQF9fH71798abb77J4kRE7VbXrl3x4osvwsnJCUlJSdi+fTvKysrEjkVtgOWJWtW5c+cQGBgIT09PhISEoKKiAqGhoZgxY4bY0YiIWszU1BRz5syBn58f0tPT8a9//Qv37t0TOxa1MpYnajWnT5/G6NGj4e/vj2HDhqGoqAjLly+Hr6+v2NGIiNRGKpViwoQJCAsLQ0VFBbZs2YIzZ86Ao2I6LpYnahUnTpxAUFAQhg8fjkGDBuHhw4d4++234eDgIHY0IqJW4enpiblz58LMzAyHDx9WzgtFHQ/LE6ndL7/8gvHjx2PMmDHw8fHBw4cPsXLlSlhZWYkdjYioVdnb22P+/Pno1asXLl68iH//+994+PCh2LFIzVieSK1++uknhISEYOLEiRgwYAAKCwvxwQcfwNzcXOxoRERtwsDAADNmzEBgYCDu37+PjRs34tatW2LHIjVieSK12b9/PyIiIhAaGgp3d3c8fPgQq1evhomJidjRiIjalEQiwfDhwzFr1iwAwM6dO3H8+HGOg+ogWJ5ILX744QfMnDkTU6dORe/evVFUVIQ1a9bA0NBQ7GhERKLp2bMnXnzxRdjZ2SEhIQEHDhyAXC4XOxa1EMsTtdh3332HmJgYzJgxAz169EBxcTE+/vhj6OnpiR2NiEh0FhYWiI2NhZubG5KTk/Hdd9+hsrJS7FjUAixP1CKbN2/G/Pnz8fzzz8PV1RUymQwff/wxdHR0xI5GRKQx9PT0MGPGDPj6+iItLQ2bN29GUVGR2LGomVieqNm+/vprLFmyBDExMXByckJpaSk+/vhjaGtrix2NiEjjaGlpYcKECQgKCsKDBw+wadMmZGVliR2LmoHliZpl3bp1eO211zBnzhw4ODigoqICH3/8MS+3QkT0FBKJBAEBAYiMjERVVRW2bt2K69evix2LVMTyRCpbs2YNVq5cidjYWNja2qK6uhqrV6+GRCIROxoRUbvQt29fzJkzB3p6eoiLi8OpU6f4Tbx2hOWJmkwQBLz//vtYs2YNYmNjYWVlBUEQ8OGHH7I4ERGpyNHREXPnzoW1tTX+97//4aeffoJCoRA7FjUBy9MTrF+/Hu7u7vDz8xM7ikYQBAErVqzAl19+idjYWJiamkIqlWLlypUsTkREzWRhYYEXXngBXbt2xZkzZ/D999+jurpa7Fj0DBKBxwmfSiaTwczMDMXFxTA1NRU7jigEQcArr7yCnTt3IiYmBgYGBjAyMsLrr78udjQiog5BLpfj4MGDuHjxIuzt7REVFcUJhluoNT+/eeSJnumNN95AXFyc8vy8mZkZixMRkRpJpVJMmTIFI0eORG5uLjZt2oT79++LHYuegOWJnurrr7/Gt99+i5iYGGhra8POzg7Lly8XOxYRUYcjkUgwYsQIhIWFoaysDJs3b0ZqaqrYsagRLE/0RD/99BPefPNNzJo1C9ra2rC1tcXixYvFjkVE1KF5enoiOjoaWlpa2LlzJ86dOyd2JHoMyxM16uLFi5g1axZmzpwJU1NT1NbWYunSpWLHIiLqFFxdXTF37lyYm5vjxx9/RHx8PKcy0CAsT9RAVlYWJk2ahAkTJsDe3h65ubn429/+JnYsIqJOxdraGnPnzoWTkxOSkpKwe/du1NTUiB2LwPJEjyktLUVISAgGDBgANzc3ZGZm4pNPPoGWFv+qEBG1NSMjI8TExMDd3R1Xr17Fzp07UVVVJXasTo+fiKQkl8sxc+ZMGBgYwM/PD9nZ2Vi1ahWMjIzEjkZE1Gnp6Ohg6tSp8Pf3R3p6Onbs2IHKykqxY3VqLE+k9PLLL+POnTsICgpCfn4+Fi5ciC5duogdi4io05NIJBg3bhyGDBmCe/fuYdu2bSgrKxM7VqfF8kQAgC+++AJ79+5FeHg4SkpKMG7cOAwYMEDsWERE9H8kEgnGjBmDwMBA5ObmYtu2bSgpKRE7VqfE8kQ4cOAA3n//fcycORMKhQJubm6YOHGi2LGIiKgRw4cPR3BwMB48eIAtW7agqKhI7EidDstTJ3fu3DnExsYiKioKBgYG0NLSwksvvSR2LCIieopBgwZh0qRJePjwIbZs2YKCggKxI3UqLE+dWEZGBiZPnowpU6bA2toaeXl5eP/998WORURETeDj44OwsDCUlJRgy5YtyMvLEztSp8Hy1EnJZDJMmjQJgwYNgqurK+7evYu1a9dySgIionbE09MT06ZNQ0VFBbZu3Yrs7GyxI3UK/KTshGpqajBt2jRYW1vD09MTGRkZ+Oijj6Cvry92NCIiUlHfvn0xY8YM1NTU4Ntvv0VGRobYkTo8lqdORhAELF68GA8ePMCIESOQm5uLV155Bba2tmJHIyKiZnJzc8OsWbOgUCiwY8cO3LlzR+xIHRrLUyfzySef4OjRo5g0aRKKioowdepUuLu7ix2LiIhaqGvXroiJiVFeUPjmzZtiR+qwWJ46kd27d+OTTz5BZGQkampq4OnpidGjR4sdi4iI1MTJyQmzZ8+Gnp4e4uLicOXKFbEjdUgsT53E6dOnsWDBAkRFRUFHRwf6+vqIjY0VOxYREamZg4MD5syZA0NDQ/z3v/9FcnKy2JE6HJanTiAtLQ3h4eGIiIiAubk5CgoK8O6774odi4iIWomNjQ1iY2NhamqK/fv348yZM2JH6lBYnjq4hw8fYuLEiRg5ciS6dOmC9PR0rF27FhKJROxoRETUiiwtLREbGwtLS0scPnwYSUlJYkfqMFieOjBBEDB79my4urqid+/eSEtLw6effgpdXV2xoxERURswMzNDbGwsbG1tER8fj8TERAiCIHasdo/lqQP7/PPPkZ6ejkGDBuHevXtYsWIFLC0txY5FRERtyNjYGLNnz4aDgwOOHTuGY8eOiR2p3WN56qDOnDmDjz76CJMmTUJJSQkmTpwINzc3sWMREZEIDA0NERMToyxQp0+fFjtSu8by1AEVFxdj5syZCAsLg46ODrS1tREaGip2LCIiEpG+vj6ef/55WFtb48iRI7hw4YLYkdotlqcORhAEzJs3D3369IG9vT1u376NVatWiR2LiIg0gKGhIaKjo2Fubo6DBw9yHqhmYnnqYP71r3/h6tWr8PPzQ0ZGBlatWsUB4kREpGRqaoqYmBgYGRlhz549SE1NFTtSu8Py9ATr16+Hu7s7/Pz8xI7SZBcvXsTKlSsxefJklJaWIigoCN27dxc7FhERaRgLCwtER0crZyK/e/eu2JHaFYnA7yw+lUwmg5mZGYqLi2Fqaip2nCcqLS2Fv78/hg0bBgcHB8hkMnz22WdixyIiIg2WlZWFb7/9FhKJRPmNvI6iNT+/eeSpg1i0aBFcXV3RpUsX3Lx5E3//+9/FjkRERBrO0dERM2fOhFwux44dO/DgwQOxI7ULLE8dwLZt2/DHH39g0KBByMzMxHvvvQd9fX2xYxERUTvQtWtXTJs2DZWVldi+fTsePnwodiSNx/LUzl27dg1vvvkmpkyZgvLycgwfPhy9e/cWOxYREbUjvXr1QlhYGEpKSrB9+3aUlJSIHUmjsTy1YxUVFZg+fTomTpwIAwMDlJeXIyYmRuxYRETUDnl4eGDSpEl4+PAhtm/fjvLycrEjaSyWp3Zs2bJlsLe3h7OzM65fv441a9aIHYmIiNoxHx8fjB07Fg8ePMB3332HqqoqsSNpJJandur7779HQkIChgwZgqysLKxYsQKGhoZixyIionZu8ODBGDZsGLKzs/H999+jpqZG7Egah+WpHUpNTcXy5csRFhaGiooK+Pn5wcPDQ+xYRETUQQQGBsLf3x/p6enYvXs35HK52JE0CstTO1NVVYUZM2Zg3LhxMDQ0RFFREebNmyd2LCIi6kAkEgnGjRuHAQMG4ObNm9i3bx8UCoXYsTSGttgBSDWvv/46zMzM4OrqiuvXr2Pjxo2QSCRixyIiog5GIpFg8uTJqK6uRkpKCnR1dTFp0iR+5oBHntqVffv24dChQxg2bBhycnLw2muvwcTEROxYRETUQWlpaSE8PBw9evTA+fPncfToUfDCJCxP7cbdu3exaNEihIeHo6qqCh4eHvD29hY7FhERdXDa2tqIjIyEs7MzkpKScOLECbEjiY7lqR2oqanBjBkzMHbsWBgZGSEvLw+LFi0SOxYREXUSurq6iIqKgr29PRISEpCcnCx2JFGxPLUDb7/9NvT09NCtWzdcv34dn376Kc85ExFRm9LX18esWbNgZmaGgwcP4u7du2JHEg3Lk4b76aef8J///AcjR45Ebm4u/vKXv8Dc3FzsWERE1AkZGxtj5syZ0NbWRlxcXKe9Dh7LkwbLzs7GSy+9hIiICFRXV6NHjx4YNGiQ2LGIiKgTs7OzQ3h4OCoqKrBz505UVlaKHanNsTxpKEEQ8NJLL2HEiBEwMTFBVlYWXnnlFbFjERERoXfv3hg7dizy8/Oxe/fuTjcHFMuThtq5cyeys7PRs2dPXL9+HZ999hnHORERkcYICAjAwIEDcfv2bRw5ckTsOG2K5UkD3b9/H3/9618RFBQEmUyGqVOnwsrKSuxYREREShKJBBMnToSrqyv++OMPnDlzRuxIbYblSQMtXrwYQ4cOhb6+PoqLixERESF2JCIiogakUikiIyNhaWmJn376Cbdv3xY7UptgedIwu3fvxs2bN9GrVy9cv34dq1evFjsSERHRExkaGmLmzJnQ1dXFDz/8gPz8fLEjtTqWJw2Sn5+PV199FePHj0dpaSkmTZoEGxsbsWMRERE9lbW1NSIjI1FdXY2dO3eivLxc7EitiuVJgyxbtgyDBg2CgYEBHjx4gKioKLEjERERNUn37t0xfvx4PHz4EP/5z38gl8vFjtRqWJ40xMGDB5GcnIy+ffvi5s2bWL16Nb9dR0RE7Yqfnx/8/f1x9+5dHDp0qMNeRJjlSQMUFRVh2bJlmDBhAsrKyjB69Gg4ODiIHYuIiEhlwcHB6NGjBy5cuIBTp06JHadVsDxpgFdeeQUDBw6EkZERsrOzERsbK3YkIiKiZtHS0sLUqVNhY2OD+Ph43LhxQ+xIasfyJLL//e9/SEpKQv/+/ZGamoq///3vPF1HRETtmr6+PmbOnAlDQ0Ps2bMH9+/fFzuSWrE8iaikpASLFi3CxIkTUVFRgcGDB8PFxUXsWERERC1mYWGByMhI1NbWYteuXSgtLRU7ktqwPInojTfegIeHB0xMTJCRkYEFCxaIHYmIiEhtXF1dERISguLiYsTFxaG2tlbsSGrB8iSSxMREHD16FF5eXrh9+zY++OADnq4jIqIOx8vLC0OGDMG9e/ewf//+DvENPJYnEZSVlWHBggUICQlBZWUlfHx80KNHD7FjERERtYrRo0ejT58+SElJwfHjx8WO02IsTyJ455130KtXL5iamuLOnTtYsmSJ2JGIiIhajUQiQVhYGOzt7ZGYmIgrV66IHalFWJ7aWFJSEvbv3w8fHx+kp6dj1apV0NLiHwMREXVsurq6mDlzJoyNjbFv3z7k5eWJHanZ+KndhiorK/Hiiy9i8uTJqK6uRp8+fdC7d2+xYxEREbUJU1NTREZGQi6XY/fu3aipqRE7UrOwPLWh999/H66urjA3N8etW7fw6quvih2JiIioTTk7O2PUqFF48OABfvrpJ7HjNAvLUxs5e/Ys4uLilNf8effddyGVSsWORURE1OaGDBmivITL5cuXxY6jMpanNlBdXY158+YhJCQENTU16NatGzw8PMSORUREJIq6AeTGxsb48ccfUVBQIHYklbA8tYG///3vsLOzg6WlJa5fv44333xT7EhERESiMjIyQnh4OKqrq/Hf//63XU2gyfLUyi5duoStW7ciICAA9+7dw4oVK6CjoyN2LCIiItF169YNw4cPR05ODuLj48WO02QsT62opqYGc+fOxaRJkyCXy2Fvb4+BAweKHYuIiEhjjBgxAi4uLvjjjz9w/fp1seM0CctTK/rkk09gZmYGGxsbXL16FW+//bbYkYiIiDSKlpYWIiIiYGBggP3796O4uFjsSM/UKcrTjz/+iN69e8PNzQ2bNm1qk33evHkTX3/9NYYMGYLs7Gy89tpr0NPTa5N9ExERtSempqYIDQ1FZWUl/vvf/0Iul4sd6ak6fHmqra3F8uXL8euvv+L8+fNYs2YNCgsLW3WfgiBgyZIlGD9+PARBgLm5OQYNGtSq+yQiImrPevXqhYCAAGRmZiIhIUHsOE/V4cvTH3/8gX79+sHR0REmJiaYMGECjhw50qr73LNnD4qKiuDg4ICUlBS8++67rbo/IiKijmD06NFwdHTEyZMnkZqaKnacJ9L48nT8+HGEhISgS5cukEgk2LdvX4PHbNiwAd26dYO+vj58fHxw4sQJ5brs7Gw4Ojoq7zs5OSErK6vV8paVleGtt97CqFGjUFxcjKioKBgZGbXa/oiIiDoKqVSKiIgI6OnpYe/evSgpKRE7UqM0vjyVlZVhwIAB+PLLLxtdHxcXh2XLlmHFihW4cOEChg0bhvHjxyMjIwPAn6fQHieRSFot79///ne4u7tDX18fOTk5iIiIaLV9ERERdTQWFhYICQlBeXk59u7dC4VCIXakBjS+PI0fPx4ffvghwsPDG13/2WefYe7cuZg3bx769u2LdevWwdnZGV999RUAwNHRsd6Rpnv37sHBwaFVst66dQu7du3CwIEDcefOHaxcubJVixoREVFH1K9fP/j4+CAtLa3e2SRNoS12gJaorq7GuXPnGszYHRQUhKSkJACAv78/UlJSkJWVBVNTUxw+fPipY5CqqqpQVVWlvF/3lUmZTPbULIIgYOHChRg5ciTKy8thbW0NBweHZz6PiIiIGgoICMCtW7dw5MgRWFlZwcXFRaXn133+NnYGqqXadXnKz8+HXC6HnZ1dveV2dnbIzc0FAGhra+PTTz9FYGAgFAoFXn/9dVhZWT1xm6tXr8b777/fYLmzs7PK+T777DOVn0NERET1rV69utnPLSgogJmZmRrTtPPyVOfxU2OCINRbNnnyZEyePLlJ23rrrbewfPly5f2ioiK4uroiIyND7b/5HZGfnx/OnDkjdowmEzNva+9bndtXx7aau43mPK+pz5HJZHB2dkZmZiZMTU1VztbZ8P2tOfvm+/vZzykuLoaLiwssLS1VzvUs7bo8WVtbQyqVKo8y1cnLy2twNKqp9PT0Gp3M0szMjP+4NoFUKm1Xv09i5m3tfatz++rYVnO30ZznqfocU1PTdvX3Vix8f2vOvvn+bvpztLTUP7xb4weMP42uri58fHwaXEwwPj4egwcPFilV57Zo0SKxI6hEzLytvW91bl8d22ruNprzvPb297C9aG+/r3x/t922Otv7WyK0xkgqNSotLVVOlDVw4EB89tlnCAwMhKWlJVxcXBAXF4fo6Gh8/fXXCAgIwMaNG/HNN9/gypUrcHV1bfH+ZTIZzMzMUFxc3K7+x0VEz8b3N1HH1Zrvb40/bXf27FkEBgYq79eNR5o9eza2bt2K6dOno6CgAKtWrUJOTg48PDxw+PBhtRQn4M/TeO+99x6vS0fUAfH9TdRxteb7W+OPPBERERFpknY95omIiIiorbE8EREREamA5YmIiIhIBSxPRERERCpgeVKjzMxMjBw5Eu7u7vD09MQPP/wgdiQiUqOwsDBYWFhg6tSpYkchohb68ccf0bt3b7i5uWHTpk0qPZfftlOjnJwc3L9/H15eXsjLy4O3tzdu3LgBIyMjsaMRkRokJCSgtLQU27Ztw+7du8WOQ0TNVFtbC3d3dyQkJMDU1BTe3t74/fffm3wpFx55UiMHBwd4eXkBAGxtbWFpaYnCwkJxQxGR2gQGBsLExETsGETUQn/88Qf69esHR0dHmJiYYMKECThy5EiTn9+pytPx48cREhKCLl26QCKRYN++fQ0es2HDBnTr1g36+vrw8fHBiRMnmrWvs2fPQqFQwNnZuYWpiagp2vL9TUTiaun7PTs7G46Ojsr7Tk5OyMrKavL+O1V5Kisrw4ABA/Dll182uj4uLg7Lli3DihUrcOHCBQwbNgzjx49HRkaG8jE+Pj7w8PBocMvOzlY+pqCgADExMdi4cWOrvyYi+lNbvb+JSHwtfb83NmJJIpE0PYDQSQEQ9u7dW2+Zv7+/sGDBgnrL+vTpI7z55ptN3m5lZaUwbNgw4dtvv1VHTCJqhtZ6fwuCICQkJAgREREtjUhEatKc9/vJkyeF0NBQ5bqlS5cK3333XZP32amOPD1NdXU1zp07h6CgoHrLg4KCkJSU1KRtCIKAOXPmYNSoUYiOjm6NmETUDOp4fxNR+9CU97u/vz9SUlKQlZWFkpISHD58GMHBwU3eh8ZfGLit5OfnQy6Xw87Ort5yOzs75ObmNmkbJ0+eRFxcHDw9PZXnX7dv347+/furOy4RqUAd728ACA4Oxvnz51FWVgYnJyfs3bsXfn5+6o5LRC3QlPe7trY2Pv30UwQGBkKhUOD111+HlZVVk/fB8vSYx895CoLQ5POgQ4cOhUKhaI1YRKQGLXl/A1Dp2zhEJK5nvd8nT56MyZMnN2vbPG33f6ytrSGVShv8LzQvL69BeyWi9oXvb6LOoy3e7yxP/0dXVxc+Pj6Ij4+vtzw+Ph6DBw8WKRURqQPf30SdR1u83zvVabvS0lKkpqYq76elpSE5ORmWlpZwcXHB8uXLER0dDV9fXwQEBGDjxo3IyMjAggULRExNRE3B9zdR5yH6+715XwxsnxISEgQADW6zZ89WPmb9+vWCq6uroKurK3h7ewvHjh0TLzARNRnf30Sdh9jvd17bjoiIiEgFHPNEREREpAKWJyIiIiIVsDwRERERqYDliYiIiEgFLE9EREREKmB5IiIiIlIByxMRERGRClieiIiIiFTA8kRERESkApYnIiIiIhWwPBERtYKwsDBYWFhg6tSpYkchIjVjeSIiagVLly7Ft99+K3YMImoFLE9EpDFeeeUVhISEPPUxI0eOhEQigUQiQXJyctsEa4bAwECYmJg0um7OnDnK17Bv3762DUZELcbyREQaIzk5GV5eXs983Pz585GTkwMPDw8A/38ZWbBgQYPHLly4EBKJBHPmzFFz2ub7/PPPkZOTI3YMImomlici0hgXL17EwIEDn/k4Q0ND2NvbQ1tbW7nM2dkZ33//PSoqKpTLKisrsWvXLri4uKg9q4+PDzw8PBrcsrOzn/lcMzMz2Nvbqz0TEbUNlici0giZmZkoKChQHnkqKipCSEgIBg8e3KSjNN7e3nBxccGePXuUy/bs2QNnZ+cGhWzkyJFYvHgxFi9eDHNzc1hZWeHtt9+GIAjKxygUCqxZswY9e/aEnp4eXFxc8Le//U25/ty5c0hJSWlw69KlSwt/J4hI07E8EZFGSE5OhpmZGbp164bLly/Dz88PDg4OSExMhIODQ5O2ERsbiy1btijvb968GS+88EKjj922bRu0tbXx+++/44svvsDatWuxadMm5fq33noLa9aswTvvvIOrV69i586dsLOza9mLJKIOQfvZDyEian3JyckYMGAAdu3ahUWLFuGjjz7CSy+9pNI2oqOj8dZbbyE9PR0SiQQnT57E999/j8TExAaPdXZ2xtq1ayGRSNC7d29cvnwZa9euxfz581FSUoLPP/8cX375JWbPng0A6NGjB4YOHdrkLMHBwTh//jzKysrg5OSEvXv3ws/PT6XXQ0SaieWJiDRCcnIyLl++jMWLF+PQoUMYPHiwytuwtrbGxIkTsW3bNgiCgIkTJ8La2rrRxw4aNAgSiUR5PyAgAJ9++inkcjmuXbuGqqoqjB49utmv58iRI81+LhFpNp62IyKNkJycjIiICFRWVqKoqKjZ23nhhRewdetWbNu27Ymn7J7FwMCg2fsnoo6P5YmIRFdSUoK0tDQsXLgQGzZswMyZM3HlypVmbWvcuHGorq5GdXU1goODn/i406dPN7jv5uYGqVQKNzc3GBgY4JdffmlWBiLq2HjajohEl5ycDKlUCnd3dwwcOBBXrlxBSEgI/vjjjyeednsSqVSKa9euKX9+kszMTCxfvhwvvfQSzp8/j3/+85/49NNPAQD6+vp444038Prrr0NXVxdDhgzBgwcPcOXKFcydO7f5L5SIOgSWJyIS3cWLF9GnTx/o6ekBANasWYNr164hPDwcR48eha6urkrbMzU1feZjYmJiUFFRAX9/f0ilUixZsgQvvviicv0777wDbW1tvPvuu8jOzoaDg0Ojk3ASUecjER6d2ISISMONHDkSXl5eWLdunajbUAeJRIK9e/ciNDRU1BxEpBqOeSKidmfDhg0wNjbG5cuXxY7SLAsWLICxsbHYMYiomXjkiYjalaysLOUlWFxcXFQ+pQeIf+QpLy8PMpkMAODg4AAjIyNRchBR87A8EREREamAp+2IiIiIVMDyRERERKQCliciIiIiFbA8EREREamA5YmIiIhIBSxPRERERCpgeSIiIiJSAcsTERERkQpYnoiIiIhUwPJEREREpAKWJyIiIiIVsDwRERERqYDliYiIiEgF/x8+DJIVtHbnJAAAAABJRU5ErkJggg==",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#choose a z to plot\n",
- "zchoose=13.;\n",
- "_iz = min(range(len(zlist)), key=lambda i: np.abs(zlist[i]-zchoose))\n",
- "\n",
- "plt.loglog(klist,PS21.Deltasq_T21[_iz], color='k', linewidth=2.0)\n",
- "plt.loglog(klist,PS21.Deltasq_T21_lin[_iz], color='gray', linewidth=1.2)\n",
- "\n",
- "plt.xlabel(r'$k\\,\\rm [Mpc^{-1}]$');\n",
- "plt.ylabel(r'$\\Delta^2_{21}\\,\\rm[mK^2]$');\n",
- "plt.legend([r'Full Zeus21', r'Linear'])\n",
- "\n",
- "plt.xlim([1e-2,1])\n",
- "plt.ylim([1,200])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This was for a specific set of astro+cosmo parameters. Let's do a different example with lower X-ray luminosity (which we expect will produce a deeper cosmic dawn absorption). This is controlled through the free parameter L40_xray (luminosity per unit SFR in units of 10^40 erg/s/SFR), with a fiducial value of 3.0. Let's lower it to 1.0 and see what happens."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {},
- "outputs": [],
- "source": [
- "AstroParams_lowLX = zeus21.Astro_Parameters(UserParams, CosmoParams, epsstar=epsilon_star, L40_xray=1.0)\n",
- "CoeffStructure_lowLX = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams_lowLX, HMFintclass, zmin=ZMIN)\n",
- "PS21_lowLX = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, ClassyCosmo, CorrFClass, CoeffStructure_lowLX, RSD_MODE = RSDMODE)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Note that we can re-run the astrophysics part only, so it should take ~few seconds in a laptop. Let's plot the global signal and fluctuations comparing with the fiducial case."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "f = plt.figure(figsize = (6,6))\n",
- "\n",
- "ax = f.add_subplot(211)\n",
- "\n",
- "plt.semilogy(zlist,PS21.Deltasq_T21[:,_ik], 'k', linewidth=2.0)\n",
- "plt.semilogy(zlist,PS21_lowLX.Deltasq_T21[:,_ik], 'b-.', linewidth=2.0)\n",
- "\n",
- "plt.ylabel(r'$\\Delta^2_{21}\\,\\rm[mK^2]$');\n",
- "plt.legend([r'$L_{X,40} = 3.0$ (fid.)', r'$L_{X,40} = 1.0$'])\n",
- "plt.xlim([10, 25]);\n",
- "plt.ylim([1,200]);\n",
- "\n",
- "ax = f.add_subplot(212)\n",
- "\n",
- "plt.plot(zlist,CoeffStructure.T21avg, 'k', linewidth=2.0)\n",
- "plt.plot(zlist,CoeffStructure_lowLX.T21avg, 'b-.', linewidth=2.0)\n",
- "\n",
- "plt.xlabel(r'$z$');\n",
- "plt.ylabel(r'$T_{21}$ [mK]');\n",
- "\n",
- "plt.xlim([10, 25]);"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Just as we expected! Lowering the X-ray luminosity (blue) makes for a deeper 21-cm global absorption, and larger 21-cm fluctuations too. By $z\\sim 10$ there is still enough heating to raise the 21-cm signal near absorption. We can confirm this by plotting the spin temperature and comparing against the `standard' case"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "scrolled": false
- },
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.plot(zlist,1.0/CoeffStructure._invTs_avg,'k')\n",
- "plt.plot(zlist,1.0/CoeffStructure_lowLX._invTs_avg,'b-.')\n",
- "plt.plot(zlist,CoeffStructure.T_CMB,'r--')\n",
- "plt.xlabel(r'z');\n",
- "plt.ylabel(r'Temperatures [K]');\n",
- "plt.legend([r'$L_{X,40} = 3.0$ (fid.)', r'$L_{X,40} = 1.0$'])\n",
- "plt.xlim([10, 25]);"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You're now ready to calculate any 21-cm power spectrum or global signal that you want!"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "zeus21_userparams",
- "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.11.11"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/Tutorial_Zeus21_PopIIandIII_Fiducial.ipynb b/docs/Tutorial_Zeus21_PopIIandIII_Fiducial.ipynb
deleted file mode 100644
index baa2f54..0000000
--- a/docs/Tutorial_Zeus21_PopIIandIII_Fiducial.ipynb
+++ /dev/null
@@ -1,690 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "21609608-8da1-40d1-bf4d-12d8ca84f267",
- "metadata": {},
- "source": [
- "# Zeus21 with Population II and III Stars"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "33d16e6c",
- "metadata": {},
- "source": [
- "This quick tutorial covers all the new features in the updated public version of Zeus21 (see our paper [Cruz et al. 2024](https://arxiv.org/abs/2407.18294)) for more information.\n",
- "\n",
- "In this new version, we have included the influence of Population III stars as well as the suppressive feedback effects from Lyman-Werner radiation and the relative velocity between CDM and baryons."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "ba889183",
- "metadata": {},
- "outputs": [],
- "source": [
- "import math\n",
- "import numpy as np\n",
- "from matplotlib import pyplot as plt\n",
- "\n",
- "#import Zeus\n",
- "import zeus21\n",
- "\n",
- "#set up the CLASS cosmology\n",
- "from classy import Class\n",
- "\n",
- "#and the user parameters\n",
- "UserParams = zeus21.User_Parameters(precisionboost=1.2)\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "f3646152-80fa-4166-bcd8-1645ffbebe5b",
- "metadata": {},
- "source": [
- "## Step 1: Set up Cosmology"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "e56fce7d",
- "metadata": {},
- "source": [
- "We begin by running CLASS, where the associated parameters can be altered below. Then we save the cosmo parameters, the correlation functions, and the halo mass function at all desired z and M."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "id": "01adaa46-dcdd-4405-a6a1-5b800584dc4d",
- "metadata": {},
- "outputs": [],
- "source": [
- "# cosmo inputs from table 2 last column of 1807.06209, as 21cmFAST\n",
- "ombh2 = 0.02242 \n",
- "omch2 = 0.11933\n",
- "tau_re = 0.0544\n",
- "hLittle = 0.6766\n",
- "ns = 0.9665\n",
- "As = np.exp(3.047)*10**(-10.)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "56d952f0",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "CLASS has run, we store the cosmology.\n"
- ]
- }
- ],
- "source": [
- "#set up your input CLASS parameters here\n",
- "#note; VCB feedback is turned on as the USE_RELATIVE_VELOCITIES flag in CosmoParams_input\n",
- "\n",
- "CosmoParams_input = zeus21.Cosmo_Parameters_Input(omegac = omch2, omegab = ombh2, h_fid = hLittle, As = As, ns = ns, tau_fid = tau_re, USE_RELATIVE_VELOCITIES = True, Flag_emulate_21cmfast=False)\n",
- "ClassyCosmo = zeus21.runclass(CosmoParams_input)\n",
- "print('CLASS has run, we store the cosmology.')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "id": "06ba5c04-dcd0-4796-aa97-7246972cca93",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Correlation functions saved.\n",
- "HMF interpolator built. This ends the cosmology part -- moving to astrophysics.\n"
- ]
- }
- ],
- "source": [
- "#define all cosmology (including derived) parameters, and save them to the CosmoParams structure\n",
- "CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo) \n",
- "\n",
- "#Generate and store the matter correlation function\n",
- "CorrFClass = zeus21.Correlations(UserParams, CosmoParams, ClassyCosmo)\n",
- "print('Correlation functions saved.')\n",
- "\n",
- "# Compute the HMF structure that stores associated quantities\n",
- "HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)\n",
- "print('HMF interpolator built. This ends the cosmology part -- moving to astrophysics.')\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "8eeda1be-f47c-4cb4-b9f2-6998e06c6641",
- "metadata": {},
- "source": [
- "## Step 2: Astrophysics"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "faf27bcd",
- "metadata": {},
- "source": [
- "After that we set up the astro parameters, calculate the SFRD and with it all the global signal and related quantities. In principle one can re-run the astrophysics part only if you're certain of the cosmology parameters. \n",
- "\n",
- "With the current implementation, the computation of global quantities below takes less than a second on a laptop.\n",
- "\n",
- "For more details on parameters, please refer to those used in Table 1 of our paper linked above.\n",
- "\n",
- "NOTE: Pop III stars and LW feedback are turned on using the USE_POP_III and USE_LW_FEEDBACK flags below."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "fbcff876-3535-475d-9cb0-c124b9de2fff",
- "metadata": {
- "scrolled": true,
- "tags": []
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "SFRD and coefficients stored. Move ahead.\n"
- ]
- }
- ],
- "source": [
- "### POP II quantities first\n",
- "\n",
- "################################\n",
- "### Model Parameters\n",
- "astromodel = 0 # ASTRO MODEL: 0 for GALUMI-like, 1 for 21cmfast-like, default 0\n",
- "accretion_model = 0 # ACCRETION MODEL: 0 for exponential, 1 for EPS, default EXP\n",
- "\n",
- "################################\n",
- "### SFR(Mh) Parameteres\n",
- "alphastar = 0.5 # alphastar powerlaw index for low masses, default 0.5\n",
- "betastar = -0.5 # betastar powerlaw index for high masses, default -0.5\n",
- "epsstar = 10**-1. # epsilonstar = fstar at Mc\n",
- "Mc = 3e11 # Pivot mass at which the power law cuts for model 0, default Mc = 3e11\n",
- "dlog10epsstardz = 0.0 # dlog10epsilonstar/dz, default 0\n",
- "\n",
- "################################\n",
- "### Escape fraction parameters\n",
- "fesc10 = 0.1 # fesc(M) parameter. Power law normalized (fesc10) at M=1e10 Msun with index alphaesc\n",
- "alphaesc = 0.0\n",
- "L40_xray = 10**0.5 # L40_xray: soft-band (E<2 keV) lum/SFR in Xrays in units of 10^40 erg/s/(Msun/yr)\n",
- "E0_xray = 500. # E0_xray: minimum energy in eV\n",
- "alpha_xray = -1.0 # Xray SED power-law index\n",
- "Emax_xray_norm=2000 # max energy in eV to normalize SED. Keep at 2000 eV normally\n",
- "\n",
- "################################\n",
- "### LyA parameters\n",
- "Nalpha_lyA_II = 9690 # number of Pop II photons between LyA and Ly Cont. per baryon (from BL05)\n",
- "Nalpha_lyA_III = 17900 # number of Pop III photons between LyA and Ly Cont. per baryon value of 17900 is from Klessen & Glover 2023 (2303.12500), table A2\n",
- "\n",
- "################################\n",
- "### MTURN Parameters: \n",
- "Mturn_fixed = None # Mturn_fixed: None if use Matom(z) at each z, Some value if fixed Mturn\n",
- "FLAG_MTURN_SHARP= False # Mturn_sharp: False if regular exponential cutoff, True if sharp cutoff, active only if Mturn_fixed is on\n",
- "\n",
- "################################\n",
- "### UVLF Parameters\n",
- "C0dust = 4.43 # DUST PARAMETERS FOR UVLFs\n",
- "C1dust = 1.99\n",
- "sigmaUV = 0.5 # stochasticity (gaussian rms) in the halo-galaxy connection P(MUV | Mh) - TODO: only used in UVLF not sfrd\n",
- "\n",
- "################################\n",
- "ZMIN = 10.0 # down to which z we compute the evolution\n",
- "\n",
- "\n",
- "\n",
- "################################\n",
- "# Pop III Quantities\n",
- "alphastar_III = 0 \n",
- "betastar_III = 0\n",
- "fstar_III = 10**(-3.0)\n",
- "Mc_III = 1e7\n",
- "dlog10epsstardz_III = 0.0\n",
- "\n",
- "fesc7_III = 10**(-1.35)\n",
- "alphaesc_III = -0.3\n",
- "L40_xray_III = 10**0.5\n",
- "alpha_xray_III = -1.0\n",
- "\n",
- "\n",
- "USE_POPIII = True\n",
- "USE_LW_FEEDBACK = True\n",
- "\n",
- "A_LW = 2.0\n",
- "beta_LW = 0.6\n",
- "\n",
- "A_vcb = 1.0\n",
- "beta_vcb = 1.8\n",
- "\n",
- "\n",
- "#set up your astro parameters too, here the peak of f*(Mh) as an example\n",
- "\n",
- "AstroParams = zeus21.Astro_Parameters(UserParams,\n",
- " CosmoParams, \n",
- " astromodel = astromodel, \n",
- " accretion_model = accretion_model,\n",
- " \n",
- " alphastar = alphastar, \n",
- " betastar = betastar, \n",
- " epsstar = epsstar, \n",
- " Mc = Mc, \n",
- " dlog10epsstardz = dlog10epsstardz,\n",
- " \n",
- " fesc10 = fesc10, \n",
- " alphaesc = alphaesc,\n",
- " L40_xray = L40_xray, \n",
- " E0_xray = E0_xray, \n",
- " alpha_xray = alpha_xray, \n",
- " Emax_xray_norm = Emax_xray_norm, \n",
- " \n",
- " Nalpha_lyA_II = Nalpha_lyA_II, \n",
- " Nalpha_lyA_III = Nalpha_lyA_III,\n",
- " \n",
- " Mturn_fixed = Mturn_fixed, \n",
- " FLAG_MTURN_SHARP = FLAG_MTURN_SHARP,\n",
- "\n",
- " C0dust = C0dust, \n",
- " C1dust = C1dust,\n",
- " sigmaUV = sigmaUV,\n",
- " \n",
- " \n",
- " USE_POPIII = USE_POPIII, \n",
- " USE_LW_FEEDBACK = USE_LW_FEEDBACK,\n",
- "\n",
- " alphastar_III = alphastar_III, \n",
- " betastar_III = betastar_III,\n",
- " fstar_III = fstar_III,\n",
- " Mc_III = Mc_III,\n",
- " dlog10epsstardz_III = dlog10epsstardz_III,\n",
- "\n",
- " fesc7_III = fesc7_III,\n",
- " alphaesc_III = alphaesc_III,\n",
- " L40_xray_III = L40_xray_III,\n",
- " alpha_xray_III = alpha_xray_III,\n",
- " \n",
- " A_LW = A_LW,\n",
- " beta_LW = beta_LW,\n",
- " \n",
- " A_vcb = A_vcb,\n",
- " beta_vcb = beta_vcb\n",
- " )\n",
- "\n",
- "CoeffStructure = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams, HMFintclass, zmin=ZMIN)\n",
- "zlist= CoeffStructure.zintegral\n",
- "print('SFRD and coefficients stored. Move ahead.')\n"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "fa72898f",
- "metadata": {},
- "source": [
- "## Step 3: Plotting globally-averaged quantities"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "507bde44",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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gHpEMQWLoqIiTdnpp7a1uYxv6dKlOvvss7XffvspKytLHo9H+fn56tKliy6++GI9//zzKisrq21sAPXA3batUrp0sczKpr4n0zRtSgQ0bJFt21R4551SZaVlnnXZZdz1EgAAJA2KKVi8+OKLKi8vj223atVKQ4YMqfHxvvrqK7388sv64Ycf5Pf7FQqFtHHjRn399dd66qmndP7556tt27a67bbbVLnTN+YAEk/acOsi6OEff1TlihU2pQEaLrOiQoUTJihaUGiZ+4YNk29ozf/dBQAAaGgopmCx82V8o0aNktPprNPXLCgo0NixY3X00Ufrl19++fMnALCNp0cPOXe6tLds6ns2pQEaJtM0VfTAA6pc9aNlntLlUGVezM1GAABAcnHZHQCJ46uvvtKXX34Z2zYMQ6NGjarRsVJTU9W/f38NGDBABx98sPLz85WWlqbi4mKtXr1ac+fO1QsvvCC/3x97zqJFizR48GAtWLBA2dnZtf3jWHTu3FmOWtzVaMyYMRozZkwcEwENk+F0yjfseJU8Myk2K1+wQJFt2+TMy7MvGNCAlL76qso/mW+ZOVu0UM6//iWjjn8YBAAAGraJEydq4sSJNX5+NBqNY5r4oJhCzFNPPWXZ7t+/v/bZZ59qHSMtLU0PPPCALrzwQmVmZu5yn+7du+vUU0/VHXfcoauvvlrPPvts7LHvvvtOF110UZV1rmprw4YNtXr+jgUakOx8xx6rkhdfkn6/I18kosD06co45xx7gwENQHD+fJW+9LJlZvh8yrn5JjkyMmxKBQAAGgq/369ff/3V7hhxRTFVx0aPHq1HHnmkzl/nlltu0bhx42r8/IqKCr300kuWWU0WPW/atKmuuuqqvdo3KytLkyZNUtOmTXXffffF5m+++abmz5+vo446qtqvvzv5+fm1OmNqdyUbkIwcGRny9e+vwIwZsVlg+gyln366DLfbxmRAYqv88UcV3f8f69DhUPY118jdpo0tmQAAQMOSmZmpVq1a1fj50Wi01iduxBvFFCRtL4MKCgpi2zk5OTrllFPq5bXvuecezZo1S1999VVs9thjj8W1mFqxYgXlEhBHvmHHW4qpaHGxgp98Il///jamAhJXpKBABRMm/HGm4W8yR41SavduNqUCAAANTW2XmfH7/crKyopjotpj8XNIqnoZ3znnnKPU1NR6eW3DMHTttddaZh988AG3oAcSmLt9e6UccrBlVjblTd63wC6YoZAK77hT0a3bLHPv4EHynXiCTakAAAASA2dM1bERI0aodevWdf46ffr0qfFz165dqzlz5lhmNbmMrzaGDLHeGnvLli3asGGDWrZsWa85AOy9tBNOVOibZbHt8Nq1qli8WKk9etiYCkgspmmq6KGHVblypWWectBByrrsMhmGYVMyAACAxEAxVccGDRqkQYMG2R1jj5555hnLyvzdunXTYYcdVq8ZcnJylJWVpeLi4thsy5YtFFNAAvP06iln69aK/PJLbFY2+Q2KKWAHZZPfUPlHH1lmzubNlXP9dazJBgAAIC7lS3qmaWrSpEmWWX2fLfU7r9dr2Q4Gg7bkALB3DIdD6SOta9GFli9X6LvvbEoEJJbyTxep5PnnLTPDm7r9DnysewgAACCJYirpzZo1S2vXro1te71enX322fWewzRNbdtmXXujSZMm9Z4DQPV4+/aVo0meZVb6xhSb0gCJo3L1ahVNnGgdGoay//lPudu2tScUAABAAqKYSnI7L3o+cuRIZWdn13uOJUuWqLKyMrbtcDjUokWLes8BoHoMt1tpI0ZYZhWffabKn3+2KRFgv0hRkQpvnyCzvNwyz7jwAqX27GlTKgAAgMREMZXECgoK9NZbb1lmdl3G99JLL1m2u3fvrvT0dFuyAKge3+DBMnZ6v5ZNedOmNIC9zMpKFd55lyJbtljm3gEDlHbSSfaEAgAASGAUU0nsxRdfVEVFRWy7Y8eOOuaYY+o9x4oVK/Too49aZiN2OgMDQOJyeL1KG3a8ZRb86KMqH8yBxs40TRU/+qgqd1pnzd25s7KuvII78AEAAOwCxVQS2/kyvosuuqhW3zQvWrRI8+bNq9ZzVq5cqeOPP96y0HleXp5Gjx5d4xwA6p9v+HApJeWPQSSisrffti8QYIOyt95ScPYcy8zZtKlybrieO/ABAADsBsVUklq8eLGWLl0a23Y6nbrwwgtrdczvvvtOffv21VFHHaVHHnlE69at2+2+W7du1YQJE9SjRw+tXr3a8tjEiROVlZVVqywA6pczK0u+QYMss8AHMxX1+21KBNSv8s+/UMmkZy0zIzVVOTfdJKcNazcCAAA0FC67A8AeTz/9tGX7uOOOU8uWLeNy7AULFmjBggUaPXq0mjZtqgMPPFC5ublKS0uT3+/X6tWrtWzZMpmmWeW5d9xxh84///y45ABQv9JOGqHAtGlSNCpJMsvLVfb++8o480ybkwF1q3L1GhXdd6+0479rhqHsMWPk7tDetlwAAAANAcVUEiovL6+y2HhdLXq+ZcsWffTRR3+6X9OmTfXkk0/qxBNPrJMcAOqeq3lzpR59tMp3eM+XvTtVaSedJEdqqo3JgLoTKSxUwW23yQzudAe+c89Vau/DbUoFAADQcHApXxJ64403VFRUFNtu3ry5hg8fXuvj9unTR2PGjFGPHj2UsuNaM7thGIa6dOmihx56SD/++COlFNAIpJ9yimXbLClRcNYsm9IAdcusqFDhhAmKbt1qmacec4zSTh1pUyoAAICGxTB3dT0VUEuVlZVasWKFVq9erfXr18vv96uiokJpaWnKyclRmzZt1LNnzzpfS8rv9ysrK0vFxcXKzMys09cCsF3B+PGq+GJxbNvZrJmaPv6YDBcn6aLxMKNRFd1zr8oXLLDM3Z07K+/222TsxQ9oAAAA6lsifkbmUwLqhNvt1iGHHKJDDjnE7igA6lnaKSMtxVRk82YF530iX/9+tmUC4q3kxRerlFLO5s2Vc+MNlFIAAADVwKV8AIC4SjnoQLk772+ZlU2ZsssbHgANUWD2bJW9PtkyM9LSlDP2Zjm5qywAAEC1UEwBAOLKMAyln2JdXye8dq3lLCqgoapYtkzFjzxqHTocyrn2X3K3aWNPKAAAgAaMYgoAEHeeXj3latPaMit94w2b0gDxEV6/XoV33iWFw5Z51l//Ks9hh9kTCgAAoIGjmAIAxJ3hcChtpzv0VS5frtDy72xKBNROtKREBeNvk1lSYpmnjRgh39AhNqUCAABo+CimAAB1wtu3rxxN8iyz0imcNYWGx6ysVOGddymyfr1l7unVSxkXXmBTKgAAgMaBYgoAUCcMt1tpI0ZYZhWffa7Kn3+2KRFQfaZpqvjRxxRatswyd3XooOx/jJHhdNqUDAAAoHGgmAIA1Bnf4MEy0tMts9JXX7UpDVB9ZW+8oeDs2ZaZIzdXuTffJIfXa1MqAACAxoNiCgBQZxxer9KGD7PMyud9osoff7IpEbD3gvPnq+S55y0zw+NR7k03ytmkiU2pAAAAGheKKQBAnUo78UQZaWmWWcmLL9iUBtg7oR9+UNH9/7EODUPZ/xgjd6dOtmQCAABojCimAAB1ypGervSTT7bMKr5YrNDy5TYlAvYssmWLCm+fIIVClnnGBecrtXdvm1IBAAA0ThRTAIA65zvxBDmysiwz/3PPyzRNmxIBuxYtK1PB+NsULSy0zL2DByltp4IVAAAAtUcxBQCoc47UVKWfcbplVrl8uSoWL7YpEVCVWVmpwrvuUnjtWss85dBDlfXXv8owDJuSAQAANF4UUwCAeuEbMkTOZs0ss5LnX5AZjdqUCPiDaZoqfuhhhZZ+bZk7W7VSznXXynC5bEoGAADQuFFMAQDqheF2K/2ssyyz8OrVKp8/36ZEwB9KXnhBwQ8/tMwcWVnKHXuzHOnp9oQCAABIAhRTAIB64+13jFxtWltmJS++JDMctikRIJVNn66y1ydbZobHo5yxN8uVn29TKgAAgORAMQUAqDeG06n0c861zCLr1ys4Z45NiZDsyj//XP7H/2sdOhzK/te/lLLvvvaEAgAASCIUUwCAepV6RG+5O3WyzEpeeUVmKGRTIiSr0MqVKrrnXmmndc6y/vpXpfbsYVMqAACA5EIxBQCoV4ZhKOO88yyz6NZtKnt/mk2JkIzCGzao8LbbZVZUWObpp58u39AhNqUCAABIPhRTAIB6l3JYF6UccohlVvr664oGAjYlQjKJFBerYNytihYXW+be/v2Vfs7ZNqUCAABIThRTAIB6t6uzpsySEpW9/Y5NiZAszIoKFd4+QZENGyzzlMMOU9boK2UYhk3JAAAAkhPFFADAFimd95enVy/LrOyttxT1+21KhMbOjERUeN+/Vfn995a5q0MH5Vx3rQy326ZkAAAAyYtiCgBgm4zzzpV2OEPFDAZV+vpkGxOhsTJNU/7/PamKRYssc0eTJsode7McPp9NyQAAAJIbxRQAwDbudu3kPeYYy6zs/fcV2brVpkRorMrefFOB99+3zIy0NOWOu0XOvDybUgEAAIBiCgBgq/SzzpSczj8GlZUqeeVV+wKh0Ql+9LFKJj1rHbpcyrnhernbtrUnFAAAACRRTAEAbObKz5dv8GDLLDhrlsK//mpTIjQmFV9/raIHHqgyz/771fLsdGdIAAAA1D+KKQCA7dLPOF1KSfljEI2q5Lnn7QuERqFy1SoVTrhDCoct84xRF8rbt69NqQAAALAjiikAgO2cublKGz7cMitfuFDlixfblAgNXeXPP2vbLeNkBoOWuW/4MKWddJI9oQAAAFAFxRQAICGkjzxFRkaGZeb/7xMyKypsSoSGKrxxkwrG3iKzpMQyTz3iCGX+5S8ydrgTJAAAAOxFMQUASAiOjAxlXnihZRbZuFGlr0+2JxAapEhBgQrGjlW0oMAyT+nSRdn//IeMHRfaBwAAgO0opgAACcM7cIDcBxxgmZVOmaLwL7/YlAgNSdTvV8HYWxTZuNEyd3feXzk3XC/D7bYpGQAAAHaHYgoAkDAMh0NZl/9Vcuzwz1M4rOLHHpdpmvYFQ8KLBgIqGD9e4Z9/tsxd7dsrd+xYObxem5IBAABgTyimAAAJxd2+vdJGjLDMQt98o/KPPrIpERKdGQqpcMIdqlz5g2XuzM9X7q23ypGeblMyAAAA/BmKKQBAwkk/8ww5mjSxzPxPPa1oaalNiZCozHBYhffco9A331jmjiZ5yr1tvJw52fYEAwAAwF6hmAIAJByH16usSy+1zKLFxSp5/gWbEiERmdGoih54QBWffW6ZO7KylDd+vFzNmtmUDAAAAHuLYgoAkJBSex8uT6+elllg+nSFVq60KRESiWma8v/3CZV/9LFlbqSlKXfcOLlat7YpGQAAAKqDYgoAkLAyL7lESkn5Y2CaKn70MZmRiH2hkBBKnn9BgWnTrMOUFOXefLPcHfexJxQAAACqjWIKAJCwXM2bK+OsMy2z8E8/KfD++zYlQiIofeMNlU2ebB26XMq94XqlHHiAPaEAAABQIxRTAICElnbiiXK1aWOZlbzwoiLbttmUCHYqmzZNJc8+Zx06HMr+5z/k6dbNnlAAAACoMYopAEBCM9xuZV5+uWVmBoPyP/20TYlgl8DsOfI//t8q86zRV8p75JE2JAIAAEBtUUwBABKe5+CD5B04wDIrn/eJKpYssSkR6ltgxgcqfvBByTQt88yLL5bv2GNtSgUAAIDaopgCADQIGRdeKCM93TIrfvy/MkMhmxKhvpS9956KH3mkSimVftZZSjvxBJtSAQAAIB4opgAADYIzK0uZF1xgmUU2bFDp5DdsSoT6UPr22/L/94kq87SRpyj9zDNsSAQAAID/b+/Ow6Oq7j+OfyaZhITsELYEAQmgVESoLAoIiLIIiCKKtVCWClQLUqAuRRRcUAu0AgKutVp/AmIjAi74QyEoIFAURCEgEiICYYdkspJl7u8Pf065WUgmmcydZN6v58nDc849555veOZwuN+591xPIjEFAKgxQvverKArrzDVZSUmquDgQYsiQnXKeu89Zb5eci+x8N/crYhRo2Sz2SyICgAAAJ5EYgoAUGPYAgIUdf8fpYCLlq/CQp2fO0/O7GzrAoPHZb6zouTb9ySFjxihiN/+lqQUAABALUFiCgBQowRd3kJhQ4ea6opOnFDGosUyiu1BhJrHMAxlvr1UWcuWlTgWMWa0Iu4ebkFUAAAAqC4kpgAANU7EiN+WeKQv78svlbN2rUURwRMMw1Dmv95S1rvvljgWOW6cwu+4w4KoAAAAUJ1ITAEAahyb3a6Yhx4q8ZY+xz9eV0FKikVRoSoMw1Dm668re+XKEsci77uPt+8BAADUUiSmAAA1UmCDBoqe8idzZWGhzs+ZK2dOjjVBoVIMp1OOV15R9poPzAdsNkVNmqSwgbdYExgAAACqHYkpAECNFdKli8Juv91UV3TihDIWs99UTWE4ncp48UXlfFzsMcyAAEX9abLq9utrTWAAAADwChJTAIAaLWLU7xR0RbH9pjZvUc4nn1gUESrKKCpSxguLlLvuU/OBgABFT52qun36WBMYAAAAvIbEFACgRrPZ7Yp+6MHS95s6dMiiqFAeIz9f6X//u3I3bDAfCAxU9EMPKrRXT2sCAwAAgFeRmAIA1Hj2hg0V/afJ5sqCAp2fO4/9pnxQUUaGzj72uPI2bzEfsNsV88gjCu3e3ZrAAAAA4HUkpgAAtUJI164Ku22Iqa4oLU0ZS15kvykfUnj0qM4+9LAK9u83HwgKUsyj0xVyXVdrAgMAAIAlSEwBAGqNiFGjFNSmtakub9Mm5f7vOosiwsUu7NmjMw8/oqITJ0z1ttBQ1Xv8MYV06mRRZAAAALAKiSkAQK1hCwpS9EMPyRYWZqrPeO01FaSmWhQVJClnwwadmzlLRlaWqT4gNlb15/xVdTp0sCYwAAAAWIrEFACgVrE3alTGflNz2W/KAoZhKHPZMmUsWCgVFpqOBbVKUOzf5imoRQtrggMAAIDlSEwBAGqdkOuuU91bbzXVFR1L0/m/zpGRn29RVP7HKChQ+vPPK+udFSWO1enaVfWefVaB9epZEBkAAAB8hd3qAGCtnJwcbdmyRUePHtXJkycVHR2t+Ph4de7cWY0bN/boWPv27dPevXt17Ngx5efnKy4uTi1btlTXrl0VEECOFIBnRY4ZrYL9+1Xwww+uuvxvvtH5v85RzPS/yBYUZGF0tZ/T4dC5Z59TQXJyiWNht92miDGjZQsMtCAyAAAA+BKbwauKfIJhGPr++++1Y8cO7dixQ1999ZV27dqlvLw8V5tevXpp48aNHhkvNTVVM2fO1Pvvv6/s7OwSxwMDA9WnTx9Nnz5dN954Y6XHMQxDr732mpYsWaJvv/221DZxcXEaNWqUHnvsMYUV2xemqhwOh6KiopSRkaHIyEiPnhuA7ys8cVJnpk0rsa9RneuuU8zDD8lm5/uZ6lCYlqZzTz6louPHzQcCAhQ5YbzCBg60JjAAAAA/54vXyCSmLJaYmKglS5bo66+/VmZm5iXbeiox9eabb+qBBx5QVrELtdLYbDZNmTJF8+bNU6Cb32yfPHlSI0eO1GeffVah9gkJCXrnnXfUyYNvZfLFSQfAu/J/+EHnHp8po9j+UiE39FD0tGncteNh+Xv36tyzz8kotqbZQkMU/fDDCrn2WosiAwAAgC9eI/NVscU2b97ssbugKmLZsmX6/e9/r4vzkXa7XZ07d9Zll12m06dP6+uvv5bD4ZD08x1P8+fP14ULF7RkyZIKj5Odna2BAwdq586dpvqmTZuqffv2CgkJ0ffff6+9e/e6jqWkpKhfv37aunWrrrjiiir+pgDws+DWrVVv1kydm/WEjIvuQs3btFkZdruiJk8mOeUhOUlJyli0uMQm5wGx9VXv8ccVdPnlFkUGAAAAX8XGPj4qLCxMLTz8lqKdO3dq7NixpqTUbbfdpkOHDunLL7/UihUrtGHDBh09elQzZsww9X3xxRf16quvVnisMWPGmJJSERERWrZsmQ4fPqyPPvpI7733nvbs2aNt27aZklDnz5/XoEGDlJubW4XfFADMgtu2VczMx6XgYFN9btJGZbz0kgyn06LIagdnTo7SFy5UxvwFJZJS9pYtFTtvHkkpAAAAlIrElA8ICQlR165dNXHiRL3xxhv67rvv5HA4NGvWLI+O8/DDDyv/ordR3XnnnVq5cqUuu+wyU7uIiAjNnj1bCxYsMNU/9thj5T5uKP18F1hiYqKrHBwcrA0bNuiee+4pscl5165dtWXLFiUkJLjqUlJStHDhQnd+NQAoV5127VTvsRlSsU3Pc9d9Kserr4on2ysn/8ABnZkyVbnrN5Q4VqdLZ9V/7lkF1q9vQWQAAACoCUhMWWzGjBnKzMzUtm3btHjxYo0ZM0bt2rXz+FvqkpKStH79elc5NjZWL7/88iXHmTx5snr37u0qnz59WvPnzy93rOJ3Wz366KOX3Deqfv36+sc//mGqmzNnjutxQgDwlDodOihm+l+kYpue53y8Vpn//CfJKTcYRUXKfPddnX34ERWdOFHieN1bBytm+nQFhIZaEB0AAABqChJTFmvQoIHsXngr1FtvvWUqjxs3TvXL+QbbZrPp4YcfvuR5ijt8+LC++OILVzk0NFSTJ08uN77evXurS5curnJ6errWrFlTbj8AcFdIp06Kefhhqdi+Utmr1yjzf94mOVUBRadP69yMx5T19lKp2GOQttBQRU2dqqjx49m7CwAAAOUiMeUHioqK9MEHH5jqxo4dW6G+/fv3V5MmTVzllJQUffvtt2W2f//9903l22+/XTExMRUaq3hMK1eurFA/AHBXyHVdFf3nP0vF7hrNTkxU1jsrLIqqZsjdtEmnJ/9J+cnJJY4FXXmFYhcuVN0be3s9LgAAANRMJKb8wI4dO3T27FlXuUmTJmrTpk2F+gYEBKhnz56murVr15bZ/pNPPjGVL34UsDzF265bt05ONiQGUE1Ce3RX9JQ/STabqT5r+XJlvftv7pwqxpmTo/QFC5U+728ysrPNBwMCFP6b36j+c8/J3riRNQECAACgRiIx5Qf27NljKl9//fVu9e/WrZupvHfv3moZ68orr1S9evVc5ezsbP34448V7g8A7grt3VtRkyaVqM98+22lz5snZ1aWBVH5nvzvv/95g/MNJTc4D2zYUPWffVYRv72HR/cAAADgNhJTfiC52OMWrVq1cqv/xW/MK+18v3A4HDp27Ngl+5anZcuWFRoLADylbt+bFXn/fSXq8zZv0ZkpU5W/b58FUfkG1wbnj/yl1A3OQ3r1UuzCBQr+VVsLogMAAEBtQGLKDxw8eNBUbtasmVv9i7f/4YcfKjRObGys6tatWy1jAYAnhd1yiyLHjytRX3TqlM5Of1SZ76yQUVRkQWTWyd+3T2cf+UuZG5xHT5uqmD9PU0BYmEURAgAAoDao/tfBwXLp6emmcsOGDd3qX7x9ZmamnE6nAoptGlzVcUrrk5GR4fY5AKAywm69VQH1Y5WxeLGMix/hczqVtWyZ8nfvVvS0qQps0MC6IL2g8OhROd56Sxe2bS/1eNCVVyh62p/ZSwoAAAAeQWLKD2QV2yMlNDTUrf7F2xuGoezsbEVERHh0nNL6ZGZmun0OAKis0G7XK7h1K6U/P1/5xfbTy9+7V6f/NEVRkyYptJt7e/XVBEXnzytr+XLlrPu0xB1Skn7e4Hz4cIXfPZy9pAAAAOAxJKb8QPGEUUhIiFv9S0swZWVllZuYcnec0sYqfs7KuvLKK0vc4eWOadOmadq0aR6JBYBvC2zQQPVmP62sfycq6513TEkaIytL6X/9q/L791fkuHtlq1PHwkg9w5mTo+xVq5W9apWMvLxS2wQ2bqzoKVPYSwoAAMBizz//vJ5//vlK93eW9gWkxfw2MTVp0iQtWbKk2seZNWuWnnjiiWofxx22Yq9G93T7qvSr7FjlOX78eJX6OxwOD0UCoCawBQYq4jd3q8417ZX+9+dVdOqU6XjO//6v8pP3KvrBBxV0+eUWRVk1RmGhctZ9qqzly+Us47FpW0SEIu6+W3VvGSBbUJCXIwQAAEBxpb10rKbz28SUPwkPDzeVc3Nz3epfWvvi5/TEOKX1KW2cymjSpEmV7piKjIz0SBwAapbgtm0Vu2C+Ml56SXmbNpuOFR45qjMPPqTwu+5S2MBbFFBD/p0wDEN5W7cp83/eUtGxtNIbBQcrbMgQhQ+7g83NAQAAfEhkZKTi4+Mr3d/pdFb5xg1PIzHlB6ojMRVWyoWKLyem9u/fT3IJQKUEhIcr+sEHlduhoxyvvirjwoX/HiwoUNayZcr6978V2vMGhQ0erKCEBOuCvQTjwgXlff21sletUsH+70tvFBCg0D59FPHbexQYG+vdAAEAAFCuqm4z43A4FBUV5cGIqs5vE1O33XabmjZtWu3j9OjRo9rHKE/xD93p06fd6n+q2CMskZGRpd59VNVxShsrOjra7XMAgKfZbDbV7XuzgtteqfPz/qbC1FRzg4IC5a7foNz1GxR05ZUKGzRIId2ut/zxN6OgQBd27VLups268J/tMnJL30NKkup07qyIUb9TUPPmXowQAAAA/s5vE1N9+/ZV3759rQ7DK1q3bm0qHz582K3+xdsXP19Z9adPn1ZOTo7q1q3r8bEAwAr2pk0V+7d5ynzrf5S9enWpbQr271f6/v0KeCNGdfsPUN0B/RUYE+O1GI3CQuV/+61yN21S3rbtMrKzL9k+qHVrRYwdozrt2nkpQgAAAOC//DYx5U/atjW/RengwYNu9T906NAlz/eLyMhIxcXFKS3tv3uWpKSk6Oqrr67wWKnF7kIoaywAsIotKEiR9/5eob16KvuDD5S7abNUWFiinfPceWUtX66sf/9bId26KWzwIAVdcUW1vOTBKCpS/p69ytu8WblffikjM7PcPoGNGyti1CiFdO9WbS+eAAAAAMpDYsoPtCv2LfjWrVvd6r9ly5ZLnq/4sYsTU1u3bq1wYmr//v06e/asq1y3bl1dXkPfdgWg9gtq1UrRU6cqYsxY5axbp5y1a+U8d65kw8JC5X3xhfK++EK2unVlj4tTYHyc7E3iZI+PU2BcnOxxceVuMm4YhozsbBWdOaOis2flPHNWRWfPqOjUaV3YtUvO8+fLDzogQMHt2im0Vy+F9u5l+aOGAAAAAIkpP9C5c2fVq1dP5/7/gun48eM6cOCA2rRpU25fp9OpTZs2mepuueWWMtsPGDBA69atc5U3btyoCRMmVCjOjRs3msr9+/ev0pv0AMAbAmOiFXH3cIUPu0N527Yr58MPlZ+cXGpbIydHBQcPqqCUO1cDoqIUGB8ve5MmCmzSWMaFC/+ffPo5AeU8c9a88bobgn71K4Xe0EMh3bp59bFCAAAAoDwkpvyA3W7Xrbfeqn/961+uujfeeEPPPfdcuX3XrVtnugMqISFB7du3L7P90KFDTW8IWLVqldLT0yu0ifmbb75Z4lwAUFPY7HaF9uiu0B7dVXDokLI/+ki5n38h5edXqL8zI0POjAwVlJHUcldQmzYKuaGHQrt35w17AAAA8FncjuInRo0aZSr/4x//MD02V5a5c+de8jzFtWjRQjfccIOrnJubq4ULF5Y7zueff67t27e7ytHR0RoyZEi5/QDAFwW1bKnoBx5Qozf+qYgxoxXYsKFXxrW3bKmI0aPU4NVXFfu3eQq/7TaSUgAAAPBp3DHlJ/r06aM+ffpow4YNkqQzZ87ovvvu04oVK8p8XO6FF15QUlKSqxwbG6upU6eWO9azzz5rSk49++yzGjRokDp16lRq+3Pnzunee+811T3yyCOKiooqdywA8GUBEREKv+MOhQ0dqqJTp1SUdlyFacdUmJamomNpP/956pTkdLp33uhoBcbWV0D9WAXWr6/Axo0V0rmT7PHx1fSbAAAAANWDxJQP+PHHH0utP3PmjKmcl5dXZtvo6OhyH5ebN2+err/+euX//2MliYmJGjZsmF544QVddtllrnaZmZmaO3eunnnmGVP/Z555RhEREZf+ZST16NFDd955pxITEyVJ+fn5uummm/TKK69o+PDhpkTY9u3bNXr0aKWkpLjqEhISNHny5HLHAYCawmazyd6okeyNGqlOxw6mY0ZBgYpOnlRhWpoKj6WpKC1NhadOKiA09OfEU2z9n5NPsbEKqF9fgfXqsWk5AAAAag2bYRiG1UH4O0+8pnvWrFl64oknym23dOlSjRw50lRnt9vVpUsXXXbZZTpz5ox27Nghh8NhanP//ffrxRdfrHA82dnZuuGGG7Rr1y5T/WWXXaZrrrlGwcHBOnDggPbs2WM6HhMTo61bt+qKK66o8FiX4nA4FBUVpYyMDEVGRnrknAAAAAAA1ES+eI3MHVN+ZsSIEcrPz9fkyZOVlZUlSSosLNSXX35ZanubzabJkyfr73//u1vjhIWF6eOPP9bIkSO1fv16V/2RI0d05MiRUvskJCRo+fLlHktKAQAAAAAA38bm535o7Nix2r17t0aMGKGwsLBS2wQEBOjmm2/W+vXrtWDBAgUGBro9TuPGjfXpp5/q5Zdf1tVXX11muyZNmuiRRx7R7t271blzZ7fHAQAAAAAANROP8vm57Oxsbd68WUePHtWpU6cUHR2tuLg4denSRU2aNPHoWMnJydqzZ4/S0tKUn5+vuLg4tWzZUtddd12ZG7BXlS/epggAAAAAgBV88RqZxBRqNV+cdAAAAAAAWMEXr5F5lA8AAAAAAACWIDEFAAAAAAAAS5CYAgAAAAAAgCVITAEAAAAAAMASJKYAAAAAAABgCRJTAAAAAAAAsASJKQAAAAAAAFiCxBQAAAAAAAAsQWIKAAAAAAAAliAxBQAAAAAAAEuQmAIAAAAAAIAlSEwBAAAAAADAEiSmAAAAAAAAYAkSUwAAAAAAALAEiSkAAAAAAABYgsQUAAAAAAAALEFiCgAAAAAAAJYgMQUAAAAAAABLkJgCAAAAAACAJUhMAQAAAAAAwBIkpgAAAAAAAGAJElMAAAAAAACwBIkpAAAAAAAAWILEFAAAAAAAACxBYgoAAAAAAACWIDEFAAAAAAAAS5CYAgAAAAAAgCVITAEAAAAAAMASJKYAAAAAAABgCRJTAAAAAAAAsASJKQAAAAAAAFiCxBQAAAAAAAAsQWIKAAAAAAAAliAxBQAAAAAAAEuQmAIAAAAAAIAlSEwBAAAAAADAEiSmAAAAAAAAYAkSUwAAAAAAALAEiSkAAAAAAABYwm51AEB1Wrx4sevPRx991OJoAGs8//zzcjgcioyM1LRp06wOB7AE8wD+jjkAMA8AyTevkW2GYRhWBwFUl7i4OB0/flxNmjRRWlqa1eEAlmjatKmOHTum+Ph4HT161OpwAEswD+DvmAMA8wCQfPMamUf5AAAAAAAAYAkSUwAAAAAAALAEiSkAAAAAAABYgsQUAAAAAAAALEFiCgAAAAAAAJYgMQUAAAAAAABLkJgCAAAAAACAJUhMAQAAAAAAwBIkpgAAAAAAAGAJElMAAAAAAACwBIkpAAAAAAAAWILEFAAAAAAAACxBYgoAAAAAAACWIDEFAAAAAAAAS9itDgCoToZhSJKcTqccDofF0QDWcDqdrj+ZB/BXzAP4O+YAwDwApP/Og1+ulX2BzfClaAAPmzlzpp5++mmrwwAAAAAAwGc8/vjjeuqpp6wOQxKJKdRyTqdTaWlpioiIkM1mszocAAAAAAAsYxiGMjMzFRcXp4AA39jdicQUAAAAAAAALOEb6TEAAAAAAAD4HRJTAAAAAAAAsASJKQAAAAAAAFiCxBQAAAAAAAAsQWIKAAAAAAAAliAxBQAAAAAAAEuQmAIAAAAAAIAlSEwBAAAAAADAEiSmAAAAAAAAYAkSUwAAAAAAALCE3eoAAF9QUFCgLVu26KefftLx48cVHh6uuLg4dezYUS1atLA6PADwS0VFRTp48KCSk5OVlpamjIwM1alTRzExMUpISFCnTp0UFhbm0TFZD+BrrJgHgK/Jzc3V/v37dfjwYaWlpSkzM1MFBQWKjIxU/fr11a5dO1111VWy2z1zectaAF/j7TngbTUzatR6hw4d0o4dO/TVV19px44d2rlzpzIzM13Hmzdvrh9//LHK45w+fVqzZs3SihUrdO7cuVLbdOvWTdOmTdOwYcOqPB4A4NJ++uknrVy5Up999pk2bdokh8NRZtvAwED17dtXkyZN0qBBg6o0LusBfIk354HNZqtKqEpNTeVCHdXijTfe0IYNG7R9+3alpKTI6XResn14eLiGDx+uBx54QB06dKjUmKwF8CXemgM+sQ4YgI9ISkoy+vXrZ9SrV8+QdMmf5s2bV3m8jz/+2GjYsGG5Y/3yM2LECCMrK6vqvyhQQSkpKcY777xjPPjgg0avXr2MiIgIj82Din7uy/pJTU312O8J/OKee+6p9Gdy8ODBxokTJyo1LusBfIm35wHrAXxVfHx8pT6TgYGBxpQpU4yCggK3xmMtgK/x1hzwhXWAO6bgM7755hutW7fOK2Nt3LhRt99+u/Lz8111NptNv/71r9WyZUulp6dr165dOnPmjOv40qVL5XA4tGrVKgUEsD0bqsfGjRv13HPP6auvvirzmzqgtjpw4ECp9fHx8WrdurUaNWqkwsJCHTp0SLt37zZ9c/jhhx+qZ8+e+vzzz9W4ceMKj8l6AF9jxTwAaoK6desqISFBzZo1U2RkpJxOp86dO6fvvvtOJ06ccLUrKirSggUL9OOPPyoxMVGBgYHlnpu1ADVBdc4By1U5tQV4yPz580vNwNapU8dISEgw1VXlTpEjR44YMTExpvN1797dSE5ONrXLy8szFi5caAQFBZnaTp8+vYq/KVC2suZBaT/cMYXa5tprr3V9xjp27GgsWrTIOHjwYKltjx49akyYMKHEZ7NHjx6G0+ms0HisB/BF3p4HF/fr2rWrkZqa6taPu3elABXVpk0bY8iQIcZLL71k7N692ygqKiqz7datW42bbrqpxFyYO3duueOwFsBXeWsO+MI6QGIKPmP+/PlGUFCQ0aFDB2PcuHHGK6+8Ynz99ddGfn6+kZSU5LEL8t///vemc3Xr1s3Izc0ts/37779fIlH2448/Vnp84FK8laD1hQUIKK5Tp07GoEGDjB07dlS4z5IlS0rMl+XLl1eoL+sBfJG358HFfXr16lXJqAHPy8/Pd6t9UVGRMXLkSNNnOioqysjLy7tkP9YC+CpvzQFfWAdITMFnnDt3rsxFwFOJqQMHDhiBgYGu8wQHBxsHDhwot9/o0aNN448dO7ZS4wPl8VaC1hcWIKC4yt6JN2zYMNNneuDAgeX2YT2Ar/LmPDAM1gPULhkZGUZYWJjpc7127doy27MWoLZxdw4Yhm+sAzwMC58RExOjkJCQah1j2bJlKioqcpXvuOMOtW7dutx+jzzyiKn87rvvKi8vz+PxAaNHj5bD4dCuXbv02muvacKECfr1r3+toKAgq0MDql1l3+gyceJEUzkpKancPqwH8FXenAdAbRMZGakePXqY6g4ePFhme9YC1DbuzgFfQWIKfuX99983lceOHVuhfm3btlXXrl1d5ezsbK9t1A7/4o0ELVDbdOzY0VTOzc1Venr6JfuwHqC2qcw8AGqjevXqmcqZmZlltmUtQG3kzhzwFSSm4DdOnDih3bt3u8p2u13du3evcP/evXubymvXrvVUaACAKrDbS75k+OI3KxXHeoDayN15ANRWhw8fNpXj4uJKbcdagNqqonPAl5CYgt/Ys2ePqdy+fXuFhYVVuH+3bt1M5b1793okLgBA1RS/Rd1utys2NrbM9qwHqI3cnQdAbXTgwAFt377dVbbZbOrVq1epbVkLUBu5Mwd8ScmvVoBaKjk52VRu1aqVW/0TEhIueT4AgDUSExNN5U6dOikgoOzv3lgPUBu5Ow9K89NPP2ns2LH6z3/+o7S0NGVnZysmJkaxsbHq2LGjevbsqTvvvLPEYyKALzh+/Ljuuusu055Rd955Z5n7trEWoLZxdw6Uxqp1gMQU/EbxbxKbNWvmVv/mzZubymfPntX58+cVExNT5dgAK3EhgposKytLr7/+uqlu6NChl+zDeoDapjLzoDSpqalKTU011Z06dUqnTp1ScnKyli5dqmnTpmn8+PF6+umnFR4eXqW4gaooLCzU+fPntW/fPn344Yd65ZVX5HA4XMdbtmypxYsXl9mftQA1XVXnQGmsWgd4lA9+o/gGoA0bNnSrf3h4eIlNqTMyMqoaFmC51NRUvfnmm0pOTlZ6eroKCgpMi88f/vAHNWvWTFOnTlVWVpbV4QIm06dP14kTJ1zl6OhojRs37pJ9WA9Q21RmHlRWdna2FixYoGuvvZZHl+BVU6ZMkc1mc/0EBQWpYcOG6tWrl+bNm2e6IL/xxhv1xRdfXPLfd9YC1DSengOVVR3rAHdMwW8Uv6AODQ11+xyhoaGmV8HWhDccAJ7wywL08ccfa+XKlbrqqqusDgnQ+++/X+KbwGeeeabcu/tYD1CbVHYeXMxut6tHjx66+eab1b59ezVt2lQRERHKysrSTz/9pE2bNumtt97SqVOnXH0OHDigm2++Wdu2bStx5whglSFDhmjixInq169fuW1ZC1AbuTMHLmb1OkBiCn6j+OJT/BuOiggNDdX58+fLPCdQk1i9AAFVsXv3bo0aNcpU169fP91///3l9mU9QG1RlXnwi9mzZ2v8+PFlfqveoUMHDRkyRE8//bSefPJJzZkzR4ZhSPr5rWZ33HGHvvrqK9lstsr/IoCHrF27VkVFRQoJCVHPnj0v2Za1ALWRO3PgF76wDvAoH/xWZSYO/+lCbTF79mwdO3ZMSUlJmjFjhm699VZ17NhRrVq1ci0+8+bN0+HDh/WXv/zF9Nn/ZQH6ZUECvO2nn37SoEGDTBcAzZs319tvv+21f9tZD2A1T82DGTNmVOhRj5CQED333HNatGiRqX7nzp1avnx5xQMHKmnmzJmu/W9SU1OVnJysTZs2adGiRerTp48kqaCgQB999JF69eqlSZMmmTaBLg9rAXxddc0BX1gHSEzBbxTfmC03N9ftcxTvw6afqKl8YQECKuPUqVPq27evjh075qpr3LixPv30UzVo0KBC52A9QE3niXlQWRMnTtSQIUNMdS+++GK1jglIUr169dSiRQvXT9u2bdWjRw9NmjRJ69ev16ZNm0x3cy9ZskQTJkwo83ysBahpPD0HKqs61gESU/AbLD5A5XEhAl9w7tw53XzzzTpw4ICrLjY2Vp999plat25d4fOwHqAm89Q8qIrp06ebytu2bSuxkTTgbT169FBSUpLq16/vqvvnP/+p1atXl9qetQC1jbtzoCo8vQ6QmILfiIqKMpVPnz7tVv+srKwSi090dHRVwwJqDC5EYKWMjAz169dP3333nasuJiZGn376qdub8bMeoKby5Dyoii5duigmJsZVLioqUnJystfGB8py+eWXa+bMmaa6uXPnltqWtQC1kTtzoCo8vQ6QmILfKP4t4uHDh93qX7x9vXr1TJMRqO24EIFVMjMzNWDAAH399deuusjISH3yySfq0KGD2+djPUBN5Ol5UBUBAQFq1qyZqc7di3qguvzmN78xlcv6Io21ALVVRedAVXh6HSAxBb/Rtm1bU/ngwYNu9T906JCp/Ktf/arKMQE1CRcisEJ2drYGDhyobdu2uerCw8O1du1adenSpVLnZD1ATVMd86CqQkNDTeXKPAYFVIeGDRuaEkROp1Opqakl2rEWoLaq6ByoKk+uAySm4DfatWtnKn/77bfKycmpcP8tW7Zc8nyAP+BCBN6Um5urwYMHa/Pmza66unXr6qOPPlK3bt0qfV7WA9Qk1TUPqurMmTOmcmxsrEWRACUFBQWZyhcuXCjRhrUAtVlF5kBVeXIdIDEFv9GkSRO1b9/eVS4sLDT9J688GzduNJVvueUWT4UG1BhciMBb8vLyNGTIENO/vSEhIVqzZo169uxZpXOzHqCmqM55UBVnzpwpcbdIXFycRdEAZnl5eSX+v9KoUaMS7VgLUFtVdA5UhafXARJT8CtDhw41ld94440K9du/f7+2b9/uKoeFhalfv34ejQ3wdVyIwFvy8/N1xx136LPPPnPV1alTR6tWrdJNN93kkTFYD+DrvDEPKuudd96R0+l0lRs1alTisSjAKuvXrzd9PuvWrav4+PhS27IWoDZyZw5UlqfXARJT8CsjRoxQYGCgq7xy5Ur98MMP5fabM2eOqTx8+HCFhIR4PD7Al3EhAm8oLCzU8OHDtXbtWlddUFCQEhMT1b9/f4+Nw3oAX+ateVAZJ0+e1OzZs011t956q2w2m0URAf/ldDr19NNPm+oGDBig4ODgUtuzFqC2cXcOVEZ1rAMkpuBXWrdurdGjR7vK+fn5GjNmjPLy8srss3r1ar355puucnBwsGbNmlWdYQI+hwsReENRUZFGjBih1atXu+rsdrtWrFihwYMHe3Qs1gP4Km/Ng++//14ffPCBW31OnDihwYMH6+TJk6664OBgTZ8+3WNxAZK0aNEiHT9+3K0+BQUFuvfee013MknSxIkTy+zDWgBf5Y054FPrgAH4kCNHjhipqaklfpYvX25Icv3Ex8eX2i41NdU4ffp0uWPExMSYzte9e3dj3759pnZ5eXnGCy+8YAQFBZnaTp8+vTr/CoAyJSUlmT6LzZs3d/sc+/fvN9asWeNWn+PHjxudOnUyjR0cHGykpKS4PT5wKaNGjTJ9ziQZc+fOLfPf+0v95Obmljse6wF8kbfmwS9rytVXX23MmTPHOHDgQJltHQ6HsWjRIqNRo0YlYnvqqaeq468Bfu6aa64xQkNDjREjRhhr1qwxHA5HmW1zcnKMZcuWGVdddVWJz+fvfve7csdiLYAv8sYc8KV1wGYYhlG11BbgOS1atNDhw4erdI7Ro0ebvsUozcaNG9W/f3/l5+e76mw2m6699lq1bNlSGRkZ2rlzp06fPm3qN3jwYK1atcp0yy/gaUePHlVhYWGJ+m3btumee+5xlePj48vcpDM8PLzUjck3btyoG2+8UVdffbVGjhypoUOHqnXr1qWeIzMzU//61780e/Zs07cikvTUU0/p8ccfd+fXAsrlyTvwkpKS1Lt373LbsR7A13hrHvyyHlwsKipK7dq1U2xsrCIiIpSVlaUjR45o9+7dpa5LEyZM0CuvvOKxeIFfdOjQQbt373aVbTabWrVqpRYtWig6OlrBwcHKzMzU4cOHlZycrIKCghLnGDx4sBITE1WnTp1yx2MtgK/xxhzwqXWgyqktwIOaN29eIgPr7s/o0aMrNNZHH31kNGjQoMLnveeee4ysrKzq/QsAjOqdB8XvupJkREVFGd27dzduu+02Y+TIkcbtt99uXHvttYbdbi/13BMmTPDuXwj8RlU/9xf/JCUlVXhc1gP4Em/Ng9LWg4r+hIWFGa+++qr3/lLgd6655ppKfz5DQ0ONZ555xsjPz3drTNYC+BJvzAFfWgfsAvzUwIEDtWfPHs2aNUsrVqzQ+fPnS2133XXX6cEHH9SwYcO8HCHgHRkZGdqyZUu57cLCwjR//nyNHz/eC1EB3sN6AH/Utm1bPfroo/r888+1c+dO5ebmltunTZs2GjNmjMaPH1/qXbmAp7z22mtas2aN1q9fr507d+rChQvl9rnyyis1YsQIjRkzRk2bNnV7TNYC+BJvzAFfWgd4lA/QzxsdbtmyRYcPH9aJEycUFham+Ph4dezYUZdffrnV4cHPVOcjrSdPntQLL7zgEwsQ4ItYD+CPnE6nfvjhB6WkpOjYsWNKT09XXl6eQkNDFRMToyZNmqhz585q0KCB1aHCDxUUFGjfvn06dOiQjh07pqysLBUUFCg8PFyRkZFq0aKFOnbsqJiYGI+NyVoAX+KNOWD1OkBiCgD8lNULEAAAAACQmAIAAAAAAIAlAqwOAAAAAAAAAP6JxBQAAAAAAAAsQWIKAAAAAAAAliAxBQAAAAAAAEuQmAIAAAAAAIAlSEwBAAAAAADAEiSmAAAAAAAAYAkSUwAAAAAAALAEiSkAAAAAAABYgsQUAAAAAAAALEFiCgAAAAAAAJYgMQUAAAAAAABLkJgCAAAAAACAJUhMAQAAAAAAwBIkpgAAAAAAAGAJElMAAAAAAACwBIkpAAAAAAAAWILEFAAAAAAAACxBYgoAAAAAAACWIDEFAAAAAAAAS5CYAgAAAAAAgCVITAEAAMAjkpKSZLPZqvwzY8YMq38VAADgJSSmAAAA4BHffPONR87TuXNnj5wHAAD4PhJTAAAA8Ihdu3Z55DwkpgAA8B82wzAMq4MAAABAzXfy5Enl5uZWuP2FCxc0duxYbd261VU3fPhwrVixojrCAwAAPojEFAAAALzO4XBoyJAh+vzzz111999/vxYvXqyAAG7qBwDAX7DqAwAAwKtOnDihXr16mZJSTzzxhF588UWSUgAA+Bm71QEAAADAfxw8eFD9+/fXoUOHJEkBAQFasmSJ7rvvPosjAwAAViAxBQAAAK/YtWuXBgwYoFOnTkmS6tSpo6VLl2rYsGEWRwYAAKxCYgoAAADVbsOGDbr99tuVmZkpSYqMjNSqVat04403WhwZAACwEg/xAwAAoFolJiZq4MCBrqRUo0aNtHHjRpJSAACAxBQAAACqz0svvaS7775bFy5ckCS1bNlSW7ZsUceOHS2ODAAA+AISUwAAAKgWTz75pP74xz/K6XRKkjp06KAvv/xSCQkJFkcGAAB8BXtMAQAAwKOcTqcmTpyol19+2VXXu3dvrV69WpGRkRZGBgAAfA2JKQAAAHjMhQsXNGLECL333nuuumHDhmnp0qWqU6eOhZEBAABfxKN8AAAA8AiHw6FbbrnFlJT6wx/+oHfffZekFAAAKBWJKQAAAFTZyZMn1bt3byUlJbnqHn/8cb388ssKCOC/nAAAoHQ8ygcAAIAqOXTokPr166eUlBRJUkBAgBYtWqQ//vGPFkcGAAB8HYkpAAAAVNo333yjAQMG6OTJk5Kk4OBgvf3227rrrrssjgwAANQENsMwDKuDAAAAQM2zbds29e/fXw6HQ5Jkt9v18ssv66abbnLrPAEBAWrWrFl1hAgAAHwciSkAAABUyrhx4/T6669X+Txt2rTR999/74GIAABATcNOlAAAAKiUHTt2eOQ8HTt29Mh5AABAzUNiCgAAAG7Lzc3V3r17PXKuDh06eOQ8AACg5uFRPgAAAAAAAFiCO6YAAAAAAABgCRJTAAAAAAAAsASJKQAAAAAAAFiCxBQAAAAAAAAsQWIKAAAAAAAAliAxBQAAAAAAAEuQmAIAAAAAAIAlSEwBAAAAAADAEiSmAAAAAAAAYAkSUwAAAAAAALAEiSkAAAAAAABYgsQUAAAAAAAALEFiCgAAAAAAAJYgMQUAAAAAAABLkJgCAAAAAACAJUhMAQAAAAAAwBIkpgAAAAAAAGAJElMAAAAAAACwxP8B5P06LTE5rO0AAAAASUVORK5CYII=",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize = (12, 6.75))\n",
- "\n",
- "plt.plot(zlist, CoeffStructure.T21avg, color = \"#E64D4E\", linewidth = 3)\n",
- "\n",
- "plt.xlim([10, 35])\n",
- "plt.ylim([-120, 30])\n",
- "\n",
- "plt.xlabel(r'$z$', fontsize = 30)\n",
- "plt.ylabel(r'$T_{21}$ [mK]', fontsize = 30)\n",
- "plt.xticks(fontsize=30)\n",
- "plt.yticks(fontsize=30)\n",
- "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
- "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
- "\n",
- "plt.tight_layout()\n",
- "\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "3a57e7ae",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAKZCAYAAABp1ZinAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VGXePvD7TDmTySST3kkhPfROaAoooshasWBZQNdV39VdX3TX3VVfcd2iW3Bd/e2uiyI2VESxLqKotEDoHRISEkJ678n08/sjOsnJzITUmZT7c11ey/Oc58z5xjUhc89TBEmSJBAREREREREREbmRwtMFEBERERERERHRyMNQioiIiIiIiIiI3I6hFBERERERERERuR1DKSIiIiIiIiIicjuGUkRERERERERE5HYMpYiIiIiIiIiIyO0YShERERERERERkdsxlCIiIiIiIiIiIrdjKEVERERERERERG6n8nQBI43ZbEZGRgYuXryI0tJS+Pj4IDIyEpMnT0ZcXFy/Pis/Px/Hjh1DSUkJmpqaEBERgdjYWMyePRtqtbpfn0VERERERERE1BMjPpTKy8vDwYMHcejQIRw8eBBHjhxBY2Oj/XpsbCwuXLjQ5+dUVlbi6aefxvvvv4+amhqnY2bPno3Vq1fj5ptv7tOzNm/ejLVr12Lfvn1OrwcGBuK2227D7373OwQHB/fpWUREREREREREvSFIkiR5ugh327FjB/70pz/h0KFDLgOiH/RHKLV161asXLkSFRUV3Rp/55134pVXXoFOp+vRc5qamnDffffhvffe69b4sLAwvPHGG1i8eHGPnkNERERERERE1FcjcqbUsWPH8NVXX7nlWTt27MANN9wAk8lk7xMEAVOmTEF8fDzq6upw9OhRVFVV2a+/8847aGhowMcffwyFonvbflmtVtx2223473//K+sPCQnB5MmT4efnh/Pnz+Po0aP4IYcsLy/H9ddfj+3bt2Pu3Ln98NUSEREREREREXUPNzrvQKPRICEhod9er6ioCDfddJMskJozZw5Onz6NQ4cOYdOmTfjqq69QVFSEF198UbbP02effYYnn3yy28/69a9/LQuk1Go1XnrpJRQVFWHbtm3YtGkTDh8+jFOnTmHWrFn2cUajETfccANKS0v7+NUSEREREREREXXfiA2l1Go1Jk2ahJ/85Cd45ZVX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IEcRSo0ybW1tuuGGG/Tcc88NavuysjI99dRTPb7BLx38fr82bdqkffv2qa6uTgUFBaqsrFR1dbWmTJmS9vYAAIYuGAxqz5492rFjhw4ePKjm5mY5HA4VFxdr+vTpmjdvnvLz85N6TsYRjCSZ6CPASOF2u/Xpp59q7969OnjwoFpbW+X3+1VYWKhx48bppJNO0oknniir1ZqU8zF+YKRJdx9JJ0KpUWrt2rX693//d23evLnX90tKSnT11VfrzjvvVGlpqSSppqZG77//vj744AO9//772rJli1pbW6P7TJ48WV988cWw23bo0CHdfvvteu6559TU1NTrNmeccYZuvvlmXX755cM+HwAgNfbt26cXXnhBb775pjZu3KiWlpY+t7VYLPrmN7+pm266SRdddNGwzss4gpEinX3EZDINp6mqra3lZhxp9Zvf/EZvv/223nvvPX3++ecKhUL9bl9QUKCrrrpKP/rRjzRnzpwhnZPxAyNJuvpIpscPQqlRrra2Vlu2bNHBgwfV3t6uCRMmaPLkyZo/f77sdrs2bNigX/ziF/rggw/6/Ie5UzJCqXXr1un6669XY2PjoLZfvny5HnvsMX5ziKyQyuA204MBkKjvfve7evbZZ4e075IlS/Sf//mfKi8vT3hfxhGMFOnuI4wjGGkmTpyoAwcOJLyfxWLRj370I91///0JzQph/MBIk64+kunxY+TN7UJCpk6dqqlTp/b5/kcffaT//d//TUtbNmzYoGXLlsU9eN1kMunUU0/VtGnTdOzYMW3dulWHDx+Ovv/000+rpaVFL730ksxmnsuP9EskuAVyye7du3utr6qq0syZM1VeXq5AIKCamhpt27Yt7rd7r776qs466yy98847mjBhwqDPyTiCkSQTfQQYyfLy8jR9+nRNmjRJhYWFCoVCampq0vbt21VfXx/dLhgM6pe//KW++OILrV27VhaLZcBjM35gNEhlH8koAzntwQcfNCT1eDkcDmP69OlxdZMnTx7yefbv328UFxfHHW/+/PnGjh074rbzeDzGr371K8Nms8Vte+uttw7zJwWGpq8+0ttrOH1ksOfo61VbW5u0nxkYjLlz50avv+rqamP16tXGnj17et32yy+/NFatWtXjul2wYIERCoUGdT7GEYw06e4jsft97WtfM2praxN6+f3+ZP74wICOP/54Y+nSpcYj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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize = (12, 6.75))\n",
- "\n",
- "plt.plot(zlist,CoeffStructure.T_CMB , color = \"#EE9063\", linewidth = 3, linestyle = 'dotted', label = r'$T_\\mathrm{CMB}$')\n",
- "\n",
- "\n",
- "plt.plot(zlist,CoeffStructure.Tk_ad , color = \"#0B92B1\", linewidth = 3, label = r'$T_\\mathrm{ad}$')\n",
- "plt.plot(zlist,CoeffStructure.Tk_xray , color = \"#E64D4E\", linewidth = 3, label = r'$T_x$')\n",
- "plt.plot(zlist,CoeffStructure.Tk_avg, color = \"#665191\", linewidth = 3, label = r'$T_k$')\n",
- "\n",
- "plt.plot(zlist,CoeffStructure._invTs_avg**-1 , color = \"#77AC54\", linewidth = 3, label = r'$T_s$')\n",
- "\n",
- "\n",
- "plt.xlim([10, 35])\n",
- "plt.ylim([0, 100])\n",
- "\n",
- "plt.xlabel(r'$z$', fontsize = 30)\n",
- "plt.ylabel(r'$T$ [K]', fontsize = 30)\n",
- "plt.xticks(fontsize=30)\n",
- "plt.yticks(fontsize=30)\n",
- "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
- "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
- "plt.legend(fontsize=20, frameon = False)\n",
- "plt.tight_layout()\n",
- "\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "6815b8c5",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAKZCAYAAABp1ZinAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA7hBJREFUeJzs3XlcXPW9P/7XmX0Y9h0CAQIkELJBFrYsJNGaaDQas7jUGuvS6rX3W/W21mtbtf60trVab21vb60ate5ZjFsSs5GFJQkBskEIewKEJewzwzDb+f1BwJCwB4YDvJ6PBw/mzHzO57xP6yeZzyvnfI4giqIIIiIiIiIiIiIiB5KNdgFERERERERERDTxMJQiIiIiIiIiIiKHYyhFREREREREREQOx1CKiIiIiIiIiIgcTjHaBdDE1NraiuzsbGRlZSErKwvHjx9HUVEROtfdLy0tRWho6OgWSUREREREREQjhqEUjYrFixcjNzd3tMsgIiIiIiIiolHC2/doVHReEQUAbm5uSElJgb+//yhWRERERERERESOxCulaFT8+Mc/ho+PD+bNm4eIiAgIgoCUlBRUV1ePdmlERERERERE5AAMpWhU/Od//udol0BEREREREREo4ih1DhRWlqK3NxcVFVVQa/XIyAgACEhIUhKSoJSqRzt8oiIiIiIiIiIumEoNQJKSkpw7NgxZGVl4dixY8jOzkZra2vX5yEhISgrKxuWY23evBmvvfYaMjIyevzc09MTGzZswO9+9zt4e3sPyzGJiIiIiIiIiK4XQ6lhkpqait///vfIyspCQ0PDiB9Pr9fj4YcfxieffNJnu4aGBvzv//4vtm7divfeew833XTTiNdGRERERERERNQfhlLDJDc3F999951DjmWz2bBhwwZ8++233d738fFBbGws3NzcUFxcjJycnK6n3NXU1GD16tXYs2cPFi5c6JA6iYiIiIiIiIh6IxvtAsY7tVqN8PDwYe3zV7/6VbdASqlU4q9//SsqKiqwa9cufPbZZzh+/DhOnz6NxMTErnbt7e24/fbbcfHixWGth4iIiIiIiIhosHil1DBSKpWIiYnBvHnzMH/+fMybNw8zZ85EWloali5dOizHKCkpwRtvvNHtvc8//xyrV6++pu306dOxd+9eLF++vGvNqfr6erzwwgv4xz/+0edxvvjiC+j1+uuuNykpCVOmTLnufoiIiIiIiIhofGEoNUzuv/9+/PSnP4VGoxnR47zwwguwWCxd2xs3buwxkOqk1WqxadMmzJw5E2azGQDw9ttv45e//GWfYdHPf/5zlJeXX3e97777LkMpIiIiIiIiIroGb98bJh4eHiMeSLW1tWHz5s3d3nv66af73W/q1Km4/fbbu7atVis++uij4S6PiIiIiIiIiGjAeKXUGLJr1y4Yjcau7cTERERFRQ1o3wceeACfffZZ1/bWrVvx61//utf2J0+ehN1uH3qxlzk5OV13H0REREREREQ0/jCUGkN27tzZbTslJWXA+y5atAgKhQJWqxUAkJOTg5qaGvj5+fXY3tXVdch1EhERERERERH1h7fvjSGnT5/utn3lk/X6o9PpMHPmzG7vnTlzZljqIiIiIiIiIiIaLIZSY0h+fn637YiIiEHtHx4e3m07Ly/vumsiIiIiIiIiIhoKhlJjRENDAxoaGrq9N3ny5EH1cXX7wsLC666LiIiIiIiIiGgouKbUGNHU1NRt28nJCTqdblB9+Pr6dttubm6+3rKGrKioCIcPH+72XnV1ddfrzZs3w9vbu2vb2dkZa9eudVh9RERERERERDSyGEqNEXq9vtu2VqsddB9X79Pa2npdNV2Pw4cP44EHHuj181/84hfdtkNCQhhKEREREREREY0jDKXGiKtDKY1GM+g+rg6lru5zPLPb7Xj++efx1ltvQRCEIffz+OOP4/HHHx/GyoiIiIiIiIgG5s0338Sbb7455P1FUcTDDz+M559/HjLZ6K/oxFBqjBpKsHI9Ycxw27hxIzZu3Oiw4z3//PN48cUXr7ufZ599Fs8+++wwVERERERERETkeJ1z49/97nejXAlDqTHD2dm523ZbW9ug+7h6n6v7HM/eeuutrtcBAQFD7odXStFYFRUVhYsXLyIgIABnz54d7XKIHI5jgIjjgIhjgMaD671S6uLFiwA65sgMpWjAGEpdn86rxAICAlBVVTXK1RA5XueluTKZDK6urqNcDZHjcQwQcRwQcQzQePDf//3f+O///u8h7x8YGIiLFy9K5k6q0b+BkAbEzc2t27bRaITBYBhUH7W1td223d3dr7csIiIiIiIiIqIhYSg1Rnh5ecHDw6Pbe+fPnx9UH+Xl5d22IyMjr7suIiIiIiIiIqKhYCg1hkRHR3fbLioqGtT+JSUlffZHREREREREROQoDKXGkBkzZnTbzsjIGPC+BoMBJ0+e7LM/IiIiIiIiIiJHYSg1hqxYsaLbdmpq6oD3PXToEKxWa9d2bGws/Pz8hqs0IiIiIiIiIqJBYSg1htx0003QarVd2xkZGQN+lOmmTZu6bd9xxx3DWRoRERERERER0aAwlBpDnJycsHbt2m7v/eEPf+h3v3PnzmHbtm1d2wqFAvfcc8+w10dERERERERENFAMpcaY559/Hkqlsmt706ZN+PLLL3ttbzKZ8MADD8BsNne99+CDDyI8PHxE6yQiIiIiIiIi6otitAsYTyoqKrqt29Spurq627bVakVZWVmPfTg7O8Pb27vXY0yZMgX/7//9P7z66qtd761duxavvfYaHnnkEahUqq738/Pz8dBDDyE9Pb3rPS8vLzz33HMDPSUiIiIiIiIiohHBUGoYLVy4EOXl5f22q6ysRFhYWI+f3X///des/3S1V155BWfOnMGOHTsAABaLBT/72c/w4osvIi4uDi4uLigpKUF2djZEUezaT6VSYdu2bQgICBj4SRERERERERERjQCGUmOQXC7HZ599hoceegiffvpp1/u1tbXYuXNnj/v4+vrivffew6JFixxVJhERERERERFRr7im1Bjl7OyMTz75BJ9//jkSEhJ6befp6YlHH30Up0+fxooVKxxYIRERERERERFR73il1DDqbZ2okbR27VqsXbsWpaWlyM7ORlVVFQwGA/z9/RESEoLk5ORu60wREREREREREUkBQ6lxIiwsrNd1qoiIiIiIiIiIpIahFE0Ijz/+OJ599lk8/vjjo10K0ah48skn0dLSAldX19EuhWhUcAwQcRwQcQwQSW9uLIhXPp6NaJxqaWmBm5sbmpub+ZcQERERERERTUhSmxtzoXMiIiIiIiIiInI4hlJERERERERERORwDKWIiIiIiIiIiMjhGEoREREREREREZHDMZQiIiIiIiIiIiKHYyhFREREREREREQOx1CKiIiIiIiIiIgcjqEUERERERER0QhJTU2FIAg9/mi1WgQHB2PVqlX417/+BZPJNNrlXrfOc0tJSenx85SUlK42RAyliIiIiIiIiEaByWRCRUUFvvnmGzz88MOYM2cOzp07N9plETkMQykiIiIiIiIiB3j00Udx6tSprp8jR47g//7v/xAdHQ0AKCgowIoVK9DW1jbKlRI5BkMpIiIiIiIiIgfw9fXFjBkzun4WLFiARx55BMePH8eCBQsAAKWlpXj77bdHuVIix2AoRURERERERDSKtFotXnrppa7tHTt2jGI1RI7DUIqIiIiIiIholCUkJHS9Li8vv+ZzvV6PV155BYmJifD09IRarUZQUBDWrl2Lr7/+us++OxcX71x8vKCgAI888gjCwsKg0WgQEBCAdevWISMjY1jPiag/DKWIiIiIiIiIRplCoeh6bbPZun2Wk5ODadOm4ZlnnkFmZiYaGxthNptRWVmJLVu24NZbb8Wdd945oKf37dixA3PnzsVbb72FsrIytLe3o7q6Gps3b8bChQvx2muvDfu5EfWGoRQRERERERHRKDt58mTX68DAwK7XlZWVWL58OaqqqiAIAh544AHs2rULWVlZeP/99zF79mwAwNatW3H//ff3eYyqqircc889UCgUePnll5Geno709HS89NJLcHV1hd1ux1NPPYWtW7eOzEkSXUXRfxMiIiIiIiKaSES7HfbW1tEuw6FkLi4QZKN33cbLL7/c9brzNjsA+PnPf47GxkYAwFtvvYUHH3yw67O5c+di/fr1WLlyJfbv34/PPvsMGzduxMqVK3s8RmFhIdzc3JCRkdH1xD8ASExMxOrVq5GUlISWlhb87Gc/w6pVq6BSqYb5LIm6YyhFRERERERE3dhbW1F7349GuwyH8v3gfcjd3Bx6zLa2NuTm5uL3v/89vvrqKwCAq6srfvrTnwIALl68iG3btgEAbrrppm6BVCe1Wo133nkHkZGRsFqtePPNN3sNpQDgN7/5TbdAqlNMTAyeffZZPP3006iqqsL27duxbt264ThNol7x9j0iIiIiIiIiB3jhhRcgCELXj5OTE5KSkroFUlu2bIGPjw8AYP/+/V3rS/UUSHUKDQ3FjTfeCABITU29Zk2qToIg9HmL3wMPPABBEAAAe/bsGfwJEg0SQykiIiIiIiKiURQcHIyf/exnOHXqFG644Yau90+fPt31Oj4+vs8+Oj83Go0oKSnpsU1YWBi8vb177cPHxwehoaHXHJtopPD2PSIiIiIiIiIHePTRR/HYY491bWs0Gnh5ecHDw6PH9g0NDV2v/fz8+uzb39+/x/2u5Ovr22+Nfn5+KC0t7bUPouHEUIqIiIiIiIi6kbm4wPeD90e7DIeSubiM+DF8fX0xY8aMEelbFMV+23Temne9/RANF4ZSRERERERE1I0gkzl80W+6lqenZ9frmpoaTJ48ude2NTU1Pe7XW5ve1NbW9tkH0XDimlJEREREREREEnTlVVVHjhzps+3Ro0cBAE5OTggLC+uxTWlpKerr63vto66uDmVlZdccm2ikMJQiIiIiIiIikqCUlBTI5XIAwNtvv91ru/Pnz2P37t1d+ygUPd8UJYoi3n+/99syN23a1HX73pULrhONFIZSRERERERERBIUGBiIO+64AwCwa9cuvPPOO9e0MZvN+PGPfwyLxQIAePzxx/vs88UXX0RBQcE17+fn5+Oll14CAAQEBGD16tXXWz5Rv7imFBEREREREZFEvf7669i7dy8aGxvx0EMPIS0tDXfddRc8PT1x9uxZvPrqq8jNzQUArF+/HitXruy1r8jISNTW1iIhIQFPP/00UlJSAACpqal45ZVX0NzcDAD461//CpVKNdKnRsRQioiIiIiIiEiqgoKCsHfvXqxatQpVVVV45513erxias2aNXjvvff67CswMBCvv/461q9fj2eeeeaaz2UyGf74xz/izjvvHLb6ifrC2/eIiIiIiIiIJCw2NhYFBQX4/e9/j/j4eLi7u0OlUiEwMBBr1qzBl19+iS1btkCj0fTb1y233IKsrCw88MADCAkJgUqlgq+vL+68804cPnwYTz31lAPOiKiDIHauYkY0jrW0tMDNzQ3Nzc1wdXUd7XKIiIiIiIgcJiUlBQcOHMCSJUuQmpo62uXQKJLa3JhXShERERERERERkcMxlCIiIiIiIiIiIodjKEVERERERERERA7HUIqIiIiIiIiIiByOoRQRERERERERETmcYrQLICIiIiIiIqKRwyfukVTxSikiIiIiIiIiInI4hlJERERERERERORwDKWIiIiIiIiIiMjhGEoREREREREREZHDMZQiIiIiIiIiIiKHYyhFREREREREREQOx1CKiIiIiIiIiIgcjqEUERERERERERE5HEMpIiIiIiIiIiJyOIZSRERERERERETkcAylaELRt7SNdglEREREREREBEAx2gUQOdJvHn8fcxOikZAShZlzQ6FUcggQERERERERjQbOyGlCsdtEnDhaghNHS+DkrMa85KlISInClKn+EARhtMsjIiIiIiIimjAYStGEZdS34+CuUzi46xR8A9wQvyQK8Yuj4OPvNtqlEREREREREY17XFOKCEDtxWZ89ckR/Pqx9/CnX2/God2nYTS0j3ZZREREREQ0xqWmpkIQhB5/tFotgoODsWrVKvzrX/+CyWQa7XKvW+e5paSk9Ph5SkpKV5uePP/8812fp6amjlyhJAkMpWhCudl2FiFiY59tivKq8O//3Ydf/Phf+OerO3A6uww2m91BFRIRERER0URhMplQUVGBb775Bg8//DDmzJmDc+fOjXZZRA7D2/doQklak4wlmZm4VJuHk4I/TsgC0CA49djWarHheHohjqcXws1Dh/glUUhcGoXAYC8HV01EREREROPBo48+iscee6xr22g0Ijc3F3/5y1+Qn5+PgoICrFixAmfOnIFWqx3FSokcg6EUTSgu69fB5ccPwO3UaQTu3YvFaemotGhwQhaA04If2gRlj/s1Nxrw3RfH8d0XxxEa4YeEpVGYv3AqnF34FwUREREREQ2Mr68vZsyY0e29BQsW4L777kNKSgqOHj2K0tJSvP3223j88cdHqUoix+HtezThCDIZ1LNnwf3JJ+D//ibEPPZD3B4JPGU7hA22E4iy10Im9n67XllRDT556wB++eDb+N8/fIPco8WwWmwOPAMiIiIiIhpPtFotXnrppa7tHTt2jGI1RI7DUIomNJlOB6cVN8H7T3+E/9/+inm3L8I9rhfwX7ZDuNl2FoFic6/72qx25B4pxv++8g1++dDb+PitVJQWVkMURQeeARERERERjQcJCQldr8vLy6/5XK/X45VXXkFiYiI8PT2hVqsRFBSEtWvX4uuvv+6z787FxTsXHy8oKMAjjzyCsLAwaDQaBAQEYN26dcjIyBjWcyLqD2/fI7pMGRwM5QMb4XLfD+GWnQ2PPXuw4Ogx1Nq0yJUF4KTgD72g7nFfQ6sJqTtOInXHSfhN8kDS0mgkpETB3dPZwWdBRERERERjkULx/fTcZut+J0ZOTg5WrVqFqqqqbu9XVlZiy5Yt2LJlC9asWYMPP/wQGo2mz+Ps2LED69atg8Fg6HqvuroamzdvxtatW/GnP/0JTz755DCcEVH/GEoRXUVQKKBZsACaBQtga2yEy779CNi9G8ur0lAieCJXCMBZwRs2Qd7j/jWVjdj273R88VEGYuaEIGlZNGbND4NSyeFGREREREQ9O3nyZNfrwMDArteVlZVYvnw5GhsbIQgCNm7ciLvuugteXl7Iy8vDn//8Z5w4cQJbt27F/fffj08//bTXY1RVVeGee+6BQqHAyy+/3HXl1P79+/GHP/wBLS0teOqppxAaGoo1a9aM2LkSdeIsmagPcg8PON+5Bro1d8B8Jg/Ou79DZFo62sxnkSf44oQsAOcF9x73Fe0iTmeX4XR2GXQuGixYNA3Jy6cjOMzHsSdBRERERDRIdlFEvck82mU4lJdGBZkgjNrxX3755a7XnWERAPz85z9HY2MjAOCtt97Cgw8+2PXZ3LlzsX79eqxcuRL79+/HZ599ho0bN2LlypU9HqOwsBBubm7IyMhAdHR01/uJiYlYvXo1kpKS0NLSgp/97GdYtWoVVCrVMJ8lUXcMpYgGQBAEqGfEQD0jBq6PPIK2Q4fgunsP5hYeRwM0OCkE4ITMH42CU4/7G1pN2P/tCez/9gSCQryRsDQK8Yuj4Orec3siIiIiotFUbzIj7F+7RrsMhyp96Cb4aHtermOktLW1ITc3F7///e/x1VdfAQBcXV3x05/+FABw8eJFbNu2DQBw0003dQukOqnVarzzzjuIjIyE1WrFm2++2WsoBQC/+c1vugVSnWJiYvDss8/i6aefRlVVFbZv345169YNx2kS9YoLnRMNkkyng27FCnj/+VV4/88bCF79Ayxzqcd/2jLwgDULsfYqqERrr/tXlF/C5k2H8fRDb+PNl77E8fRCWMy9tyciIiIiovHhhRdegCAIXT9OTk5ISkrqFkht2bIFPj4dd1fs37+/a32pngKpTqGhobjxxhsBAKmpqdesSdVJEATcf//9vfbzwAMPQLh8tdiePXsGf4JEg8QrpYiugzI0FMoHH4TLj34E07EsaHbvRkh2NlbYzyFf8EGOLBDlgkeP+9rtIk4dL8Op42Vw0qkxb+FUJC+bjpAI366/CIiIiIiIaPwLDg7G7bffjv/6r//C5MmTu94/ffp01+v4+Pg++4iPj8eOHTtgNBpRUlKCyMjIa9qEhYXB29u71z58fHwQGhqK0tLSbscmGikMpYiGgaBUQpuUCG1SImx1dTDu3oO43bsxpz4bDeh4el+uEIAWoecnYRgN7Ti46xQO7jqFwMleSF4+HfGLp8HFjbf3ERERERGNF48++igee+yxrm2NRgMvLy94ePT8D9kNDQ1dr/38/Prs29/fv8f9ruTr69tvjX5+figtLe21D6LhxFCKaJjJfXzgcs/dcN6wHu3Z2VDv2gXPrONIsZWgTPDACSEAeYIPLELPw6/qfD0+f/cQtryfhtnzw5C8bDqmx4ZALufdtkRERETkGF4aFUofumm0y3AoL83IL+rt6+uLGTNmjEjfoij222Ygd2QMpB+i4cJQimiECHI5NPPnQzN/PmyXLsG4Zy8i9+zBlNo83Aw58gUf5AoBKJN59ri/3WZHTmYxcjKL4eahQ/ySKCQvi4Z/UM/tiYiIiIiGi0wQHL7oN13L0/P77/41NTXdbu27Wk1NTY/79damN7W1tX32QTScGEoROYDc2xsud22A8/p1MJ88CePu3ZiTkYk51mo02TXIFQKQKwtAk6Dtcf/mRgO+++I4vvviOMKm+iNpaTTmLZwKJx2/KBARERERjVdXXlV15MiRPkOpo0ePAgCcnJwQFhbWY5vS0lLU19fDy8urx8/r6upQVlZ2zbGJRgpDKSIHEmQyqOfMgXrOHNhbWtC2PxWK3buRcr4Ui22lKBc8kCMEIE/whVWQ99hH6blqlJ6rxmfvHsSc+HAkLY1G1MxgyHh7HxERERHRuJKSkgK5XA6bzYa3334b69at67Hd+fPnsXv37q59FIqep/qiKOL999/HE0880ePnmzZt6rp974YbbhiGMyDqG2exRKNE5uoK3erb4P3X/4HXH16BbulShCkNWGPPw3/ZDmGV7Swmic297m8x23Ds0Dm88bvt+O9HN+HLjzNRV917eyIiIiIiGlsCAwNxxx13AAB27dqFd95555o2ZrMZP/7xj2GxWAAAjz/+eJ99vvjiiygoKLjm/fz8fLz00ksAgICAAKxevfp6yyfqF6+UIhplgiBAFR0NVXQ0XB96sOPqqV07Me9CBebZKlELHXJlATgh+MMg9Hy7XuMlPb75/Ci++fwops0MQvKy6YhNiIBKzSFORERERDSWvf7669i7dy8aGxvx0EMPIS0tDXfddRc8PT1x9uxZvPrqq8jNzQUArF+/HitXruy1r8jISNTW1iIhIQFPP/00UlJSAACpqal45ZVX0Nzc8Y/cf/3rX6FSjfzC70ScsRJJiMzFBbrbboXTratgycuDYecu+Kal4QfWIixHMYoET+QKgSgQvGEXer7QseBUBQpOVUD7VirmL5qGpGXRCI3wG9CTNoiIiIiISFqCgoKwd+9erFq1ClVVVXjnnXd6vGJqzZo1eO+99/rsKzAwEK+//jrWr1+PZ5555prPZTIZ/vjHP+LOO+8ctvqJ+sJQikiCBEGAKiYGqpgY2B9+CMb9+2Hc9R2mVVRgmlgPA5Q4JfghVxaIasGlxz7ajGYc3HUKB3edQmCwJxKXTkdCShRc3Z0cfDZERERERHQ9YmNjUVBQgDfffBNffPEFCgoKYDQa4e3tjYSEBGzcuBG33nrrgPq65ZZbkJWVhT/96U/Yt28fLl68CHd3dyxatAhPPfUUEhMTR/hsiL4niJ2rmBGNYy0tLXBzc0NzczNcXV1Hu5whEUURlrw8GHd9h7a0NODyPeMX4YwcWSBOCv4wCco++5DJBMyIC0XSsumYOTcUCmXPi6kTEREREdH4kZKSggMHDmDJkiVITU0d7XJoFEltbswrpYjGiCuvnnJ9+CG07U+FcddOBFyoQID9HG5EEQoEb+QIgSgWPIEebtez20WczCrFyaxSOLtqEL84CsnLp2NSiPconBERERERERFNZAyliMagK9eeMp/Jg3HnTiA9HTOstZgh1qIJauQKgciVBaBJ0PbYh77FhL1f52Lv17kIjfRD8vIYzF8YCa1Tz4upExEREREREQ0nhlJEY5ggCFDPiIF6RgxsTQ+ibe8+GHftgnt1NVLEUiy2laJccEeuEIg8wRcWoefb9coKa1BWWIPP3z2IuUmRWHhDDMKjArg4OhEREREREY0YhlJE44Tc3R3Od66B7o7bYc7NhWHHTrQfO4YwexPCxCbcjAKcEXyRKwvEecG9xz7M7VZk7M9Hxv58+E3yQPKyjsXR3Tx0jj0ZIiIiIiIiGvcYShGNM4JMBnVcHNRxcbDV18O4ezeM330H9aV6xIkXEWe7iHpokSMLRK4QAL3Q8+16NZWN2PpBGr74MB0z54Yiafl0zIwLhVzBxdGJiIiIiIjo+vHpezQhSO0JA44m2mxoP34cxp270H78OHB52NsgoEjwQrYQiHOCF0RB1mc/Lm5aJKREI2lZNAKDvRxROhEREREREQ0Tqc2NGUrRhCC1gTearLW1aPtuN4y7d8Pe2Nj1fitUOCEEIFsWiAbBqd9+wiL9kHxDDOYvnAqNVjWSJRMREREREdEwkNrcmKEUTQhSG3hSIFqtMGVmwvjtDphPn/7+fQDlcEeuLABnBL9eF0fvpFIrMC95KpKXT+fi6ERERERERBImtbkxQymaEKQ28KTGcv48jN9+i7b9+yG2mbreb4ccZwRf5MgCcaGXxdGv5D/JA8nLY5CQEgVX9/6vtiIiIiIiIiLHkdrcmKEUTQhSG3hSZTca0ZZ6AMZvv4X1/Plun9XBCbmyAOQKATD0sjh6J5lchtnzw5C8PAbT50yGXN73WlVEREREREQ08qQ2N2YoRROC1Aae1ImiCEteHgzf7oApIwOwWrs+G+zi6O6eusuLo0+HX6D7CFdOREREREREvZHa3JihFE0IUht4Y4mtsQlte/bAuHMnbHV13T4b7OLoEdGBSFo2HXOTIrg4OhERERERkYNJbW7MUIomBKkNvLFItNnQnp0N444daD+eDVzxR0fn4ug5skCcEXxh7WdxdLVGiXnJkUheHoMp0/y5ODoREREREZEDSG1uzFCKJgSpDbyxzlpdDeOOnTDu2QOxtbXbZybIcUrwR44sAFWCW799BQR7YuENMUhYEgVnV+1IlUxERERERDThSW1uzFCKJgSpDbzxQmxvR9uhQzB88y2sxcXXfF4DHXJlATghBMAo9H27nlwhw5wF4Vh4QwyiZgVDJuPVU0RERERERMNJanNjhlI0IUht4I03oijCUnAOxm+/Rdvhw90WRgcAKwScE7yRIwSiSPCC2M/tel6+rkhePh1JS6Ph4e0ykqUTERERERFNGFKbGzOUoglBagNvPLM1NaFtd88LowNAyxWLozf2szi6IBMQM2cykpfHYNa8MCiUfa9VRURERERERL2T2tyYoRRNCFIbeBOBaLOhPSsLhm+/hTkn95rP7QDKBXdkC4HIl/nBClmf/bm4ahG/JArJN0xHYLDXyBRNREREREQ0jkltbsxQiiYEqQ28icZaWQnjzp0w7tkL0WC45nMjFDgl+OO4LBC1Qv+3602Z5o/k5TGYlxwJjbbvtaqIiIiIiIiog9Tmxn1fmkBENAwUkybB9cEH4bfpXbg9/jgUYWHdPneCFfFiBR61HcXD1qOYa6+EGrZe+yspqMYHf9+LXz74Nt7/2x4UF1wE83UiIiIikqLU1FQIgtDjj1arRXBwMFatWoV//etfMJlMo13udes8t5SUlB4/T0lJ6WozVm3atKnrHDZt2nTN52VlZV2fb9y4scc+QkNDIQgCQkNDR7RWqVOMdgFENHEIajWcfnAjtDfeAEt+Pgxffw1TegZgt3d8DmASWjHJfhY32c/hjOCHHPkknIdbj/21myxI25uHtL15CAj2RPLy6UhYEgUXt77XqiIiIiIikgKTyYSKigpUVFTgm2++wauvvoovv/wSU6dOHe3SiByCoRQROZwgCFBNnw7V9OmwXbrUcWvfru9gb27uaqOCHbHiRcRaL+ISnJAjC8AJZTD0tp4XO794oQGbNx3Gtn+nY86CKUheHoPoWcGQyXlBKBERERFJw6OPPorHHnusa9toNCI3Nxd/+ctfkJ+fj4KCAqxYsQJnzpyBVqsdxUqJHIOzNSIaVXJvb7j88IfwfftfcPt//w/KiPBr2njDiBvtxXii/QDusp3ANEUzZL1c7Wuz2nE8vQj/8+J2PPvoe/jqk0zU17aM8FkQEREREfXP19cXM2bM6PpZsGABHnnkERw/fhwLFiwAAJSWluLtt98e5UrHts5bBJ9//vnRLoX6wVCKiCRBUKngtHwZvP78Z3j98Q/QLF4MyLtfFSWHiCjxEu42ZeHnlkNYjlJ4aXrvs+FSK77+7CiefXQT3vjdFzieXgiLxTrCZ0JERERENDharRYvvfRS1/aOHTtGsRoix2EoRUSSIggCVFFR8Pivp+D79r/gfNddkLm7X9POFWYsspbgP/R7cb/tOOa4tkGp6PnyKVEE8nLP45+v7sDTD72Dz945iMry+hE+EyIiIiKigUtISOh6XV5efs3ner0er7zyChITE+Hp6Qm1Wo2goCCsXbsWX3/9dZ99d1451Ln4eEFBAR555BGEhYVBo9EgICAA69atQ0ZGxrCeE1F/uKYUEUmW3NMTLvfcDed1a2FKT4fh629gKSjo1kYGIExsQlhDOm6CAqddwpGjCUNVo6XHPg2tJuz9Ohd7v85FWKQfkm+IwfyFU6HRqhxwRkREREREPVMovp+e22zdn0Sdk5ODVatWoaqqqtv7lZWV2LJlC7Zs2YI1a9bgww8/hEbTx60E6LgKa926dTAYDF3vVVdXY/Pmzdi6dSv+9Kc/4cknnxyGMyLqH6+UIiLJE5RKaJcsgfef/givP78K7dIUQHFtpq6FFfNbC/BI3U48ImQjcRKg1fSevZcW1uDf/7sPv3zwbbz35h4U5VdBFMWROxEiIiIiol6cPHmy63VgYGDX68rKSixfvhxVVVUQBAEPPPAAdu3ahaysLLz//vuYPXs2AGDr1q24//77+zxGVVUV7rnnHigUCrz88stIT09Heno6XnrpJbi6usJut+Opp57C1q1bR+Ykia7CK6WIaExRRUZC9cQTcNn4AIy7dsG4YwfsjY3XtAu0NCKwfC+WQobCyXORI5+EogutPfbZbrIgfV8e0vflwX+SB5KXxyAhJQqu7k4jfTpERERERACAl19+uet15212APDzn/8cjZe/77711lt48MEHuz6bO3cu1q9fj5UrV2L//v347LPPsHHjRqxcubLHYxQWFsLNzQ0ZGRmIjo7uej8xMRGrV69GUlISWlpa8LOf/QyrVq2CSsW7CWhkMZQiojFJ7uEOl7s2wPnONTClZ8Dw1VewnDt3TTsV7Ig5fwwxOIYmn8k4OWkusi5Y0NLc1mO/1ZWN2PL+YWz7MB2z5oVh4fLpiIkNgUzOC0uJiIho4rDbRRhae/6+NF7pXLSQ9faI5xHS1taG3Nxc/P73v8dXX30FAHB1dcVPf/pTAMDFixexbds2AMBNN93ULZDqpFar8c477yAyMhJWqxVvvvlmr6EUAPzmN7/pFkh1iomJwbPPPounn34aVVVV2L59O9atWzccp0nUK4ZSRDSmddzatxjaJYthLiiA4etvYEpLA6zXPmXPve48Ftedx0KNBuWxKci2euPMmWrY7dfesme32ZF7pBi5R4rh7qlD8vIYJC2fDm9fVwecFREREdHoMrS24b8e+Ndol+FQr777EFzcRvZK+RdeeAEvvPBCr5+7urpiy5Yt8PHxAQDs37+/a32pngKpTqGhobjxxhuxY8cOpKamwmazQX7Vk6yBjocK9XWL3wMPPIBf/epXEEURe/bsYShFI47/9E9E44Zq2jR4PPUkfP/1Fpzv2gCZm1uP7WQmE8KO7cSdOf/G01FNuHVZKHwD3Hvtt6nBgG8+P4pfP7oJf3lhG7LSzsFiuTb0IiIiIiIaiuDgYPzsZz/DqVOncMMNN3S9f/r06a7X8fHxffbR+bnRaERJSUmPbcLCwuDt7d1rHz4+PggNDb3m2FKzadMmCILQ68+BAwcAdISAfbWj0ccrpYho3Ol4at89cF63Dm0HD8Hw1Vew9vIXs/pkFuaezMKCoCBU37ocx5uccPxICSzma0MnUQTyT1xA/okL0LlokJAShYU3xCAw2GukT4mIiIiIxoFHH30Ujz32WNe2RqOBl5cXPDw8emzf0NDQ9drPz6/Pvv39/Xvc70q+vr791ujn54fS0tJe+yAaTgyliGjcEpRKOC1fBu2ypbDk5cHw1dcwZWYCdvs1bW0VFfCpeA8rnZ1x8/Ibke85DemZ5Sgvru2xb0OrCXu/ysXer3IxZZo/kpfHYF5yJDRaLgZJRERERD3z9fXFjBkzRqTvgTxFeiBXB42Fp1HffvvtmDdvXq+fP/DAA8jKyromBCTpYShFROOeIAhQxcRAFRMDW10dDN98C+N330HU669pK+r1EL/ahmkyGWYnJqJxRQqOlBhx9GABjIb2HvsvKahGSUE1PnvnIOYmRSJ5+XSERwXwkmAiIiIas3QuWrz67kOjXYZD6Vy0o13CNTw9Pbte19TUYPLkyb22ramp6XG/3tr0pra2ts8+pMDd3R3u7u69fq7T6QCMbAhIw4OhFBFNKHIfH7huvB/Od21A2/79MH79NawXKq5taLfDlJYGbVoaboyMxM0bVyFf5ou0/fk4d7qyx77bTRak78tD+r48+E3yQPKy6UhIiYKbh26Ez4qIiIhoeMlkwogv+k39uzJQOXLkSJ+h1NGjRwEATk5OCAsL67FNaWkp6uvr4eXV8/ITdXV1KCsru+bYRCOFC50T0YQk02igW7kS3m++Cc8Xnod67txe21oKC2F843WEffAqfjIbeOGPd2LFmrlwde/9i1pNZSO2fpCGXz38Dv7+ytc4cawENtu1tw0SEREREfUmJSWl6yl6b7/9dq/tzp8/j927d3fto1D0fP2JKIp4//33e+1n06ZNXbfvXbngOtFIYShFRBOaIAhQx8bC87nfwufvf4PTzTdD0Gh6bGu/VI/W994HnnkCy/Sn8f+9sAKP/uoWzJoXBpms51v17HYRJ46W4O+//xrPPPIutv07HbUXm0bwjIiIiIhovAgMDMQdd9wBANi1axfeeeeda9qYzWb8+Mc/hsViAQA8/vjjffb54osvoqCg4Jr38/Pz8dJLLwEAAgICsHr16ustn6hfvH2PiOgyRVAQ3H76E7j88F4Yd++B8ZtvYKu9dqFzsb0dxm+/hXHHDkyePw/Rt92Gtp8uRWbqWaTtzes1dGpuNGDn1izs3JqFqTMmIXl5DOISIqBS849iIiIiIurZ66+/jr1796KxsREPPfQQ0tLScNddd8HT0xNnz57Fq6++itzcXADA+vXrsXLlyl77ioyMRG1tLRISEvD0008jJSUFAJCamopXXnkFzc3NAIC//vWvUKn4AB8aeZwJERFdRebsDOc7bofutlthysyEYfuXsJw9e21DUUT70WNoP3oMirAwLL7tVvzg9btQXFSHtL15OJ5eCHO7tcdjnDtdiXOnK/HJW6lYsHgaFt4Qg8lT+n9ELxERERFNLEFBQdi7dy9WrVqFqqoqvPPOOz1eMbVmzRq89957ffYVGBiI119/HevXr8czzzxzzecymQx//OMfceeddw5b/UR9YShFRNQLQS6HNjkZ2uRkmM+dg2H7lzClpQH2a9eGspaWovmN/0Hre+/D/+aVuO++Fdjw4GJkpRUibc8ZlBb2/KSTNqMZB3aewoGdpxAc5oOFN8RgweJpcNKpR/r0iIiIiGiMiI2NRUFBAd5880188cUXKCgogNFohLe3NxISErBx40bceuutA+rrlltuQVZWFv70pz9h3759uHjxItzd3bFo0SI89dRTSExMHOGzIfqeIHauYkY0jrW0tMDNzQ3Nzc1wdXUd7XJoDLPV1cHw9TcwfvcdRIOh94ZKJbRLlkB3261QhoaisrweaXvPIDP1LAx6U5/HUKrkiEuMwMIbYhA5fRIEoef1qoiIiIiIBiIlJQUHDhzAkiVLkJqaOtrl0CiS2tyYoRRNCFIbeDT22dva0LZ3HwxffQXbxYt9tlXNng3d6tugjouD1WbHiaMlOLznDM6evID+/gT2DXBH8vLpSEyJhpunbhjPgIiIiIgmCoZS1Elqc2OGUjQhSG3g0fgh2u1oz8qCYfuXMJ861WdbRXAQdLethjZlCQS1GpdqW5C+Lw/p+/LQeEnf574ymYCZc0ORfEMMZsSFQi7nw1OJiIiIaGAYSlEnqc2NGUrRhCC1gUfjk6WkBIYvv0LbwYOAtecFzgFA5uYGp5Ur4XTzSsjd3WG32ZF34jzS9ubhxLES2KzXrll1JVd3JyQujUby8unwC/QY7tMgIiIionGGoRR1ktrcmKEUTQhSG3g0vtkaG2HcsQPGHTthv/xY3R4pldAuTYFu9Woog4MBAC1NRhw5cBZpe8/gYkVjv8eKiA5E8vLpiEuMgEbLx/YSERER0bUYSlEnqc2NGUrRhCC1gUcTg2g2oy31AAxffgnr+fN9tlXPnQvd7auhmjULgiBAFEWUFFTj8J4zyEo7B3N771deAYBao8S85Egk3xCDKVP9uTg6EREREXVhKEWdpDY3ZihFE4LUBh5NLKIowpyTA/0X22HOze2zrSIsDLrbb4d20UIICgUAoM3Yjqy0QhzecwZlhTX9Hi8gyANJy2KQkBIFV3en4TgFIiIiIiIaB6Q2N2YoRROC1AYeTVyWsjIYtm9H24F+1p3y9oJu1So43XQTZLrvn7pXWV6P9H15yDyQD32Lqc9jyeQyzJoXhoXLp2N6bAgXRyciIiIimuCkNjdmKEUTgtQGHpGtoQHGb7+FYcdOiK2tvbYTtFo4/eBGON16KxS+vl3vWy02nDxeivS9eTidUw7R3vcf5e6eOiSkdCyO7hvgPlynQUREREREY4jU5sYMpWhCkNrAI+oktrfDuHcfDF9+CVtVVe8NZTJokpPhfMftUEZEdPuoqUGPjP35SN+Xh9qLfSysftnUmEldi6Or1MrrPQUiIiIiIhojpDY3ZihFE4LUBh7R1USbDe3HjkH/xXZY8vL6bKuaOQO622+Heu5cCLLvb8kTRRGFeVVI23sGx9OLYDH3vTi61kmF+YumIXn5dISE+3JxdCIiIiKicU5qc2OGUjQhSG3gEfXFXFAAwxfbYcrIAOz2XtvJg4LgvHo1tEtTIKhU3T5rM7Tj2OFzSNubh7Ki/hdHDwrxRtLy6YhfMg3OLtrrPQUiIiIiIpIgqc2NGUrRhCC1gUc0ENbqahi+/BJte/ZCNPW+qLnMzQ1Ot9wM3c03Q9bDf9+V5ZdweE8ejhw4C4O+78XRFQoZZi+YguTlMYieFQwZF0cnIiIiIho3pDY3ZihFE4LUBh7RYNhbW2HcuQuGr7+GvbGx94YqFZyWLYNu9W1QTJp0zccWixUnjpYgbW8e8k+cR39/+nt4OyNp6XQkLYuGt5/bdZ4FERERERGNNqnNjRlK0YQgtYFHNBSixYK2gwdh+GI7rOXlvTcUBKgXLIDzmjugio7usUlDXSvS9+chfV8+6mtb+j32tBlBSFo+HXEJ4VwcnYiIiIhojJLa3JihFE0IUht4RNdDFEWYc3Kg/2I7zLm5fbZVRkXBec0dUC9Y0G1R9E52u4iC0xVI23sGOZnFsFpsffancVJhfvJUJC2LRthUfy6OTkREREQ0hkhtbsxQiiYEqQ08ouFiKS2F4YvtaDt4ELD1HijJJwXCefXt0C5bes2i6J0MrSYcPVyAtD15uFBa1++xA4I8kLhsOhKWRMHNQzfkcyAiIiIiIseQ2tyYoRRNCFIbeETDzVZfD8PXX8O4cxdEg6HXdjJ3dzitugW6lSshc3Hptd35klqk7c3D0UMFMOrb+zy2TCYgJi4EyctiMHNuKBRK+ZDPg4iIiIiIRo7U5sYMpWhCkNrAIxopdqMRxt27Ydj+JeyXLvXaTtBooL3xBuhWr4bC17fXdhazFblHS5C+b2CLo7u4apGQEoWkZdMRONlrqKdBREREREQjQGpzY4ZSNCFIbeARjTTRaoXp8GHot26Dtays94YyGTSLFsF5zR1QhoX12WfDpVZkpp5F+r481FU391tDWKQfkpbHYH5yJLQ69SDPgIiIiIiIhpvU5sYMpWhCkNrAI3IUURRhzs2Ffus2mE+c6LOtOjYWujVroJo1s88FzEVRRGFeFdL35eF4eiHM7dY++1WqFJibGIGk5dMROX0SZDIujk5ERERENBqkNjdmKEUTgtQGHtFosBSXQP/FNpgOHQbs9l7bKSPCoVuzBprERAjyvteHMrWZkZVWiPR9eSg+e7HfGrz9XJG0bDoSl0bD07v3Na2IiIiIiGj4SW1uzFCKJgSpDTyi0WStrYVh+5do++47iO29L2Iu9/eH7vbb4bR8GQR1/7ffVVc2In1fHjL256OlydhnW0EAomdPRtKy6ZizYAqUKsWgz4OIiIiIiAZHanNjhlI0IUht4BFJgb2lBYYdO2H8+mvYm3tfI0rm6gqnVaugu3klZAMYPzabHaezy5C+Nw8nj5fBbuv9qiwAcNKpMX/hVCQtm46QCN8+bx0kIiIiIqKhk9rcmKEUTQhSG3hEUiK2t8O4bx8M276Arbq613aCWg3tD26E7rbboPDzG1DfLU1GHDlwFml7z+BiRWO/7QODPZG0fDriF0fB1d1pwOdARERERET9k9rcmKEUOZzFYsGOHTtw/PhxHD9+HCUlJaivr0djYyPUajUCAwMxb948bNiwAbfeeuuwXDUhtYFHJEWizQZTZiYMW7bCUlTUe0OZDJpFC+F8xx1QTpkysL5FEaXnqpG+Lx/H0s7BZDT32V4ml2Hm3FAkLY3GzLmhkCv6XtuKiIiIiIj6J7W5MUMpcriKigoEBwcPqG1SUhI2b96MgICA6zqm1AYekZSJogjzqVMwbNmK9pycPtuqYufAec0aqGbNGnCAbG63ICezGGn78lBwqqLf9i6uWixYPA1Jy6YjKNR7QMcgIiIiIqJrSW1uzFCKHK6iogKzZ8/GkiVLMG/ePISFhcHf3x8eHh5obm7GiRMn8K9//QunTp0CAERHRyM7OxsajWbIx5TawCMaKyylZTBs24a2gwf7fGKfIjwczncO7Il9V7pU24KM/fnI2J+P+tqWfttPnuKDxKXTsWDxVDi7aAd8HCIiIiIikt7cmKEUOZz98sRWJpP12sZqtWLNmjX46quvAAB/+9vf8Nhjjw35mFIbeERjjbW2FsYvv4Txu90QTaZe28kDAuC8Zg20y5ZCUCoH3L/dLuLcmQqk78tDdkYxLGZrn+3lChlmzwtD0rLpmB4bArm89z9PiIiIiIiog9TmxgylSLIyMjKQlJQEAFi7di0+//zzIfcltYFHNFbZW1th+HZH/0/s8/SA7rbb4LRiBWROg1uwvM3QjuPphUjfl4/igov9tnd1d0L8kigkLYtGYLDXoI5FRERERDSRSG1uzFCKJOvMmTOYMWMGAOAHP/gBdu3aNeS+pDbwiMa6AT+xT6eD7pab4bRqFeTu7oM+Tk1VI9L35SMzNR9NDYZ+24dG+iFpaTTmLZwKnfPQb/klIiIiIhqPpDY3Zig1TpSWliI3NxdVVVXQ6/UICAhASEgIkpKSoBzELTRS8swzz+CVV14BAPznf/4n3njjjSH3JbWBRzReiDYbTBmZ0G/ZAmtxce8NVSo43XgjdLevhsLPb9DHsdvsyD95ARn785FzpBhWi63P9gqlHHMWTEHSsumInhUMGW/vIyIiIiKS3NyYodQIKCkpwbFjx5CVlYVjx44hOzsbra2tXZ+HhISgrKxsWI61efNmvPbaa8jIyOjxc09PT2zYsAG/+93v4O0t7adW2e121NbW4uzZs3jrrbfw0UcfAQBUKhVyc3MRHR095L6lNvCIxhtRFGHOPQH9li0wnzzZe0OZDNrFi6FbeyeUkycP6VgGvQlZaYXI2JeH0sKaftu7e+qQkBKNpGXR8Av0GNIxiYiIiIjGA6nNjRlKDZPU1FT8/ve/R1ZWFhoaGvpsOxyhlF6vx8MPP4xPPvlkQO39/Pzw3nvv4aabbrqu4w63S5cuwcfHp9fP3dzc8NFHH+Hmm2++ruNIbeARjWfmggLot2xFe2Zmn+3UCxbAee2dUEVFDflYVRfqkbH/LDJT89HSZOy3/ZRp/khcOh3zkiPhpFMP+bhERERERGOR1ObGDKWGyV/+8hc88cQTA2p7vaGUzWbDbbfdhm+//bbb+z4+PoiNjYWbmxuKi4uRk5ODK//vVavV2LNnDxYuXDjkYw+33kIpQRDwxBNP4Je//CX8hnCrz9WkNvCIJgLLhQswbN2GttRUwNb77XaqGTOgu/NOqONiIQjCkI5ls9mRl3se6fvycPJYCaxWe5/tFUo5YuPDkZAShemzJ/P2PiIiIiKaEKQ2N2YoNUx6C6XUajWCgoJQfMVaK9cbSv3iF7/Aq6++2rWtVCrx2muv4ZFHHoFKpep6Py8vDw899FC3W/u8vLxw6tQpBAQE9HmML774Anq9fsg1dkpKSsKUKVN6/dxmsyE/P7/rdX19PTIyMvDPf/4TlZWVWLFiBf7xj38gKCjouuqQ2sAjmkhsdXUwbN8O467vILa399pOMWUKnNfeCU1iIgS5fMjH07e24dihc0jfn4/zxbX9tnfz0CF+SRQSl0bx6X1ERERENK5JbW7MUGqY/OUvf8Evf/lLxMTEYN68eZg/fz7mzZuHmTNnIi0tDUuXLu1qez2hVElJCaKiomCxWLre++KLL7B69eoe27e1tWH58uXdgqmf/OQn+Mc//tHncUJDQ1FeXj6kGq/07rvvYuPGjYPeT6/X484778R3330HPz8/7N+/n2tKEY1x9pYWGL7+Boavv4bYR+gtDwiA85o10C5bCuE6H9RQWX4J6fvyceTgWbQ2t/XbPiTcF4nLojF/4VQ4u2iv69hERERERFIjtbkxQ6lh0tjYCK1WC43m2keQp6amDlsodf/99+P999/v2t64cSPefffdPvc5d+4cZs6cCbPZDABQKBQoKCjo8wqm0Q6lAKC2thahoaFoa2vDkiVLkJqaOuQ6pDbwiCYye1sbjN99B8MX22Gvr++1nczTE7rVq+G04ibItNcXENmsNpzOKUfG/nyczCqFrZ/b++QKGWbNC0NiSjRmxIVArhj6lVtERERERFIhtbkxQykHGK5Qqq2tDd7e3jAav1/MNz8/H1EDWCR4w4YN+Oyzz7q2X3zxRfz617/utX1LSwvs9r4nbQPh5OTU7ZbCwfrBD36A3bt3AwCqqqr6ve2wN1IbeEQEiBYL2vanQr91K2xVVb22E1xcoLvlFuhW3QLZMIxffWsbjh0+h4x9+SgfwO19Lq5azF80DUnLohEc1vuDGYiIiIiIpE5qc2OGUg4wXKHUF198gTvuuKNrOzExEenp6QPad+fOnVi5cmXXdmxsLLKzswddg6Pdc889+PjjjwEA6enpSExMHFI/Uht4RPQ90WaDKTMT+s1bYL1i/b2rCRoNnG66CbrbV0PuNTxrP1Wdr0dGaj6OHChAc6Oh3/ZBId5IWBqF+MVRcHV3GpYaiIiIiIgcRWpzY8VoF0ADt3Pnzm7bKSkpA9530aJFUCgUsFqtAICcnBzU1NQMy5PtRlJlZWXXaxcXl1GshIhGiiCXQ5ucDE1SEsy5J6DfvBnmU6euaSeaTDBs3w7DN99Au2wZnNesgSJwaFdPdgqc7IU7f7QQt9+bhPwT55GxPx+5R0tgtfT8tMCK8kvYvOkwtr6fhpjYECQujcaseWFQqvjXKRERERHRYPFb9Bhy+vTpbtuDuWpIp9Nh5syZyMnJ6XrvzJkzkg6lysrKuhZod3JyQnh4+ChXREQjSRAEqGPnQB07B+azBdBv3oz2o0evbWi1ou2779C2Zw80yclwXnsnlGFh13VsuVyGGXGhmBEXCqOhHVmHzyEjNR8lBdU9trfbRZw6XoZTx8vg5KzGvOSpSEiJwpSp/hAE4bpqISIiIiKaKBhKjSH5+fndtiMiIga1f3h4eLdQKi8vD8uWLRuW2gbjww8/xIoVK+DVx+03dXV1WL9+fddTBu+++25or3OhYyIaO1RR0+D562dhKS+HfvMWmA4dAq5e585uh+nQIZgOHYJ63jw4r18H1QDW2OuPk06NxTfNxOKbZqKmqhEZqWeRmZqPxks9PzHQqG/HwV2ncHDXKfgGuCFhSTTil0yDt5/bdddCRERERDSecU0pBxiONaUaGhquCXH0ej10Ot2A+3jqqafw2muvdW3/53/+J954441B1TEcUlJScOTIEdxyyy1ISUnB9OnT4eHhAavVisrKShw4cADvvfceGhsbAXSEbxkZGfD29h7yMaV23ywRDY61uhqGrdtg3LsXuBxW90Q1cyac16+HatbMYb1iyW4XUXC6Apn785GdWQRzu7XffSKnByJhSRTmJkVCq1MPWy1EREREREMltbkxr5QaI5qamrptOzk5DSqQAgBfX99u283Nzddb1pCZTCZs2bIFW7Zs6bPdzTffjLfffvu6AikiGvsU/v5we+xRON+1AYYvv4Jxx7cQ20zXtDOfOoWGU6egnDYNzuvXQT1v3rCEUzKZgOhZwYieFYy7H0lBdkYRMlLzce50Za/7FOZVoTCvCp+8fQCz509BQko0ps+ZDLlcdt31EBERERGNBwylxgi9vvttI0O5le3qfVpbW6+rpqH68MMPkZqaigMHDiA3Nxc1NTWoq6uDzWaDm5sbIiIiEB8fj7vuugvx8fHDeuyoqCjIZEOfED755JN48sknh7EiIhoMuacnXDfeD+e1d8LwzbcwfPklxB7+LLMUFKDxxf8PirAwOK9bC01iIgS5fFhq0GhVSFo2HUnLpuNSbQuOHDiLzNSzqL3Y1GN7i9mGrLRCZKUVwtXdCfMXTUViSjSCQr25/hQRERERDcprr73W7Q6owbJfvSTGKGMoNUZcHUppNJpB93F1KHV1n44yadIk3Hvvvbj33nsdfuyLFy9e1/4tLS3DVAkRXQ+ZszNcNqyHbvVtMO7aBcO2L2BvaLimnbW0FE1//BPkkwLhvHYttEuWQFAM31993r6uuGXdAty8dj7KCmuQkZqPY4fPwahv77F9S5MRe7/Kxd6vcjEpxAsJS6KxYPFUuHs6D1tNRERERDR+tbS0dHtK/VjHUGqMGsq/rvNf5IGAgIDrulJKCvfcEtH3ZBoNnFevhu7mm2HcuxeGzVtgq629pp2tsgrNb/wP9B9/At2aO+B0ww0QVKphq0MQBIRN9UfYVH+se2ARTh8vR2ZqPk5ll8Fm7flfoyrL67Hl/cPY+u80RM8KRsKSKMyJD4daoxy2uoiIiIhofHF1dcWkSZOGvL/dbr/uizWGE0OpMcLZufu/ore1tQ26j6v3ubrPieDs2bMMlojGIUGphG7FCjjdcAPaDh6EfvMW2Coqrmlnq61Fyz/+D/pPP4Pu9tvhtOImyIb5yZ5KpQKxCeGITQiHvrUNWYcLkZmaj9LCmh7bi3YRebnnkZd7HmqNEnGJEUhMiUJkTBBkMv5jAhERERF973qXlOlc6FwqGEqNEQyliIj6JygUcFq2DNqUFJgyMqD/fDOsJSXXtLM3NqL13Xeh37wZuttug+6WmyEbgT8TnV20SFk5CykrZ6G6srFr/amGSz2v6ddusiBjfz4y9ufD09sFCxZPQ0JKFAKCPIe9NiIiIiKi0cZQaoy4Osk0Go0wGAyDegJf7VW3tLi7uw9HaUREkiPIZNAmJ0OTlIT27GzoP/0MlrNnr2kntrZC/+GHMGzbBqdbbobuttsgH6F/OfKf5IHV9yTi1rsSUJRficzUszieXghTm6XH9g2XWrFzaxZ2bs3C5HBfxC+ehgWLpsHV3WlE6iMiIiIicjSGUmOEl5cXPDw80NjY2PXe+fPnER0dPeA+ysvLu21HRkYOW31ERFIkCAI0c+dCHRcH8+nT0H/2OcwnTlzTTjQaYfh8M4xffgWnm34A3R13QO7lNSI1yWQCpsYEYWpMEO56aAlyj5YgM/Us8k6ch2gXe9znfHEtzhfXYst7hzF9zmTEL47CnPgpUKm5/hQRERERjV0MpcaQ6OhopKend20XFRUNKpQqueoWlsHsS0Q0lgmCAPXMmVDPnAlzQQH0n3+O9qPHrmkntrfD8OVXMHy7A043LIfuzjuh8PMbsbpUaiUWLOq4Aqq5wYCjhwqQkZqPyvL6Htvb7SJOZ5fjdHY51BolYhPCkbAkCtNmBEEmH/pDHIiIiIiIRgNDqTFkxowZ3UKpjIwM3HrrrQPa12Aw4OTJk9f0R0Q00aimTYPnr38NS2kp9J9/DlNaOiBedYWS1Qrjzl0w7t4DbUoKnNetgyIwYETrcvPU4cbVcbhxdRwulNYhM/Usjh4qQEuTscf27SYLMlM71qhy99Rh/qJpSFgShaBQ7xGtk4iIiIhouAiiePU3cRpuqampWLp0add2SEgIysrKBt3Ptm3bsGbNmq7txMTEbiFVX3bu3ImVK1d2bcfGxiI7O3vQNYxVnU8YaG5u5tP3iKgba0UF9Ju3oC01FbDbe24kk0GzaBGc16+DMjjYYbXZbXacPXUBmQfOIiezGOZ2a7/7TArxQvziKCxYNBUe3i4OqJKIiIiIxgqpzY0ZSjnAcIVSRqMR3t7e3Z6il5+fj6ioqH73veuuu/Dpp592bf/ud7/Db37zm0HXMFZJbeARkfRYq2tg2LoVxj17AGsv4Y8gQJOUBOf166EMC3VofaY2M3KPluDIgbPIP3mh1/WnOgkCMHVGEOIXRyEuMRxaJ7WDKiUiIiIiqZLa3JihlAMMVygFAD/60Y/wwQcfdG1v3LgR7777bp/7nDt3DjNnzoTZbAYAKBQKnD17FuHh4UOqYSyS2sAjIumy1ddDv3UbjLt2AZf/3OyJOj4eLhvWQxkR4cDqOjQ3GHD0cAGOHDiLC6WX+m2vVMkxa94UxC+ZhhmxIZAr5A6okoiIiIikRmpzY4ZSDjCcoVRJSQmioqJgsXz/CPHt27fjtttu67G9yWTC8uXLu93m95Of/AT/+Mc/hnT8sUpqA4+IpM/W2ATD9u0wfvstRJOp13bquXPhvGE9VAO4anUkVJbXI/PAWRw7VIDGen2/7XUuGsxfOBULFk/DlKn+EATBAVUSERERkRRIbW7MUGoYVVRUwNrDLR+ZmZm4++67u7YnTZqEw4cP99iHs7MzvL37XqT2F7/4BV599dWubaVSiddeew2PPPIIVCpV1/v5+fl46KGHugVSXl5eOHXqFAICRnbBXqmR2sAjorHD3tLS8US+r7+GaOx50XEAUM2eBecNG6AepYdI2O0iCvMqceTAWRzPKILJ2PtVXp18/N06nv63eBr8J3k4oEoiIiIiGk1SmxszlBpGoaGhKC8vv64+7r//fmzatKnPNjabDbfeeit27NjR7X1fX1/ExcXBxcUFJSUlyM7OxpX/96pUKuzZsweLFi26rhrHIqkNPCIae+x6PQxffwPDV19BbG3ttZ0qJqbjyqnZs0ftKiRzuxWnjpfiyIGzOJVdDrutlwXcrzA53Bfxi6dhfvJUuHnqHFAlERERETma1ObGDKWGkaNCKQDQ6/V46KGHui1e3hdfX1+89957WLFixXXVN1ZJbeAR0dhlNxph3LEDhi+2w97c3Gs75bRpcN6wHuq5c0f1Fjl9SxuOpxci88BZlBRU99tekAmImhGEBYunITaBC6QTERERjSdSmxszlBpGjgylOm3evBl//vOfkZmZ2ePnnp6e2LBhA1544QX4+PhcV21jmdQGHhGNfXaTCcZdu2DYtg32hsZe2ykjwuG8fj3UCxZAkMkcWOG16qqbkHmgAEcPFqD2YlO/7TsWSA/DgsXTMCM2FAolF0gnIiIiGsukNjdmKDVOlJaWIjs7G1VVVTAYDPD390dISAiSk5O7rTM1UUlt4BHR+CGazTDu3g39li2wX6rvtZ0iNBTO69dDk5Q46uGUKIooL6rFkYMFyEo7h5am3tfK6uTkrMbcxEgsWDwNEdGBkMm4QDoRERHRWCO1uTFDKZoQpDbwiGj8ES0WtO3dB/3mzbDV1vbaThEcBOcNG6BJToYgH/0rj2w2OwpOXcCRgwXIySxGu8nS7z4e3s6Yv3Aa4hdPQ1Bo3w/nICIiIiLpkNrcmKEUTQhSG3hENH6JVivaDhyA/vPNsFVV9dpOHhQElw3roVm4UBLhFACY2y04cawURw8W4HTOwBZID5zs1bFA+sKp8PLln69EREREUia1uTFDKZoQpDbwiGj8E202mA4fhv6zz2C9UNFrO/mkSR3h1KJFkgmnAEDf2obj6UU4erAARfm9h2tXiogOxILF0zA3KQLOLtoRrpCIiIiIBktqc2OGUjQhSG3gEdHEIdrtMKVnQP/pp7D28TAM+aRAOK9fD+3ixZIKpwDgUm0Ljh3qWCC96kJDv+1lchliYidjwaJpmD1/CtQapQOqJCIiIqL+SG1uzFCKJgSpDTypEUURNlGE1S7CYhdhtdthsYuwX37Pard3fW4TRdgu/xYB2EURogiIAERc8fryHy1it+N0P65cJkAuCJAJuPy746fzfbkAKGQyKGQCFIIA2eXfne+pZDLIudgyjRGi3Q5T5pGOcKq0tNd28sBAOK9fB+2SJZILp0RRRGV5PY4cLMCxQwVorNf3u49KrcDsBVMwf+FUxMwJ4RP8iIiIiEaR1ObGDKVoQpDawOuL1W6HwWKD0WKD3mKF0WqDwWJFm9UGg8V2+Xf37XabHSarDaYrfrd3/rZ1fN5us6Pd2vHbZLPBbOsInix2O6z2sfvHgEwAVDIZlDIZlHIZVPKOsEol7/hRy2XQyOVQX36tVsihueK1Vi6DRiGHk0IOrUIOjUIOrUIGrUIBrUIGJ6UCOoUcOpUCzko5nBQKOKvkUMlkEAQGYjR4ot2O9qNH0frxJ32HUwEBHVdOpUgvnAIAu11EUX4ljh48h+MZhTDq2/vdx8lZjbjECCxYOBWR0ydBJh/dpxASERERTTRSmxszlKIJwREDr91mQ5PJgqZ2C1rNVrSYLWgxW3t4bUXL5Tatlu/fN1is0JttMNv7X1iYRp9CJsBZqYCTQg6dUgEXlQLOKgVclB2hlfPl93TKjvdc1Uq4qhRwUyvhplLCVa2Aq0oJN7UCagkGDjTyRFH8PpwqKem1ndzfH84b1kObkiLJcAoALBYrzuSU4+jBcziZVQKL2dbvPu6eOsxNjsSCRdMQEu7LkJeIiIjIARhKEY2CgQ48URRhsNhQbzKjwWRGo8mMBpMFje1mNJosaDSZ0dhu6XjdbkbT5ddN7Ra0WfufhBH1RCOXwVWthLtaCY/O3xoV3K947aFWwl3T8bmnRgUPjQqeGiUUMl5pMtaJooj2Y8eg/+QTWIqKe20n9/fvuK0vJQWCQuHACgenzdiO3CMlOHb4HPJPnId9AFdi+ga4Yf7CaZi/aCoCgjwdUCURERHRxMRQimgUdA68D7PPwqhQ41JbOy61mXGpzYx6Uzvqu16b0T6AR6BPdJ3rQMkEAQIAoes3On5D6HqNy5936nzVuR6VTRRhFwGbXYQdHetV8Q+lgXNVKeCpUV0OqpRdr721nT/qbr891SquwyVRoiiiPes49B9/DEtRUa/txko4BQAtTUZkZxTh6KECFJ+9OKB9gsO8OwKqhVPh6eMywhUSERERTSwMpYhGQefAc/rDxxC0TqNdzqDIBQE6pRxOyo51j5wUiq7XOqUCGoUMWkXHmkmarvWS5NAoLq+bdPm16vLaSpor1lpSy+VQyDoWFldesaC4UiaDTAYoZTLIBaHj/a7Fx4URv82mc+F1W9dC65d/RDvsdsAqXl4Py2aHxW6H2SbCbO94bbF9v91+xZpaJusV62tZO9bV6lyDy2ixwWTrWJ/LZLXDaO143Xb5M4PFCtM4CStlAuChVsHHqSOk8tWq4et01c8V72kU0rxdbDwTRRHtx493XDl1rrDXdnI/v441p5ZKP5wCgPraFhw7fA7HDp9DRdmlAe0THhWABYumYW5SBFzcxtaf3URERERSxFCKaBQ4OpTSKuRwUSngplLARaWEi0pxefv7166qjnWGXLrWIVJAp1BAp+wIm5yUcuiUXFBbKmx2EQarFQbz9wvQ681W6C2Xf8xW6C8vTq83W9FqscJw+XfrFWuLNbVb0NJuHTNrh7mqFPBzUsNPp+n47aSBv04NPyc1/C+/5+ukgbdWBRn/Ox1WoiiiPTun48qpc+d6bSf384PzunXQLls6JsIpAKi6UI9jh87h6KECXKpp6be9TCYgalYwFiyahjnxU6B1UjugSiIiIqLxh6EU0SgYSiillAnwvLyuT+etUR7qjt8da/10rOnTbf0fjRLuKiWUfKIU9cNktaHZbEFze8fC9y1mS9d6ZR1rlV1es+zK15fXMjNYpLd+mUImwM9JjUCdFgHOGgTqNAjQaRDo3Plbi0CdBs6qsRGaSMmAwylf344rp8ZQOCWKIsqKanDs0DlkpRWiudHQ7z4KpRwz54Zi/sKpmDk3DCr12DhXIiIiIilgKEU0CjoH3vR/fAE/T8+uNXZ8tCp4aTpee11+7aXt+HFRKniFEklSu82GRpMF9aaOBfi/X5S/Y2H+BpP58pppHWun1bW1o8VsHe2yAXRceRXorEWQswaTnLWXfzQIctFefl8LFwZXPRJFEeacHLR+/AksBQW9tutac2rpUsk+ra8ndpsd5/IqcezQOWRnFsGob+93H7VGiTnxUzA/eSqiZ0+GQjl2zpeIiIhoNDCUIhoFUht4RI7WbrN1LejfGVbVGts7ftrav39tbEddWzssA3hi2khxVSkw6XJAFeyqRbCzFsEuWgS7OCHYRYtAZ82EfuqgKIow5+ai9eOPYTnbTzi1YQO0KUvGVDgFAFaLDWdyy3Hs8DmcOFoCc3v/oaqTsxpxCRGYt3AqpsZMgpxXrBIRERFdQ2pzY4ZSNCFIbeARSZkoimhst3SFVDXGdtQaTagxtKPaaEKNsR01hnbUGE241GZ2+NMSZQIQqOsIqoJctJjsosVkVyeEujohxLUjuFKPsRBmKDrCqRNo/fijvsOpwEA4b1gP7eLFYy6cAoB2kwUnjpXg2KFzOJNbDpu1//XYXNy0mJsUifkLp2LKtADI+MRJIiIiIgDSmxszlKIJQWoDj2i8sNjsuNRmRrXRhCq9CVWGNlTpTbho6Nw24aK+Dc0OvH1QABCg0yDkckg12dUJIS5ahLg6IcxNh0nj7EqrriunPvq479v6JgXCZcMGaBYtGpPhFAAYWk3IzizCsUPncO5MBQbyDcbDyxnzkiMxb+FUhIT78rZsIiIimtCkNjdmKEUTgtQGHtFEY7BYu0KqKn0bKlrbUGkwobK1DZX6NlToTWgwmR1Si0ImYLKLFqGuOoS6OSHM1Qmhbrqu3+5qpUPqGG7fL4j+ESznCnttJw8K6ginFiaP2XAKAJobDDieUYSsw+dQXHBxQPv4+LthXnLHFVSBk70YUBEREdGEI7W5MUMpmhCkNvCI6FptVhsq9W2o1HeEVRf0bbjQ2oaKViPOt3YEWUbryD950EOtRKibE6a46TDFTYdw98u/3XTwdVJLPsgQRRHtx49D/9HHsBQV9dpOERwM57vvgiYpCcIYv3KsvrYFWemFyDp8DudL6ga0T0CQB+YtnIp5yVPhP8ljhCskIiIikgapzY0ZStGEILWBR0SDJ4oiGkwWVOjbcL7F2BFatXQEVuUtRpxvNaLBZBnRGpyV8o6wyr0jpOp8HeHmDH+dtAIrURTRnpWF1o8+hrW4uNd2ipAQON99NzQJ8WM+nAKAmqomZKWdw7HD53DxQsOA9gkO88a85KmYt3AqvH35dwQRERGNX1KbGzOUoglBagOPiEZGi9mC8y1GlLUYUd5yOaxqMaK81YiyZiNaLSO3tpVOKUe4mw4R7s4Id9chwv37114a1agFVqIoov3o0Y5wqrS013aKsDC43H031PELJBWuXY/K8nocSzuHrMPnUFfdPKB9wiL9MG/hVMxNioSHl/MIV0hERETkWFKbG0s2lGppaUFWVhbOnTuHsrIy1NbWwmAwwGKxQKfTwdXVFcHBwQgLC8OcOXMwbdq00S6ZJExqA4+IHK/zSquyFgNKmzuCq7JmA0ovh1gXWo2wj9DfiB5q5eWgyhlTPZwR6dHxO8Jd57AnBYqiiPYjR9D68Sd9h1Ph4XC5526o580bN+GUKIooL65FVlohstLOofGSvt99BAGIiA7EvOSpiEuMgKu7kwMqJSIiIhpZUpsbSyqUOnDgAL7++mvs3LkT+fn5GExprq6uWLx4MW655RbceuutCAgIGMFKaayR2sAjIumx2Oy4oG9DWbMBxc0GlDQZUNJsRHGzAaXNBrTb7MN+TJkAhLo6YaqHC6ZeDqo6f7y16mE/HgCIdjtMmZnQf/QxrOfP99pOGRkJ53vugToudtyEUwBgt4soKbiIrLRCHE8vREuTsd99BJmAqTGTOgKqhHA4u2odUCkRERHR8JPa3HjUQ6ny8nL885//xAcffIDKykoAuCaM6u3LcG/tZDIZbrjhBjz44INYs2YNZONgjQy6PlIbeEQ0tthFEVV6E4qa9ChpNqCk2YDipu/DK9MIBFaeGhWmeThjmoczojxdMM3TBdM8nBHkooVsGEIi0W6HKT0d+o8/hvVCRa/tlNOmweWee6CaM3tchVMAYLfZUZhXiWOHC5GdUQSD3tTvPjKZgKhZwZibFInY+HDoXDQOqJSIiIhoeEhtbjxqoVROTg7+8Ic/YOvWrbDZbF0B05VfeAdTWud+V/cTHByMJ554Aj/5yU+g0fCL40QltYFHRONHZ2BV2KTvCKqa9ChqMqCoyYDSFgOsw3xPoE4px1QPZ0zzcOkWWE1xc4JiCP8II9psMB0+jNZPPoGtsqrXdsrp0+Fy7z1Qz5x5PeVLls1qQ/7JC8hKK0TOkWKYjOZ+95HJZZg+uyOgmhMfDifdyFzdRkRERDRcpDY3dngoVVhYiF//+tfYsmULRFGEKIoQBKFbAKXVahETE4NZs2YhJCQEQUFB8PDwgJOTExQKBdra2mAwGFBVVYXKykrk5+fj5MmTqKj4/l96r+xTEAT4+/vjueeew4MPPgi5g9bvIOmQ2sAjoonBarfjfGsbihr1KGo2oLBRj8JGPc416lFl6P+qnMFQyWSI9NAh2tMV0V4uiPbs+JnipoNc1v8VTqLNhraDB6H/+BPYqqt7P87sWXC5916ooqKGs3xJsZitOJNTjqz0Qpw8Vor2ATzVUa6QYfqcyZiXPBWz54dB68SAioiIiKRHanNjh4VSRqMRL7zwAv7yl7/AarVecxVUfHw8brvtNixduhTz588fUnBUXV2N/fv3Y8+ePdi+fTsaGjoeBd0ZUAmCgJiYGPztb3/DokWLhuW8aGyQ2sAjImoxW1DUaMC5xlYUXA6qCpv0KGo0wGwfvtsBNXIZpno4Xw6qXBHt6YLpXi4IcXXq8TZA0WZDW2oq9J98CltNTa/9qufNhcs990AZETFstUqRud2C09nlyEo7h5NZZbCY+3+Co0IpR0xsCOYlRWLW/DBotCoHVEpERETUP6nNjR0WSgUHB6OqqqpbGBUWFoaHH34Y9957L4KDg4f1eDabDXv27MFbb72Fr776ChaLpVs49c9//hMPPvjgsB6TpEtqA4+IqDc2u4jyViMKGjrCqoKGVpxt0KOgsRUtAwhEBspJIUe0pwtivF0R4+WC6Z6umO7tAj+njlvdRasVbfv2Qf/Z57DV1vbajzohviOcCg0dttqkqt1kwanjpchKK8Tp7DJYzLZ+91Eo5ZgRF4p5yZGYOTeUARURERGNKqnNjR0WSslksq5QKCkpCc888wxuvvlmhyyaWlNTgzfeeAN///vf0dLSAkEQ8Nxzz+G3v/3tiB+bpEFqA4+IaLBEUUS1oR1nG1tx9orAqqBRj1pj+7Adx1urwnSvjqAqxssV0W5ahOVmQdz8OeyXr0C+hiBAszAZLnffDUVQ0LDVImWmNjNOHitFVnohzmSXwWrt/+o2pUqOmXGhmJsciZlzw6DWKB1QKREREdH3pDY3dmgoNX/+fLzyyitYunSpIw55jebmZrz66qt4/fXX8ctf/pKh1AQitYFHRDSc6tvMONvQivwrfvLqW3Cprf/FugcqzEWLaGsbIgvPYNqli5imb0BwWyu6/dOSTAbtkiVwvmsDFAEBw3ZsqWsztOPEsRJkpRUi78R52AYUUCkwa14o5iZ1XEGlUjOgIiIiopEntbmxw0Kpjz/+GHfffbcjDtWvqqoqFBcXc12pCURqA4+IyBHq2tqRX989qDrb0IqGASzcPRA6qxlRrQ2I0jdgWtfvRjgJIrTLl8Nlw3rIfXyG5VhjhdHQjhNHvw+o7Lb+AyqVWoGZc8MwLzkSM+JCGFARERHRiJHa3NjhT98jGg1SG3hERKNFFEXUGNuRV9+CM/WtXb/zG1rRZu1/jaT+CKKIEGMLolvrEWVswpypYVhw6w8QNMnfIbfsS4mh1YTcoyU4nl6I/JMXBhRQqTVKzJzbcQUVAyoiIiIablKbGzOUoglBagOPiEhqbHYRZS0GnKlvxZn6FuRd/l3UpId9GL4peMKO2QFemOXviVk+bpjp7YqpHs5QyGTX3/kYoG9tQ+6RjoDq7MkLsA/gf1QGVERERDTcpDY3llQo9Zvf/Abz58/H/PnzETCB1qKgkSe1gUdENFaYrDacbWjF6foWnLrUgtOXOn43mK5/vSqNXIbpXq6Y5e2KWT5umOPrhhlernBSKoahcunSt7Qh50gxjqcV4uzpCogMqIiIiMhBpDY3llQo1fmEPgDYsGEDPvroo1GuiMYLqQ08IqKxTBRFXDSYuoVUpy41o3AYrqqSCcA0DxfMuRxSzfZxx2wfN7ioxmdQ1dpsRE5mMY5nFKGAARURERGNMKnNjSUZSomiCEEQ8Nhjj+Gvf/3raJdF44DUBh4R0XjUdvmqqpN1zThxoQYnCstw2iqDQaG67r4j3XWY7eN+Oajq+PHUXH+/UtLSZETukcEHVDPiQjE3KQIz4kKh1jCgIiIiot5JbW4syVAKQFcw9cILL+DXv/71KFdGY53UBh4R0URhrqxC/mdbkHOmCHkunsh38UK+iyeqNc7X3XeoqxPm+LohztcdsT7umO07foKqzoAqK70Q585UDiigUqoUmBkXgrikSMycGwqNdnz8b0FERETDR2pzY0mGUleWJAgC/vGPf+Dhhx8ecD8XLlzAD37wA8TGxiI2Nha/+MUvRqJcGkOkNvCIiCYay/nz0H/8CUxpaQCABqUaZy+HVHmXf0p07rBf5xP6Ql2dEOvrjlhfN8RevrLKY4wHVS1Nxo41qAYVUMkRMycEc5MiMXNeKLROagdUSkRERFIntbmxJEMpAEhISEBGRgYAQC6X4/PPP8ftt98+oH7Ky8sRFhbW1ZfNdv2PuKaxTWoDj4hoorKUlKD1o4/QfvTYNZ8ZZQoUuHgif3I4CmJicVpQI6+hFdbrXKgqzNUJc3zdEefrhjg/D8T6usFVNTZvc+sKqNIKcS5vYAGVQilHzJzJiEuMwOz5U6DVMaAiIiKaqKQ2N5ZcKAV0XB2Vn5+PRx55BAcPHgQAaDQa7Ny5E4sXL+63n85QqrMvhlIktYFHRDTRmQsK0PrhRzDn5vbaRhkRDsXd96Jk8hScqGtBbl0TTtQ149SlFrTb7EM+tgBgqocz5vq5I87XA3P93DHT2xUahXzIfY6GliYjco+WIDu9EAWnK2AfQEAlV8gwffblgGrBFOicNQ6olIiIiKRCanNjyYZSpaWl8PDwwOLFi3Hy5EmIogg3NzccOHAAs2bN6rMfhlJ0NakNPCIi6tB++jRaP/g3LPn5vbZRTZ8Ol/t+CFVMDADAYrPjbEMrcuqakVPbhJzapusOqpQyATO8XRHn6465fh1BVZSHC+Sy67ud0FH0LW1di6SfPVUB+wD+t5DJZYieFYy4xAjMiZ8CZxetAyolIiKi0SS1ubGkQ6nJkyejuroaycnJKCsrgyiKCAgIQFpaGkJDQ3vth6EUXU1qA4+IiL4niiLas7PR+sG/YS0p6bWdOi4OLj+8F8qIiGs+s9jsyG9o7Qip6pqRU9OE0/XXF1TplHLM8XHHPD93zPP3wDw/dwQ5a7uWB5AqQ6up4wqqjCLknzwPm3UAAZVMwLSZQZibFIk5C6bAxc3JAZUSERGRo0ltbiz5UAoAioqKsHDhQtTV1UEURURERCAtLQ0+Pj499sNQiq4mtYFHRETXEu12mDIy0PrhR7BVVPTaTpOUCOd77oHy8veE3nQGVdm1Tci+4oqq61mjys9JjfmXr6Sa5++BOF93uKmluz6VQW/CyWOlOJ5RiPzc87AOIKASZAKmxkzC3KRIxMaHw9WdARUREdF4IbW58ZgIpQAgJycHKSkp0Ov1EEURcXFxSE1NhbPztY+UZihFV5PawCMiot6JNhvaUlOh//gT2Gpre24kk0GbkgLnu++Cws9vwH2brDacutSC4zVNyK5tRFZNEwob9Rjql6HO9anm+Xlgnr875vl5YIaXK5Ry2RB7HDlthnacyCpFdkYRzuSUw2rp//uRIACR0ychLjECsQnhcPe89nsXERERjR1SmxuPmVAKAPbt24dbbrkFZrMZALB06VLs2LEDSmX3f6FkKEVXk9rAIyKi/okWC4zffQf9p5/B3tTUcyOFAk4/+AGcN6yH3MNjSMdpMVuQU9uM7JqOkCq7tgkXWtuGXLdGLkOsrzsW+Htgvr8HFvh7INBZWus1mdrMOHW8DMfTC3E6uwwW88ACqinTAhCXGIG4xAh4ers4oFIiIiIaTlKbG4+pUAoANm/ejLvuugudZa9duxaffvpptzYMpehqUht4REQ0cHaTCcZvvoF+y1aIen3PjVQq6G69Fc5r7oDM5frDkhqjCdk1TciqaUJWTSOO1zShqd0y5P4mOWuwwN+zK6ia4+Mmmaf9mdrMOJNTjuPphTh1vAzmduuA9guL9ENsYgTiEiLg4+82wlUSERHRcJDa3HjMhVIA8L//+7/4j//4j66FRn/605/ib3/7W9fnDKXoalIbeERENHh2vR6G7dth2P4lRJOpxzaCTgfdHbdDd+utkGmH7+okURRR1GTA8ZpGHKtpwvGaRpysa4HZPrSF1JUyAbO83bqupFrg74EQV6dRX0Td3G7B6ZxyZKcX4WRWKdpNAwviJk/xQWxCBOYmRcAvcGhXrBEREdHIk9rceEyGUgDwwgsv4IUXXuhq/9vf/hbPPfccAIZSdC2pDTwiIho6W1MTDFu2wPDtDsDSc2gic3OD8/p1cFqxAoJyZBYib7fZcKqu5YqrqRpR2GQYcn9+Tmos8PdAQoAn4gM8R/1qKnO7FXknynE8vQgnj5XA1DawgCpwshfiEiMwNzECAcGeox60ERER0fekNjces6EUADz66KP4v//7v659/v73v+MnP/kJQym6htQGHhERXT9bXR1aP/0UbXv2Ar1csST38YHzXXdBu2wpBPnIBzwNJjOO1zThyMUGHKtpRFZ1I5rNA7sd7moqmQyxvm6ID/DsCqv8dZphrnhgLBYr8k9cQHZGEU4cLYHR0D6g/fwmeXSsQZUQjuAwHwZUREREo0xqc2PJhVKdX1YGEkqJooh169Zh69atAAC5XI5PP/0Uc+fOZShF3Uht4BER0fCxVlai9aOPYDp0uNc28kmT4HLvvdAkJUKQOe7JeHZRxLlGPY5VN+JIdSOOVTcgr751yE/7C3F1Qry/B+IDPJEQ4IkYLxcoHHg+AGC12FBwugLZGUXIPVoMfUvPt1JezdvPFbEJHQFVaKQ/ZDIGVERERI4mtbmx5EIpYOBXSgGA2WzGihUrkJqaCgBQq9X4+9//jgcffLCrL4ZSJLWBR0REw89SUoLWf3+I9qysXtsoI8Lhct+PoJoze9Su2mk1WzvWpqpuxLGaRhy52Ih6k3lIfemUcsz367iKKjHQE/P9PeCqGpnbFXtis9lRmFeJ7PQi5BwpRkuTcUD7uXvqOgKqxHBERAVCJndssEZERDRRSW1uLKlQKjU1Fbm5ucjJycGrr74KHx+fAe3X2tqKJUuWIDc3FwCgVCphtVohiiJDKQIgvYFHREQjx5yXj9YPPoD5zJle26hmzYLLj+6DaupUB1bWM1EUUdJswJGLjcisbsCRi0O/mkomADFerh0h1eWrqYJdtA4J4Ow2O4oLLiI7oxjZGYVoahjY+loublrExocjNiEC02ZMglwiTyUkIiIaj6Q2N5ZUKHU9ampqkJycjNLS0q4wiqEUdZLawCMiopEliiLMOTlo+eDfsBYX99pOk5gI5x/eC2VwsAOr619zuwVZl6+iOlLdgGPVjWgZ4tpUgToNEgI8kRDYEVTN9HYd8Vv+7HYRZYXVyM4oQnZmMeprWwa0n5OzGrPnT0FcYgSiZwdDqVSMaJ1EREQTjdTmxuMmlAKAkpISJCcno7a2FgAYSlEXqQ08IiJyDFEUYUpPR+u/P4StsrLnRjIZtMuWweXuuyAf4FXajmazi8hvaMWRy1dSHbnYiOLmoT3pr/OWv6RALyRdvuVPN4LhjyiKuFBSh+zMjoCqprJxQPtptErMnBeGuIQIxMSGQK1x3G2JRERE45XU5sbjKpQCgNzcXKSkpKClpeNf5BhKESC9gUdERI4l2mxo27sPrR9/DHt9fc+NlErobr4ZzuvWQjYG/q6oNbbjyMUGZF7+ya5tgsU++K91CpmAOT5uXSFVYoAXvLSqEai4I6C6eKEB2ZlFyMkoRkX5pQHtp1QpMCMuBHEJEZg5LxRaJ/WI1EdERDTeSW1uPO5CKQA4cuQI/vWvf+HYsWM4c+YMLBbLaJdEo0xqA4+IiEaH2N4Ow7c7oN+8GWJra49tBK0WujvugG71bZBptQ6ucOhMVhuya5u6QqrMi41oGOIC6lGeLkgM8ERyoCeSAr0w2dVpmKvtUFPVhJzMIuRkFqOsqGZA+ygUMkTPnoy4xAjMnj8FOhfNiNRGREQ0HkltbjwuQ6krmUwmaDT8sjLRSW3gERHR6LIbDDBs+wKG7dshtrf32Ebm5gbnDevhdNNNEJRj79YxURRxrlGPzIsNOFLdiIyqBhQ26YfUV5CzFkmBnkie5IXkQC9M83Ae9sXTG+paO66gyixG8dkqDOQbqkwuw7QZkxCXEIE58eFwdR+Z8IyIiGi8kNrceNyHUkSA9AYeERFJg62xEfrPPodx1y7A2vNC4nI/P7jcew80ixdDGOEFwkdaXVs7MqsakF5Vj/SqBuTWNcM2hK+C3loVkgO9kDzJCwsDvRDj5Qq5bPhCquYGA3KPFiM7sxjnTlfAPoDbEgUBiIgORFxiBGLjw+Hh7TJs9RAREY0XUpsbM5SiCUFqA4+IiKTFWl2N1g8/gungQfR2iY4iNBQuP7oP6rlzh/0qodGiN1txrKaxK6Q6Vt0Io3Xwa3G6qRRIDPRCcqAnFk7yxhwfNyjlwxPg6VvakHu0BDmZRcg/eQE2q31A+4VF+iE2MQJxCRHw8XcbllqIiIjGOqnNjRlK0YQgtYFHRETSZCktResH/0Z7VlavbVQxMXC5/0dQRUU5sDLHsNjsyK1r7gqpMi7Wo8E0+LU5nRRyxAd4dF1NNd/PAxqF/LrrMxracTKrFDkZRTiTWw6LeWABWnCYN2ITIhCXGIGAIM/rroOIiGisktrc2GGh1D333INXXnkFkydPdsTh+vTee+/BYrHgoYceGu1SyEGkNvCIiEjazGfOoOW992E5e7bXNur4eLjc90MoJfDdZqTYRREFjXqkV9UjrbIehyvrUWUwDboftVyG+f4eWBjohUVB3ljg7wHtdYZUpjYzzuSUIzujCKeOl6F9gOGZ/ySPy1dQhSM4zGfcXPVGREQ0EFKbGzsslJLJZFCr1XjsscfwX//1XwgICHDEYbv54osv8MILL+DkyZN47rnn8Nvf/tbhNdDokNrAIyIi6RNFEe3HjqH1/Q9gPX++50YyGbRLl8Llnrsh9/FxbIGjQBRFlLcYkVZVj7SqBhyuvISSZuOg+1HJZJjr545FQd5YFOiFBQEe0CkVQ67L3G5F3oly5GQU48SxErQZB/bUQW8/144rqBLCERrpD9kwrotFREQkRVKbGzs0lOr8lyiVSoX7778fjz32GGbNmjWixzUajfjoo4/wl7/8Bfn5+RBFEYIgMJSaYKQ28IiIaOwQbTa0pR6A/qOPYKur67mRUgndLbfAee2dkE2wv2eq9G1Iq2roCKoq65Hf0DroPpQyAXP93LEw0BuLgrwQ7+8JZ9XQQiqrxYazpy4gJ7MYuUeLoW8Z2JVd7p46zIkPR1xiBCKjAyEbpjWxiIiIpERqc2OHhVIPPPAA3n//fXQerjOgio+Px3333Yc1a9bAz89vWI5lt9uxf/9+fP755/j000/R0tICAF3Hnjx5Mj7++GMkJiYOy/FI+qQ28IiIaOwRLRYYv92B1s8+g9jac/AiODlBt+YO6G67DTKNxsEVSsOltnakXw6pDlfW49SlZgzg4XndKGQC4nzdsWiSFxYHeSMhwHNIV1LZbHYU5VchO6MIuUeK0dRgGNB+Lq5azF4wBbEJ4YiaGQyF8vrXwyIiIpICqc2NHbrQeVpaGv7jP/4DJ0+ehCAIXVctAR1XUs2dOxdLly7FokWLMGfOHAQGBg6oX5PJhNOnT+Po0aPYv38/9u/fj8bGRgDoOoYoilCpVPj5z3+O3/72t3Bychqx8yTpkdrAIyKisctuNMKwbRsM27+EaOr5KhyZhwec774LTjfcAEEx9NvSxoOmdgsyLgdUhyvrkVPXNOiQSikTMM/PA4uCvLF4khfiAzwHvSaV3S6itLAaOZnFyMkswqWalgHtp3VSYdb8MMTGRyAmdjJUauXgiiciIpIQqc2NHf70PVEU8eGHH+K5555DaWlpRxFXBVSd3N3dERISgqCgIHh4eECr1UKhUKCtrQ0GgwEXL15ERUUFzp8/D7vd3u0YV/Yrk8lw77334ne/+x1CQkIcd7IkGVIbeERENPbZGpug/+wzGHftAqzWHtvIJwXC5b77oElM5ILal7WYLcisasDhynocqqxHdm0TbIP8OqqWy7DA3wOLg7yxeJI35vt7QDWI2+1EUcSF0jpkZxYjJ6MI1ZWNA9pPpVZgRmwIYhMjMHNuKLRO6kHVTURENNqkNjd2eCjVyWq14uOPP8Zrr72GEydOdBRz+cva1SX19SWup7ad72m1Wtx///148sknERERMZzl0xgjtYFHRETjh7W6Gq0ffgjTgYO9tlFOnQqXjfdDPWOGAysbG1rNVhy52BFSHa66hKyaJlgHeSmVViFHYoBnR0gV5IU4X3coZAMPqS5WNCA7owg5mUW4UHppQPsoFDJEz56M2IRwzJ4/Bc6u2kHVTERENBqkNjcetVDqSpmZmXj33XexefPmrtvugL7DqKtdeRrx8fH40Y9+hLvuugseHh7DWiuNTVIbeERENP5YSkrQ+v4HaM/O7rWNet48uPzoPihDQx1X2BhjsFhx9GIjDlZewqHKoYVUzko5kgO9kBLsgyVB3pjh7QrZAL9X1lU3d9zid6QIJQXVA9pHJhMQGTMJsQnhiI0Ph7un86DqJSIichSpzY0lEUp1stvtSE9Px86dO5GZmYnjx4+jubm5z30EQcC0adMwf/58LFmyBDfffDP8/f0dVDGNFVIbeERENH61nziJ1vfeg6WoqOcGggDt0qVwufceyH18HFvcGKQ3W5FxsQEHKy7hYMWlIa1J5alRYXGQF1KCOkKqCHfdgP7xs7Fej9yjxcjJKMa5vEqIAzzwlGn+iEuIQGxCOLz93AZXLBER0QiS2txYUqFUT2pqalBWVoba2loYjUZYrVZotVq4uroiODgYoaGhUKt5Pz/1TWoDj4iIxjdRFGFKS0Pr+x/AVt3L1TZKJXS33ALntXdCxr+bBqy53YK0qvqukOrUpRYM9svsJGcNlgR5d4RUwd6Y5Nz/rXetzUacOFaKnMwi5J+8AJvV3u8+ABAc5oPYhHDEJUYgIMhzkJUSERENL6nNjSUfShENB6kNPCIimhhEqxXG776D/uNPYO/l6m9Bp4PznWugu/VWCPyHtkGrbzPjcOUlHKzsCKryG1oH3Uekuw5LLt/qt3iSN7y0qj7btxnacTKrFDlHinE6uxwWc88L3V/Nf5IHYhMjEBcfjuApPlz8noiIHE5qc2OGUjQhSG3gERHRxGJva4Nh+3YYtm2D2GbqsY3Mywsu994D7dKlEORyB1c4ftQYTThUUY/Uiks4WFGHkmbjoPYXAMzyccPSYG8sDfZBYoAnnJSKXtub2y04nVOOnIxinDxeCpPRPKDjePm6Ija+4wqqsKn+kMkYUBER0ciT2tyYoRRNCFIbeERENDHZmpqg//QzGHfuBGy2HtsoQkLgcv+PoJ47l1fSDIPzLUYcqLiE1Io6HKi4hGpD+6D2V8lkiA/wwNJgHywN9kGsr1uvT/azWKwoOFWB7Iwi5B4tgaG15wDyam4eOsxZMAWxiRGYGjMJcvnAnxxIREQ0GFKbGzOUoglBagOPiIgmNuvFi2j994cwHTrUaxvVzJlw2Xg/VJGRDqxsfBNFEQWN+o6Q6kIdDlXWo6ndMqg+3FQKLJrkjZRgHywN9sZUD+cew0ObzY6ivEpkZxYj90gxmhoMA+pf56zB7AVTEJcQjqjZwVD2cZUWERHRYEltbsxQiiYEqQ08IiIiALAUFaFl03swnzzZaxvNokVwue+HUPDpwsPOZhdx8lJzV0iVXtUAo7XnK9h6E6jTIOXyrX4pQT4IcNZc08ZuF1FWWI3szGLkZBbhUk3LgPrWOKkwa24YYhPCERMbArVGOajaiIiIria1uTFDKZoQpDbwiIiIOomiiPbsHLS+9x6sZWU9N1Io4LRyJVw2rOeT+kaQ2WbHsepG7L9Qh9SKOhyrboJtkF+VozxdsCzYB8sn+2DhJC/orrrSSRRFVJRdQs7lgKrqQsOA+lWqFJgRF4K4hAjMnBcKrRMXxSciosGT2tyYoRRNCFIbeERERFcTbTa0pR5A64cfwn7pUo9tBCcnON95J3S38Ul9jtBituBwZT32X6jD/guXcHaQT/ZTygTEB3hiWbAPlgX7INbXHfKrFjSvrmxETmYRsjOLcb64dkD9KhQyRM2ajLjEcMxeMAXOLtpB1UVERBOX1ObGDKVoQpDawCMiIuqN2N4Ow9ffQL95M0RDz+sQyby84HLPPdAu45P6HOmi3oQDFR0B1f4LdagyDGwh804eaiWWBHt3hVShbrpun1+qbUHukWJkZxShpOAiBvItXSYTMHVGEGLjwxEbHw43T13/OxER0YQltbkxQymaEKQ28IiIiPpjb2mB/vPNMHzzDWC19tiGT+obPaIo4lyjHvsvdKxHdbDyElrMPf//1Jspbk5YGuyD5ZN9sTjIG+7q79eMam4wIOdIMbIzi1B4phJ2e/9f2QUBmDItAHGJEYiND4eXL7/zEBFRd1KbGzOUoglBagOPiIhooKw1NR1P6jtwoNc2qlmz4LrxfigjIhxYGV3Jarcju7YJ+87XYe/5OhyraYR1AEFSJ5kAzPPzwPLJPrhhsi/m+rlDIZMBAPQtbThxrATZGcXIP3keNqt9QH2GhPt2BFQJEfALdB/KaRER0TgjtbnxmAyl9Ho9XnvtNfzqV7+CSqXqet9sNuOVV17Bk08+CWdn51GskKRGagOPiIhosCzFxWjZtAnmE308qW/JYrj88IdQ+Pk5sDLqSavZikOVl7DvfB32XajDuUb9oPZ3VyuREuyNGyb74obJvgi6vG5Um6EdJ7NKkXOkGKezy2EZ4NVZgZO9EJcQjrjECARO9uKVdUREE5TU5sZjMpTaunUr1q1bhz//+c/4+c9/3vX+G2+8gSeffBKff/451qxZM3oFkuRIbeARERENhSiKMOfkoGVT30/q0926Cs7r1kHGf6STjIrWNuy7UId95+uw/0Id6k3mQe0/zcMZN4R0BFQLJ3lBq5Cj3WTBmZxyZGcW4VRWKUxtlgH15RvgjrjEcMQmRCAk3JcBFRHRBCK1ufGYDKUAYNmyZTh9+jRKSkrg7OwMvV6P8PBwzJgxA3v37h3t8khipDbwiIiIrsf3T+r7N+yX6ntsIzg7w3ndOuhW3QJBqeyxDY0Ouyji1KUW7Dtfi30X6pBe1YB228BuyQMAtVyG5EAv3DDZB8tDfDHd0wVWiw35Jy8gO6MIJ46VwKhvH1BfXj4umJMQjriECEyZFgCZjAEVEdF4JrW58ZgNpU6fPo24uDg8++yzeO655/DCCy/g5ZdfRk5ODqZPnz7a5ZHESG3gERERDYeOJ/V9Df3nmyEajT22kfv6wuW+H0KzaBGEy2sUkbS0WW1Ir6rHnvJa7Dlfh/yG1kHtH6jTdKxFFeKLpcE+cFPIce5MJbIzi5F7pBgtTT3/t3E1V3enjqf4JUZgaswkyOX874WIaLyR2tx4zIZSAPDEE0/gnXfeQWZmJhISEvDggw/itddeG+2ySIKkNvCIiIiGk72lBa2ffgbjjh29PqlPGREOl40boZ41y8HV0WBV6tuw93wd9pTXYv+FOjS2D+y2PKBjwfT5fh64McQXN4b4YraXK0rPVSM7oxg5R4rQeGlga1vpXDSYs2AK4hIjEDUzGAqlfKinQ0REEiK1ufGYCqXOnz/fbbupqQmLFi2CWq2G2WzGoUOH4Obm1q3N5MmTHVkiSZTUBh4REdFIsF68iNYPPoDpcFqvbdTz5sLl/vuhDAlxYGU0VDa7iOzaJuw5X4u952txrLoJtkF8fffSqLB8sg9uDPHFsmAfGKuaOgKqzCLUVTcPqA+tkwqz5ochLiEC0+eEQKVWDPV0iIholEltbjymQimZTNbjQoyiKPa6QKPNZhvpsmgMkNrAIyIiGknmggK0vrsJ5ry8nhvIZNDecANc7r0Hcg8PxxZH16Wp3YLUC3XYc74Oe8/X4kJr26D2j/V1u/xEPx8Etdtx4mgJcjKKUHWhYUD7qzVKzIgLQVxiBGbEhUKjVfW/ExERSYbU5sZjKpR6/vnnrwmfXnvtNbS2tsLV1RVPPPHENfs899xzjiqPJExqA4+IiGikiaKI9qNH0fLe+7BVVPTYRtBooFtzB3S33w6ZRuPgCul6iaKIc436roDqYMUlmAaxYLqbSoGlk31w42RfzFGpUHmiAjmZRThfUjeg/ZUqOabPCUFcQjhmzZ8CJ516qKdCREQOIrW58ZgKpa722Wef4e6778bLL7+MZ555Bp9++inWrVs32mWRBElt4BERETmKaLOhbfcetH70EexNTT22kXl6wuWH90K7dCkEOdcOGqs6F0z/rrwWu8trca5xYOtHdYrxcsFNIX5IdHaCUFqPE0eKUVJQPaB95QoZomYGIy4xAnMWTIGzq3Yop0BERCNManPjMRtKGY1GREVFYfbs2fjqq69w66234uTJkzh79iy0Wv4lSN1JbeARERE5mr2tDYZtX8CwbRvE9vYe2yhCQ+H6wANQx85xbHE0IspbjNhzvha7y2qRWlEHvWXgy1q4qhRYGuyDFE9X+FxsRXFOOQrzqiDa+586yGQCps4IQlxCOObEh8PNQ3c9p0FERMNIanPjMRtK/frXv8Yrr7yCnJwczJw5E6dOnUJsbCyeeeYZvPjii6NdHkmM1AYeERHRaLHV16P1o4/Qtmcv0MvXQHVcHFwe2MjF0McRs82OzIsN2FNei93na3HqUsug9p/l7YrlPh4Ib2hDU/5FFJyuhH0AtwoKAhAeHYi4hAjEJoTD09tlqKdARETDQGpz4zEZShUXF2PGjBm488478e9//7vr/fvuuw9btmzB6dOnMWXKlFGskKRGagOPiIhotFlKy9Cy6V2Yc3J7btC5GPo9d0Pu6enQ2mjkXdSbOq6iKq/Fvgt1aGq3DHhfd7USy/08MFtvBUouofh0JawDvAorLNIPcYmRiEsMh7efW/87EBHRsJLa3HhMhlKHDx/Gxo0bsXv3boSFhXW9X1ZWhhtuuAGbNm3CwoULR7FCkhqpDTwiIiKpaM/ORsu7m2AtL+/xcy6GPv5Z7XYcq27Ed+W1+K68Fifqmge1/zwPFyRaANeKZlTlVcHcbh3QfsFhPohLjEBcYgT8J/EpkP9/e/cdH1WV/3/8PZPeCSGEJqEXAekiXRTBLliX1RVUwL6rrro/dV3Xtq7rrhXXLrCKCCIgFiy4YEUXaRY6CcFAep9Jm3J/f6D5EjIhbTJzJ/N6Ph48vt8759w7H1wON+fNuecCgC+YbW4ckKGUJLndblmt1kZ/juBmtoEHAICZGC6XKj79r8qWLJG7qMhjH2v7RMVdfoWiTmMz9LYu216pTzJy9VFGjv57ME+l1Y0LmSSpY3ioTjdC1SXHrqI92aqqaNwKrC4ntP8loOqrLt3b13njNgDAO8w2Nw7YUApoCrMNPAAAzKhRm6H37Kn4q69SxNChPq4O/uBwufVtdpE+PpCjjzNy9WNB4/eiCnMbmqxQ9S2qVNW+PFWVVzfqvJSuiRoxto9Gju2jbj06EFABgBeZbW5MKIWgYLaBBwCAmTVqM/RRo45shn7CCT6uDv50yFZxZBXVgRyt/7nxb/Szug0NrnJrWJlTIQcKVW33HHoeK7lTQs0jfqm9OxJQAUALmW1uTCiFoGC2gQcAQCBozGbo0WdOV+ysWQpJYNPqYFPtcmtjVqE+PpCjjzJytauwrFHnWdyGutkcOtnuVFxmiRy2xgVUSclxNQFVj76dZLUSUAFAU5ltbkwohaBgtoEHAEAgqdy8RWULF8p58KDHdkt0tGIvuUQx550rS3i4j6uDWRwoseujX1ZRfZaZryqXu+GTDEPJJVUaVuZQp2yb3I0MqBKTYjX8lD4aOa6PevXvTEAFAI1ktrmxz0Ipq9Uqq9Uqp7PxGyUC3mK2gQcAQKAxXC5VfLLuyGboJZ7fzhbSsaPirvydIidO5DGrIFfucOqzzHx9eCBHHx3IVaatouGTDENJpdXqV1SpnvnlspQ1LqBKSIzR8FN6a8TYPuo7sIusIbz0CADqY7a5sU9DKYvFIpercc+dA95ktoEHAECgcpeXy75ypWyr35GqPW9cHdavn+KvuVrhAwf6uDqYkWEY+qmgTB8dyNGHB3L0bXah3A3NQAxD7W3VSs0rV9/CSoU1MqCKS4jS8DG9NWJcX/Ub1FUhBFQAUIvZ5samD6Xsdrt++OEH2e12OZ1OpaSkqFevXqb4j4fAYbaBBwBAoHPl5anstddVsWFDvX0ix49X3OwrFdqpk+8Kg+kVVFTr04O5+vBAjtYdzFVhpeP4JxiG2tkd6p5rV5+CCkXZGvcWv7j4KA0b01sjx/VRv8HdCKgAQOabG5sylHI6nXr99de1YMECbd++XW533efRu3TpotNOO03Tpk3TzJkzFR0d3Rplo40w28ADAKCtqN67V2WvLlT1Tz957hAaqphzz1XspZfIGhvr2+Jgei63of9lF+qjA7laeyBbPxU0sFm6YSih3KHuueXqmV+uuEYGVDFxkRr+S0DVf3A3hYSGeKF6AAg8Zpsbmy6UOnDggC666CJt27ZN0pHlvvX5da+CuLg4zZ49W3feeae6du3qtZrRdpht4AEA0JYYhqGqb79V6cJFcmVleexjiYtT3G9nKXr6dFlCQ31cIQJFRmm5PjyQo7Xp2fo8s0DVHv5x+mjx9mqdkFeu1LxyJTY2oIqN1LAxvTRibB8NPOkEAioAQcVsc2NThVL5+fkaOnSosrOzZRhGrQ0yjy7T0+cWi0UxMTH6y1/+ottuu01WK8tz8X/MNvAAAGiLDIdD5Ws/VNmbb8qw2Tz2CenWTfFXXaWIUSPZDB3HZat26r8/59WEVHkVxw+dYssd6p5nV/fcciU1MqCKjo3Q0NG9NHJcXw086QSFhhFQAWjbzDY3NlUo9Zvf/EbLly+v+QHl19IGDRqkAQMGKCIiQhUVFdq/f7/27t2rioojb/E4ur/FYtG0adO0fPlyxcXFtfLvCoHCbAMPAIC2zG2zybZsuezvvy/V8+bl8GHDFH/1VQrr0cO3xSEguQ1Dm3OKtfaXgOqH/NLj9o+tOPKIX/c8u5LKGhlQxURo6Mm9NHJsHw0c2p2ACkCbZLa5sWlCqby8PHXt2lUul6smjLrooov0yCOPqE+fPnX6OxwObdy4Ue+++65ee+015ebmymKx1ARTQ4YM0eeff26K/8jwP7MNPAAAgoEzK0tlixarcuNGzx2sVkVNnaq4y3+rkMRE3xaHgJZZVqG1B7L1YXqONmTmq8pV/2N+MRUOdc8rV/dcuzo0MqCKig4/skk6ARWANsZsc2PThFIrVqzQpZdeWrPq6ZprrtGLL77YqGs7HA49++yzevDBB1VcXFwTTE2dOlVr167lUT6YbuABABBMqn78SWWvviLHvv0e2y1RkYq9+BLFnH+eLBERPq4Ogc7ucGrDz/n6ID1baw/kKLe8qt6+MZVOnZBrV/e8ciWX1t/vaKygAtCWmG1ubJpQ6qmnntKtt94qSYqKilJ2dnaTH787ePCgLrzwQm3ZskXSkcf6/vGPf+iPf/xjy4pHwDPbwAMAINgYbrcqPvtMZf95Te6CAo99QpKTFXfllYqcNJH9ptAsbsPQdzlF+iAtR++nZ2tnYf1v84uudNbsQdXkgIo9qAAEKLPNjRsdSv3nP/+p89mVV17Z6C9qKJR6+OGHde+998pisWjKlClat25do699tNLSUk2cOFE//vijDMNQQkKC9u/fr/bt2zfremgbzDbwAAAIVu7KStlXr5b97ZUyqjwHAWH9+in+mqsVPnCgj6tDW5NWYtfa9Gy9n56jrw4VyFXP1Ceq0nnkEb88uzqWEFABaLvMNjdudCj1a6h0tONtWl7f+fWd889//lN33nmnLBaLZs2apddff73R1z7W7t27ddJJJ8n5y8aaCxYs0PXXX9/s6yHwmW3gAQAQ7FwFBSp7/XVV/He9VM+Po5ETxitu9myFpqT4uDq0RUWV1fo4I1fvp2Xrk4xclTk8b8JPQAWgLTPb3LhZodSvezZ5M5RauHChrrnmGlksFk2fPl0ffPBBo6/tyZw5c/Sf//xHFotFZ5xxhj788MMWXQ+BzWwDDwAAHOHYv1+lr76q6h9+9NwhLEwxMy5Q7EUXyRod7dvi0GZVu9z68lC+3k/P0ftp2cq0VXjs92tAlZprb/IjfqPGHwmoQkIJqACYh9nmxk0KpWqd6OVQasOGDTrttNMkSSkpKcrKymr0tT1Zs2aNZsyYIYvFou7duys9Pb1F10NgM9vAAwAA/8cwDFV9+z+VLlwoVz0/A1oTExX3uysUddppsvASG3iRYRj6Ib9U76dn6720bG3PK/HYL+qXPahSm7IHVWyEho/prVHj+6r/4G4EVAD8zmxz40aHUosXL67z2ezZsxv9RQ2FUna7XR07dlRFRYUsFoveffddnX322Y2+/rF++uknDRkyRJIUGRmp8vLyZl8Lgc9sAw8AANRlOBwq/2Ctyt58U4bd7rFPaO/eSph7jcIHDfJxdQgWP5eV6/20HL2XlqUv6tmHKrrSqROaGFDFxEVqxCl9NHJ8X/Ub1FUhIYSrAHzPbHNj07x9T5JuueUWPf3007JYLOrXr5+2bNmiqKioZn3f0aFUx44dlZ2d3azroG0w28ADAAD1c5eWqmzZMpW//4HkdnvsEzn+l/2mOrHfFFrPr/tQvZuWpU8ycmV31J3LNCegiouP0vCxfTRqfF/1HdhFVgIqAD5itrmxqUKp4uJi9evXTwW/vCb47LPP1ttvv63w8PAmf9/KlSt18cUXy2KxaMSIEdq0aVOza0fgM9vAAwAADXP8/LPKXl2oqs2bPXcIC1PMBRco9mL2m0Lrq3S69Flmvt5Ny9YH6dnKLa8bQEX/8ohf9yYEVPHtojVibB+NHNdXfQZ2kdVqafgkAGgms82NTRVKSdLbb7+tSy65pGZT9VGjRmnp0qXq1atXk77vnHPO0dq1a2WxWHT77bfr0UcfbXbtCHxmG3gAAKDxKjdvVtmrr8r5c6bHdvabgq+5DUObsov0Xlq23kvL0t7iuo+bxlQ6dUKuXam5dnUoq27UdRMSYzRy3JGAqlf/zgRUALzObHNj04VSknTzzTfr2WeflcVikWEYCg8P1/XXX68bbrhBffv2bfD8v/3tb/rzn/8si8Uiq9Wq3bt3NznUQttitoEHAACaxnA6Vf7hRypbulRGWZnHPqG9eil+7lxFDGa/KfjW7sKyXwKqbG3KKarTHlPhUGpuubrn2ZXUyIAqMSlWI8b10ejx/dSjb0rNP9oDQEuYbW5sylDK7Xbr8ssv17Jly2qCqV//Eh49erROO+00jR07Vv3791fnzp0VEhKirKwsbdq0Sc8//7y++OIL/frbeuCBB/TnP/+5VX9vMD+zDTwAANA87rIylb25TOUffCDV83Nl5Lhxipszh/2m4BdZtkq9l56ld/dn6/ND+XK6a0+3YssdSv3lEb/2tsYFVEkd4zVyXF+NntBXJ/RMJqAC0GxmmxubMpSSjrya9f7779fDDz8s9y8bXB4dTjV0bvv27fXII49o3rx5LaobbYPZBh4AAGgZZ2amSl9dqKrvvvPcgf2mYAJFldX68ECO1uzP0rqDeapw1p4LxZU7lJprV/dcuxLtjkZds2Pndho1vq9GT+inLt2TWqNsAG2Y2ebGpg2lfvXtt9/qjjvu0JdffilJNaHU8cq2WCw69dRTNXnyZI0YMUIjRoxQly5dml88Ap7ZBh4AAPCOqi1bVPrKK/XvN9U+UXG/u1JRU05lvyn4VbnDqXUH8/Tu/iytPZCj4qraIVS8vVrdc8uVmmtXu/LGBVRdTmivUeP7adSEvkrpktgaZQNoY8w2NzZ9KPWrzz//XK+++qpWrVqlsqP2EWjs0tWOHTtqxIgRGjlyZE1Q1b1792bVgsBjtoEHAAC8x3C5VP7hhyp7o/79psL69lX83GsUPnCgj6sD6nK43PryUIHeScvSe2lZyrbXflNfgq1aqb9skh5f4WzUNU/omaxR4/tq1Pi+6pCS0BplA2gDzDY3DphQ6lcul0ubNm3S559/rk2bNmnLli1KT0+v1efooOro396xAVb79u1rgqq//e1vLaoL5ma2gQcAALzPbbOpbOmbx99vavIkxV95pUKSk31cHeCZ2zD0XU6R1uw/sg/V/pKj3uRnGEqsCajKFVvZuICqR98UjZ7QTyPH9lFih7hWqhxAIDLb3DjgQilPiouLtWXLFm3evFmbN2/Wli1btH///noDqWN/y61VF8zDbAMPAAC0HmdmpkpfeVVVmzd77hAertiLLlLshTNliYjwbXHAcRiGoR2FZVqzP0tr9mfph/zSoxuVVFat1By7UvPsiq5q3Pylz8AuGjWhr0aO7av4duyvBgQ7s82N20Qo5Ulpaam2bNlSE1Zt2bJFe/bsqRNU/bp5OqFU22a2gQcAAFpf5ebNKn35FbkOHfLYbu3QQfFzZity4kTeZgZTSiuxa83+LL2zL0ubcor+r8EwlFxSdWST9Dy7oqrdDV7LYrVowJBuGj2hn4aN6a2Y2MhWrByAWZltbtxmQylPbDabtm7dWmtV1e7du2UYBqFUG2e2gQcAAHzDcDpV/sFalS1dKsNu99gnbODAI/tN9e3r4+qAxsssq9C7aVl6Z3+Wvj5cIPcvsziLYahjceUvb/ErV4Sz4YAqJNSqwcNTNWpCP500qqcio8JbuXoAZmG2uXFQhVKelJeXa9u2bRo3bpy/S0ErMtvAAwAAvuUuLVXZkjdU/tFHktvDpN1iUdRppynuyt8pJJG3mMHccsur9N4vAdVnmfly/pJQWdyGOhVVKDW3XCfk2xXubHiqFxYeqpNG9dTJE/tp0PBUhYWHtnb5APzIbHNjn4VSgD+ZbeABAAD/cBw4oNKXX1H19997bLdERSr2kksUc8EFsoSF+bg6oOmKKqu1Nj1H7+zP0rqDuapyHQldrW5DnQsrlJprV7f8coW5Gp72RUaHa/iY3ho9oZ8GDOmmkNCQ1i4fgI+ZbW5MKIWgYLaBBwAA/McwDFV9+61KX10oV3a2xz4hnTop/uqrFTHmZPabQsAoq3bqowNHAqqPM3Jkdxx5SiXE5VbXggql5tjVtbBcIQ0/4afY+EiNGNtXoyf0VZ+BXWW1Mg6AtsBsc2NCKQQFsw08AADgf4bDIfuad2VbvkxGRaXHPuHDhil+7jUK697dx9UBLVPhdOnTg7lavS9LH6Rnq7TaKUkKc7rVLa9cPXLt6lRUIWsjZoPt2sdo5Pi+Gj2hn3r0SSGoBQKY2ebGhFIICmYbeAAAwDxcRUUqe+11VXz6qeTpR2OrVdHnnK24WbNkjY31fYFAC1W5XPrvwTyt3pel99KyVPJLQBVR7dIJeeXqkWtTx+IqNSZqSu6UoJMn9tfoif3UuVv71i0cgNeZbW5MKIWgYLaBBwAAzMexb59KXnpZjp07PbZb4uIUd/nlip4+TZYQ9tpBYKp2ubXh5zyt2ndY76Vlq6jKIUmKqnKqe65dPXLt6lBa3ahrndCzg0ZP6K/RE/qpfXJca5YNwEvMNjcmlEJQMNvAAwAA5mQYhio//0KlixbJXVDgsU9ojx6KnzdXEUOG+Lg6wLscLrc+y8zX6n2HtSYtW4WVR8Ko2AqHUnPtSs2xK9HuaNS1+gzsopMn9tOIsX0UlxDdmmUDaAGzzY0JpRAUzDbwAACAubkrK2V/+23ZVq2Wqj2vGokcN05xV81RaEqKb4sDWoHD5daXhwq0ct9hrdmfpYJfAqp4e7V65NiVmmtXfIWzwetYrRadOKy7Rk/op2FjeisyKry1SwfQBGabGxNKISiYbeABAIDA4MzJUdnCRar8+mvPHcLCFDtzpmIuvkjWyEjfFge0Eqf7SEC1en+W1uzPUm55lWQYal/2fwFVdLWrweuEhYfopFE9dfLE/ho0IlVhYaE+qB7A8ZhtbkwohaBgtoEHAAACS9X336v0pZflzMjw2G5NSlL8nNmKnDSJN5OhTXG5DX11uECr9x3W6l8CKothqGNxpXrk2HVCXrkinO4GrxMVHa4RY/to9IR+6j+4m6whVh9UD+BYZpsbE0ohKJht4AEAgMBjuFwq//hjlb2+REZZmcc+YQMGKOHa+Qrr3dvH1QGtz+U29OXhAq3ce0jv7M9SfkW1rG5DnQsr1CPHrm755Qp1Nzy9jG8XrVHj+2nMpP5K7dORIBfwIbPNjQmlEBTMNvAAAEDgcpeVqWzpUpV/sFZye1ghYrEo6owzFPe7KxSSkOD7AgEfcLrd+iKzQG//sgdVYWW1Qp1udSsoV48cuzoXVsjaiJlmx87tdPKk/jp5Yn+ldGnX6nUDwc5sc2NCKQQFsw08AAAQ+BwHD6r0pZdVvX27x3ZLTIziZs1S9NlnyRLKXjpouxwutz4/lK+Ve48EVEVVDoU7XOqeW64euTalFFc16jo9+qTo5En9NWp8XyUkxrRy1UBwMtvcmFAKQcFsAw8AALQNhmGo6tv/qfTVV+XKzvbYJ/SEExQ/f54ihg71cXWA71W73Nrwc55W7jusd/dnqaTaqahKp1Jz7eqRY1eSzfPbLI9msVo0YEg3jZk0QMPG9FJUdIQPKgeCg9nmxoRSCApmG3gAAKBtMaqrZX9njWzLl8uo8rwqJHLsWMVdfZVCU1J8XB3gH9Uut/57ME8r9x3Se2nZKq12Kt5+5A1+PXLtiqtwNniNmjf4TeqvwcN7KDQsxAeVA22X2ebGhFLwix49eiijnrfXHOuJJ57QLbfc0qLvM9vAAwAAbZMrP1+lixer8rPPPXcID1fszBmKvfhiWSJY/YHgUeVyaV1Gnt7ee0jvp2fLXu1UUmm1euTYlJprV5Sj4Tf4RcdGaOTYvjp5Uj/1GdhVVisbpANNZba5MaEU/IJQCgAAtGXVO3ao5MWX5ExL89hu7dBB8Vdfpcjx43nzGIJOucOpjzJytWLPIX14IEfVDpc6FVWo5y9v8AtzNTxFTewQq9ET+mvMpP7q1qODD6oG2gazzY0JpeAXv4ZSo0aN0sKFC4/bt3PnzkpKSmrR95lt4AEAgLbPcLlU8ck6lb72moyyMo99wgcPVvy8eQrr2cO3xQEmUVrt0Adp2Vqx97DWHcyV4XCpW/6RN/h1aeQb/LqmJmnMpAE6eWI/JXaIa/2igQBmtrkxoRT84tdQavLkydqwYUOrf5/ZBh4AAAgebptNZUuXqvz9DyS3h0eUrFZFnzldcb/9raz8nIIgVlhZrTX7s7RizyF9fihfYVUudc87skF6x5KG3+BnsUj9Bh/ZIH3E2N5skA54YLa5MaEU/IJQCgAABBtHRoZKX3pZ1d9/77HdEhenuCsuV/S0abKEsJkzgluOvVKr9mXp7b2HtDGrUDEVDvX45Q1+7eyOBs8PCw/R0NG9NGbyAA0a1l0hoYwpQDLf3JhQqo1IT0/Xtm3bdPjwYdlsNnXu3FmpqakaN26cwsLC/F1eHYRSAAAgGBmGocqN36js1Vflys312Ce0Vy8lXDtf4QMH+rg6wJx+LivXyr2HtWLvIW3NKVY7u0M9cmzqkWNXTJWrwfNj4yM1anw/nTJ5gHr0TWEfNwQ1s82NCaVaQVpamjZt2qTvvvtOmzZt0pYtW1R21D4CqampOnDggFe+a8WKFXr88ce1ceNGj+3t27fXZZddpgceeEAdOphnA0BCKQAAEMyMqirZVq2WbcUKqbraY5+oKVMUN2e2QhITfVwdYF77im16e+9hvbXnkHYVlKpjcaV65tjVPdeu8EZskN6xc4JOnjRAYyb1V8fO7Vq/YMBkzDY3JpTykg0bNuiRRx7Rd999p8LCwuP29UYoZbPZNG/ePL355puN6p+SkqLFixdr+vTpLfpeb/k1lEpJSVGvXr20c+dO2e12JSYmauDAgZo6darmz5+vjh07euX7zDbwAAAAJMmVl6fSVxeq8quvPLZboqIUO2uWYs49R5bQUB9XB5jbj/mlWrHnkJbvydShYru6FlSoR45NXQsat0F6r/6dNGbSAI0a31ex8VGtXzBgAmabGxNKecmTTz6pW2+9tVF9WxpKuVwunX/++frggw9qfZ6cnKzhw4crISFB+/fv19atW3X0/7wRERFat26dJkyY0Ozv9pZfQ6njiYqK0pNPPqn58+e3+PvMNvAAAACOVvX99yp98SU5Dx702B56QjfFz5+viKFDfVwZYH6GYejb7CIt352plfsOq6ykQt3z7OqZbVdyacMbpFtDrBo8PFVjJvfX0NG9FBZOAIy2y2xzY0IpL6kvlIqIiFC3bt20f//+ms9aGkrdcccd+uc//1lzHBYWpscff1zz589XeHh4zec7duzQ3Llzaz3al5SUpB9++EGdO3du9vd7Q9++fdWnTx9NmzZNQ4YMUVJSkiorK7Vz504tW7ZMH3/8cU3fxx9/vNGBX33MNvAAAACOZTidKn//A5UtXSqjvNxjn8hx4xR/zdUKSU72cXVAYHC43NqQma+39mRqzf4sqbRSPbLt6pljU3yFs8Hzo6LDNXJ8X409daB6D+jM/lNoc8w2NyaU8pInn3xSd955pwYNGqRRo0Zp9OjRGjVqlIYMGaKvvvpKU6ZMqenbklAqLS1NAwYMkMPxf2+cWL16tS644AKP/SsqKnT66afXCqauvfZaPf/888f9ntWrV8tmszWrxqONGzdOvXr1qvN5UVGREo+zP8Ibb7yhK6+8Ui6XS6Ghofrxxx/Vv3//ZtdhtoEHAABQH1dRscr+s1gVn/7Xc4fwcMVecoliZ86Q5ah/kARQW4XTpbXpOVq+J1Mfp+corqRSPbJt6pFrV6TD3eD5HVLiNWbyAJ0yeQD7T6HNMNvcmFDKS4qKihQVFaXIyMg6bRs2bPBaKDV79mz95z//qTmeM2eOFi5ceNxz9uzZoyFDhqj6l000Q0NDtXv3bo9h0a8a83hdYyxcuFBz5sxp1rn33nuvHnroIUnSDTfcoGeffbbZdZht4AEAADSketculbzwopxHrbg/WkinToqfN1eRo0f7uDIg8BRXObRmf5aW787U5wfz1KmwQj1z7OqWX65Qd8NT4t79O2vMqQM0alxfxcTVnfMBgcJsc2NCKR/wVihVUVGhDh06qPyo5dw7d+7UgAEDGjz3sssu0/Lly2uOH3zwQf35z3+ut78ZQqmsrCx16dJFktS/f3/t2rWr2XWYbeABAAA0huFyqeKTdSp97TUZR73N+WgRo0Yqfu5chf7ycxOA48u2V+rtvYf01p5D2naoUCfklatXtk0pxZVq6GG9kFCrho7qqTGnDtDg4T0UGhbik5oBbzHb3JhQyge8FUqtXr1aM2fOrDkeO3asvv7660ad++GHH+qss86qOR4+fLi2bNlSb//S0lK53Q0vaW1IdHR0rX2umio5OVn5+fmKiYlp0eOEZht4AAAATeEuLVXZkjdU/tFHkqef0UJDFTNzhmIvuURWDyv3AXi2v9imt/Yc0rLdh3Qou1g9cmzqlW1XQrmjwXNj4iI1ekI/jT11oFL7dGT/KQQEs82Nea1AAPnwww9rHZ966qmNPnfixIkKDQ2V03lkc7+tW7cqJydHKSkpHvub4Q+nJP5iBwAAkGSNj1fC9dcpeto0lbzwghzHriB3OmV/a4Uq1m9Q/DVXK3LcOH6OAhqhd7tY/b+T++tPo/tpW16J3tydqbd2Z8qZU6aeOTb1yKl//yl7WaU2rP1eG9Z+r5Qu7XTKqQN1yuQBap8c5+PfBRC4CKUCyI8//ljreOzYsY0+NyYmRkOGDNHWrVtrPvvpp5/qDaXMIDs7W/n5+ZKkrl27+rkaAAAA/wvr3UtJj/5dFRs2qGzRYrmLimq1u/PzVfzoPxQ+dKgSrp2v0G7d/FQpEFgsFouGd2yn4R3b6eHxJ+qzzHy9uStT7+47rIQcm3pm29Qtv1wh9TxnlHO4WO+8sVHvvLFR/Qd305jJAzRyXB9FRvEyAuB4rP4uAI23c+fOWsd9+vRp0vm9e/eudbxjx44W19Sa/v3vf+vXp0uPfvwRAAAgmFksFkVPmaLk5/6tmBkzpJC6e9pUb9+uvJt/r9KFi+Q+aj9SAA0LtVp1eveOemnaCO2fd6YevHyCYs8dotUTuuvb/knKTYg47vm7f8zUf55dp9uvflmvPvWRdn7/s9yN2EwdCEaslAoQhYWFKiwsrPVZ9+7dm3SNY/vv3bu3xXU1x9q1azVp0iTFxMTU2+eNN97Q3/72N0lSSEiIbrrpJl+VBwAAEBCs0dGKv/oqRU09XaUvvqTq77+v3cHlkn3VKlV89pnir75KkRMn8kgf0EQxYaG6tF83Xdqvm3LLq7Ry72Et35Opjem56pltU89su+IqnR7PdVQ59e1nu/XtZ7vVLilWY6cM1NhTByqlSzvf/iYAEyOUChDFxcW1jqOjo48b6njSsWPHWsclJSUtLatZHn30Uc2aNUvnnnuuJk6cqP79+6tdu3aqrKzUzp07tWzZMn300Uc1/R988EENHjzYL7UCAACYXVj37mr/4AOq/Oprlb76itz5BbXa3YWFKv7nvxT+0ceKv3a+wpr4D5sAjugYHaHrhvbUdUN7an+xTct2H9Ly3T+rJKNQPXNsSs21K9zpeUVUcYFNa1ds0toVm9Srf2eNnTJQo8b3VXTM8VddAW0doVSAOPbNc1FRUU2+xrHnlNXzWmFfKCkp0ZIlS7RkyZJ6+8TExOixxx7T9ddf78PKAAAAAo/FYlHUhPGKGDlCtuVvyf7OO5Kz9uqN6h9+UP7v/6CY885V7KxZskZH+6laIPD1bheru8f0110n99PmnGK9uTtTK3f9rMjMEvXMtqlLYYWs9Tyxl7Y7S2m7s7Tslc80fExvnXLqAJ04tLusIeyug+BDKBUgjg2lIpvxqt9jQ6ljr+kr//rXv7R+/Xp9++232rVrlwoKClRQUKCQkBAlJSVpyJAhOv300zVnzhwlJSV59bsHDBggq7X5f9nfdtttuu2227xYEQAAgPdYo6IUP/tKRZ9+mkpeeknVW7fV7uB2y/7OGlV8/oXi5sxR1KmTeaQPaAGLxaJRnRI1qlOiHpkwSOt/ztObuzO1dmemOh0uVa8smxLtDo/nOh0ubfpyjzZ9uUfxidE6ZfJAjZ0yQF1O8O4cCG3L448/rscff7zZ57vdnt8m6S+EUgGqOT88mOUHjpEjR2rkyJF++e6srKwWnV9aWuqlSgAAAFpPaLduav/Xv6py4zcqe+UVufLyarW7i4pU8sQTqvjoI8Vfe63CevbwT6FAGxIWYtW0Hima1iNFZVOG6p39h7V0V6Y27jykXtk29cixK9LhORAoLSrXx6s36+PVm9W9d0eNP+1EjZ7QTzFxTV+MgLattLRUhw4d8ncZXkMoFSBiY2NrHVdUVDT5Gseec+w1g0Hnzp1btFIqPj7ei9UAAAC0HovFoqhxYxU5coRsb62QbeXKuo/07dih/FtvVfQ5Zytu1ixZg/DnQ6A1xIWH6oqB3XXFwO7KnFqhZbsztXTHQZXtz1OvLJu6FpQrpJ7H+w7uz9XB/blatvBzDRvdS2OnDNSgYd0VElr3TZsIPvHx8eratWuzz3e73S1erOFNhFIBglDKO3bt2kWwBAAAgoolIkJxV1yuqNNOU+nLL6nqu821O7jdKn/3PVV+/oXirpqjqClTTLPCHmgLusVF6Y+j+uq2kX20NbdES3f/rFU/HFT8wSL1yrYpqaza43lup1tbNu7Tlo37FBMfpXGnDtC4005Ul+483hfMWrqlTGlpqRISErxYUcsQSgWIY//QlJeXy263N+kNfLm5ubWO27Vr543SAAAAEABCu3RW4r33qmrTJpW+9LJcOTm12t0lJSp58imVf/yJEnikD/A6i8WiESntNCKlnf42fpDWHczVG7sy9fEPB9XtUKl65tgVVe3yeK69tEKfrNmqT9ZsVffeHTVh6iCNntCPt/ch4BFKBYikpCQlJiaqqKio5rODBw9q4MCBjb5GRkZGreO+fft6rT4AAACYn8ViUeTJJyti6FDZVq6S7e23peraqzQcNY/0naO4386StQn/CAqgccJCrDqrZyed1bOTik8bqlV7D+uNHQeVsePI/lPd8ssVUs9+1Af35+qN/bla9urnGj6mt8afdqIGnHSCrFZWOCLwEEoFkIEDB+rrr7+uOd63b1+TQqm0tLQ61wMAAEDwsUREKG7WbxQ1ZYpKX35ZVf/7X+0ObrfK331XlV98obirruItfUArahcRpqsGp+qqwalKL7Hrzd2ZWv79AWlfnnpm25VcWuXxPJfDpe++3KPvvtyj+PYxmnj6II2dMlDJnczzaBbQkObv+AyfGzx4cK3jjRs3Nvpcu92u77///rjXAwAAQHAJ7ZSi9n++R4n3/lkhKSl12t3FxSp54gkV3n2PHMesugfgfT0TYnTXyf215Zppev4PZ+uE2adow4RU/dQ9XuXh9W90Xlpo1/tv/U9/vmGxHr1nhTau36mqSocPKweah5VSAeTMM8/Uiy++WHO8YcOGRp/7xRdfyHnU21aGDx+uFA8/eAAAACD4RI4erYiTTjrySN+KFZKj9mS2+qeflP+HWxRz3nmKnfUbWaOj/VQpEBwsFovGdG6vMZ3bq3LiYH2QnqMlP2Vo07YM9cyyqWt+/W/vS9t5WGk7D+v1F9fr5PH9NP70E9V7QGdWO8KUCKUCyPTp0xUVFVXzFr2NGzdq165dGjBgQIPnLlq0qNbxzJkzW6NEAAAABKiaR/pOnazSl15W1Xff1e7gdsv+zjuq+OJzxV91tSInTWSSC/hAZGiILuzbRRf27aLsM4Zr2e5MLd2WLsfuHPXKsqm9zfPb+5xVTn393x36+r87lJgSr8lTB+mUUwcqMSn43sIO87IYhlFPvgpv2bBhg6ZMmVJznJqaqgMHDjTrWldeeaVee+21muM5c+Zo4cKFxz1nz549GjJkiKp/2cQyNDRUu3btUu/evZtVQyD69bWXJSUlio+P93c5AAAAplf5v/+p9MWX5DrmDc6/Ch8yWPHXXquw7t19XBkAwzC0La9Er+/8WR9t2qekjGL1zLErwlnP7ui/skj9TzpBk6YO0tCTeyksjHUqwcZsc2NCKR/wZiiVlpamAQMGyHHUkup33nlH559/vsf+lZWVOv3002ttkH7ttdfq+eefb9b3ByqzDTwAAIBAYFRVybZihWxvr5SO2gqiRkiIYs4/T7GXXcYjfYCfVLlc+vCXx/t+2pyhnofL1LmwosENpMNjwjX+1IGaOHWQuqZ28Emt8D+zzY0JpbwoMzOz1r5Nv/rmm280a9asmuOuXbvqyy+/9HiN2NhYdehw/L8Q7rjjDv3zn/+sOQ4LC9Pjjz+u+fPnKzw8vObznTt3au7cubUCqaSkJP3www/q3Llzo39fbYHZBh4AAEAgcR7OUumLL6pqyxaP7dakJMVfc7Uix4/nkT7Aj3LKK/XW7kN6c0uaqndmqXeWTfEVHgLlY3Tu2UGnTRui0RP6KSomwgeVwl/MNjcmlPKiHj16KKOFbyWZPXt2nf2fjuVyuXTeeedp7dq1tT7v2LGjRowYobi4OKWlpWnLli06+n/e8PBwrVu3ThMnTmxRjYHIbAMPAAAg0BiGoapvv1XpSy/LlZfnsU/40KFKuO5ahXbt6uPqABzr+7wSvbbjoD7+dp86ZBQpNdeuMNfxp//WsBCNGNtHk88YrL4ndiFkboPMNjcmlPIiX4VSkmSz2TR37lwtW7asUdft2LGjFi9erDPPPLNF9QUqsw08AACAQOWurJTtrbdkX7Xa8yN9oaGKvXCmYi+5RJYIVlwA/lbtcuvjjBy9/v0B7fwuXT0O29SpuLLB8+I7xum0MwZr3JQTldA+xgeVwhfMNjcmlPIiX4ZSv1qxYoX+9a9/6ZtvvvHY3r59e1122WW6//77lZyc3KLaApnZBh4AAECgcx46pJIXXlT1tm0e20M6dlT8/HmKPPlk3xYGoF55FVVavvuQlv1vr1w7s9Ury6boatfxT7JY1H/YCTpt+hANGdFDIaEhvikWrcJsc2NCqTYiPT1dW7Zs0eHDh2W329WpUyelpqZq/PjxtfaZClZmG3gAAABtgWEYqvz6a5W+/IrcBQUe+0ScfLLi581VaEqKj6sDUB/DMLQ9r0SLfzygz77ep5SDxepWUC5rA+lARFykJp12oiZMHaROXRN9Uyy8ymxzY0IpBAWzDTwAAIC2xF1RIduby2Rfs0ZyeVh1ER6uuEsvVczMGbKEhfm+QAD1qnS69F5atpZs2a/MzRnqnWVTQrmjwfO69E3RGdOHaOS4voqIZFwHCrPNjQmlEBTMNvAAAADaIkdGhkqfe17VO3Z4bA/p2kUJ116riGHDfFsYgEb5uaxcS3b+rDVf7Vb03nx1z2t4c/SQiFCNGt9XU6YPUY8+KWyObnJmmxsTSiEomG3gAQAAtFWGYahiwwaVvbpQ7pISj30iJ05Q/NVXKyQpycfVAWgMt2Hoy0MFem1bmrZt3K8TDpUqubSqwfMSu7TTtLNO0pjJAxQTG+mDStFUZpsbE0ohKJht4AEAALR1bptNZa8vUfnatZKHKYclKkqxv52lmHPPlSWEjZMBsyqpcmjl3sNa9s1ulf9wWD2zbYp0uI97jiXUqpNO6a0zzjxJfQZ2YfWUiZhtbkwohaBgtoEHAAAQLBz79qnkuefl2LvXY3tojx5KuO46hZ840MeVAWiqXYVleu3HA/r0893qcKBInQsrZG3gnLiOcTrjzJM0bspAxSVE+6RO1M9sc2NCKQQFsw08AACAYGK4XCr/5BOV/ec1GTabxz5Rp5+uuDmzFZKQ4OPqADSVw+XWxxm5en3TXmVsSlfPwzbFVjqPf5LVooGjemjamUM14KQTZLWyesofzDY3JpRCUDDbwAMAAAhGrpISlS1arIpPP/XYbomNVfzs2Yo6Y6os1obWXwAwg5zySi3d+bNWrd+hqL156pZfrpAGUoao9tE6bdoQTZo6SO3ax/qmUEgy39yYUApBwWwDDwAAIJhV79ipkueekzMjw2N72ID+Srj+eoX17OnjygA0l2EY2phVqMWb9umHr/cpNbNE8RUNrJ6yWNTrpG4665xhGjQ8VSEhhNGtzWxzY0IpBAWzDTwAAIBgZ7hcsr/3nmxvvCGjorJuB6tVMeedq9hZs2SNZh8aIJCUVDm0fHemVny2Q8aObHXPsyvk+HujKzw+UpOnDtaUaYOV1JE5W2sx29yYUApBwWwDDwAAAEe4CgpU+sorqvzyK4/t1qQkxc+bq8ixY3mDFxCAtueVaNHmffrf57vV9ecSJdodDZ7T7cQuOvvsoRp2ci+FhPJ2Tm8y29yYUApBwWwDDwAAALVVbd2qkueelys722N7xMiRir92vkI7dfJxZQC8ocLp0uq9h7T0i12yb89Uaq5dYa7jxxGhMRGacPqJOuOsk9QhhZcgeIPZ5saEUggKZht4AAAAqMuorpZtxduyrVghOT3sRRMerthLLlHshTNlCQvzfYEAvGJfsU2Lt6Vpw/qdSjlQpKSy6uP2NyR1HdhZ5503XENH92LvqRYw29yYUApBwWwDDwAAAPVzHj6skudfUPW2bR7bQ7p2VcJ11yli6Em+LQyAVzlcbn2UkaPXP9+pnM0Z6pFjU7izgdVTsRGaOHWQpp01VO2T43xUadthtrkxoRSCgtkGHgAAAI7PMAxVfvmlSl95Re7CIo99IidPUvzVVyskMdHH1QHwtsO2Cr32/QF9+OlPapdWoI4lVcftb0jqNqiLLjhvhAaP7MHqqUYy29yYUApBwWwDDwAAAI3jLi9X2ZIlKn//A8ld9/VdlpgYxV1xuaLPPFOWEDZEBgKd2zD0WWa+Fn2+Uz9/m6bU7LIGV0+FxUdq0tTBOuPMIUrswOqp4zHb3JhQCkHBbAMPAAAATePYv18lzz0nx569HtvD+vRR/PXXKbxvXx9XBqC15JZX6fUfDuiDj39Q/P4CJZc2sHrKIp0wuJsuOG+4Bg9PlZXVU3WYbW5MKIWgYLaBBwAAgKYzXC6Vf/yxyv7zmgy7vW4Hi0XRZ5+tuCsulzUmxvcFAmgVbsPQF4cKtOizHTr4zX51z7YpvIE394UlRGnyGUdWT7VrH+ujSs3PbHNjQikEBbMNPAAAADSfq6hYZYsWqmL9Bo/t1vaJip87T5Hjx8lisfi2OACtKq+iSq9vT9cHn/yo+H356tDQm/ssUvch3TTj/BE6cViqrNbg/jvBbHNjQikEBbMNPAAAALRc1Q8/qPT55+X8OdNje8TIkYq/dr5CO3XycWUAWptRs3rqJx38Jk3ds20Ka2j1VLsoTZk+RGdMP0nx7aJ9VKm5mG1uTCiFoGC2gQcAAADvMBwO2Ve/o7Jly6RqDysmwsMVd9lliplxgSxhYb4vEECry6+o0uvbj+w9lbAvX+1tDayeslrUe0SqLpwxUn0GdgmqFZVmmxsTSiEomG3gAQAAwLuc2dkqfeFFVW3e7LE99IQTlHDD9QofNMjHlQHwFcMw9OWhAi3a8KN+/iZdJ2TbFOo+fuQR2TFOZ507TJNPO1FR0RE+qtR/zDY3JpRCUDDbwAMAAID3GYahyq++VunLL8ldWOSxT9TUqYqfM1tWfiYE2rSCimq9vi2tZvVUot1x/BPCQjRobG9dOGOUuvXo4Jsi/cBsc2NCKQQFsw08AAAAtB53ebnKXn9d5e9/IHmY7lji4hR/9VWKOu20oHpsBwhGhmHoq0MFWrj+R2VuTNMJuTaFuI9/Tnz39jrv/OEaO6G/wsJDfVOoj5htbkwohaBgtoEHAACA1le9d69K/v2cnPv3e2wPHzxY8ddfp7ATTvBxZQD8Ib+iSos379fHH/2gpLQCxVU4j9vfEhWmkZP7a8b5I5XcKcFHVbYus82NCaUQFMw28AAAAOAbhsul8vc/UNmS12VUVNbtEBqq2AtnKvaSS2SJaPv7yQCQ3Iah9Rm5WvjRdhVtPqgu+eWyHqe/IalDvxRdNGOUho/uKWvI8Xqbm9nmxoRSCApmG3gAAADwLVdBgUpfekmVX2/02B7SqZMSrr9OEcOH+7gyAP502FahV77Zoy8++VEpGcWKrnYdt781LlITzxikc84ZpoTEGB9V6T1mmxsTSiEomG3gAQAAwD8qN32n0hdekCs312N75MSJip97jUISE31cGQB/crrd+mB/lpZ8sE2V2w+pU7GHlZVHMSwWdTupmy6ZOUoDhnQLmP3pzDY3JpRCUDDbwAMAAID/uCsrZXtzmezvvCO56q6KsMTEKG72lYqeNk0Wa+A+pgOgedJK7Hrp8x3asn6nOmeWKsJ5/J3RwzrEato5QzVt2hBFRoX7qMrmMdvcmFAKQcFsAw8AAAD+5zhwQCX/fk6OXbs8tocN6K+EG29UWGqqjysDYAZVLpdW7vhZb63dJutP2Uoqqz5ufyMsRCeO66NLLxylLick+ajKpjHb3JhQCkHBbAMPAAAA5mC43ar4ZJ1KFy+WYbPV7RASopgZMxT3m8vYCB0IYjsKSvXipz9o9xd71CXLplD38aOUhF4ddOHMURp9Sh+FmGhjdLPNjQmlEBTMNvAAAABgLq7iYpW+8qoqP/vMY3tIp05KuO5aRYwY4ePKAJiJ3eHU0u3pWvPBdkXvyVVCufO4/S1xEZowbbAuOHe44hKifVRl/cw2NyaUQlAw28ADAACAOVVt3aaS556TKzvbY3vkpEmKv+YahSS2821hAEznu+xCvbR2mw59k6bOeeU63noow2rRCcO7a9ZFJ6t3/05+2xjdbHNjQikEBbMNPAAAAJiXUVUl21tvyfb2yno3Qo+fM0dRZ0xlI3QAKqio1qsbd2vDR9+rw4EiRTqOvzF6ROcEnXPecE2ZcqLCI0J9VOURZpsbE0ohKJht4AEAAMD8HAcPquTZf8uxc6fH9rCBA5Vw4w0K697dx5UBMCOX29CH+7L0+ntbVL09Ux0a2hg9MlRDJ/XXpTNHKTklwSc1mm1uTCiFoGC2gQcAAIDAYLjdqli3TqULF8mw2+t2CAlRzIUzFXfppWyEDqBGWoldz3/yvX7asEuds8sUcpzFU4akpAGddOlFozV0eA9Zra33aJ/Z5saEUggKZht4AAAACCyuomKVvvqKKj/73GN7SKdOSrj+ekUMH+bbwgCYWoXTpaVb07Tm/W2K3Z2rmKq6jwQfLSQxWqeeOUTnnT1MUTHeD7rNNjcmlEJQMNvAAwAAQGCq2rpVJc89X/9G6JMnK/6aqxXSrp1vCwNgaoZh6H9ZhXr53S3K3XRAnQorjt8/1KpeJ/fU7y49RV27J3mtDrPNjQmlEBTMNvAAAAAQuIyqKpUtWy77qlWeN0KPjf2/jdD99IYtAOaVV1Gllz/boa8++VEdDxYrzHX8WCa2ZwddfNFojRnTW9aQlr1cwWxzY0IpBAWzDTwAAAAEPkdGxpGN0Hft8tgePniwEm64XqHduvm4MgCBwOU29N7uTL25ZovcPx5WO7vjuP0t8ZGadOZJmnHecEU389E+s82NCaUQFMw28AAAANA2GG63Kj7+RKWLF3veCD00VLGXXqLYiy6SJSzM9wUCCAh7i8r0/Npt2vvFXqXk2mQ9TlLjPurRvm5NfLTPbHNjQikEBbMNPAAAALQtrqIilb78iiq/+MJje+gJ3ZRw440KP/FEH1cGIJCUO5x6bdM+rX1vmxL25yvScZzX9kmK6dVBF184Wqc08tE+s82NCaUQFMw28AAAANA2VW7eotLnnpMrN9dje/SZ0xV35ZWyxsb6uDIAgcQwDH2ekadXV29SxZaflWirPv4J8ZGaeOYQXXjeiOM+2me2uTGhFIKC2QYeAAAA2i53ZaVsS5fK/s4ayV13lYM1MVHx8+Ypcvw4NkIH0KCfS8v13Ifb9OOGXUrJafjRvp6je+rKyzw/2me2uTGhFIKC2QYeAAAA2j7H/jSVPLtAjn37PbZHjB6thOuuVUhyso8rAxCIKpwuLfnfXr3//jbF72vco30XXThaY0/pI6v1SAButrkxoRSCgtkGHgAAAIKD4XKp/L33VbZkiYzKyjrtlshIxV1+uaLPPUeWkBA/VAgg0BiGoS8zcvXq6u9kb8KjfRedN0IOV5Wp5saEUggKhFIAAADwJ2durkqff0FV333nsT2sTx8l3Hijwnr38nFlAALZobJy/fvD7fpx/U51bMSjfZ1OStFD915qmrkxoRSCAqEUAAAA/M0wDFV+9ZVKX3xJ7uLiuh2sVsVccL5iZ82SNTLS5/UBCFyVTpfe2LRP77+3VbHHebSv2lGpRe/9yTRzY0IpBAVCKQAAAJiF22ZT2eL/qPyjjzy2h3TsqPjrr1fkyBE+rgxAoDMMQxt/ztMrq75T2eaDdR7tI5QC/IBQCgAAAGZTvWOHSp59Vs6fMz22R06apPi51yikXTvfFgagTciyVejfH27TD//dqeRsm6wilAL8glAKAAAAZmQ4HLK9/bZsy9+SnM467Za4OMVffbWiTpsii8XihwoBBLpql1tLv9un99ZsVdiOg1q6+k7TzI0JpRAUCKUAAABgZs7MTJU8+29V//STx/bwoUOVcMP1Cu3c2ceVAWhLPv0pTVMH9zbN3JhQCkGBUAoAAABmZ7jdqlj3qUoXLZJhs9XtEB6uuFmzFDPjAllCQnxfIICAZ7a5sdXfBQAAAAAAJIvVquhpZyj52WcVOXFC3Q7V1SpbvFj5f7xdjn37fF8gAHgZK6UQFMyWBgMAAAANqdy0SSXPPSd3fkHdRqtVMeefr9jfzpI1MtL3xQEISGabG7NSCgAAAABMKHL0aCUvWKDoc8+Rjt3k3O2WffVq5d/8e1Vt3eqfAgGghVgphaBgtjQYAAAAaIrqXbtVsmCBnAcPemyPmnKq4q+5RlZ+1gVwHGabG7NSCgAAAABMLnxAf3V44nHFXn65FBpap71i/Qbl3XCjKjZsEOsOAAQKVkohKJgtDQYAAACay5mZqZJn/63qn37y2B4xfLjib7heoSkpPq4MgNmZbW7MSikAAAAACCCh3bqp/cMPKeGGG2SJianTXrV1q/Jvulm21e/IcLn8UCEANA6hFAAAAAAEGIvVqugzpyt5wTOKHDu2TrtRVaWyV19VwR13yJGW5ocKAaBhPL6HoGC2JYoAAACAN1V+841Knn9B7sLCuo1Wq2JmzlTcby6TJSLC98UBMA2zzY1ZKQUAAAAAAS7ylFOU/OwCRZ91Vt1Gt1v2t99W3h9uUdWPnvehAgB/YKUUgoLZ0mAAAACgtVTv2KHiBc/KlZnpsT36zOmKmz1bVg/7UQFo28w2N2alFAAAAAC0IeEnnqjkp55U7G8uk0JD67SXf/iR8m68SZXffOuH6gDg/7BSCkHBbGkwAAAA4AuOjAyVPLNAjj17PLZHjh+v+PnzFZLYzreFAfALs82NWSkFAAAAAG1UWGqqkh79u+LnzvW4yXnlV18p78YbVf7pp2K9AgBfI5QCAAAAgDbMEhKimPPPU4cFzyh8+LA67YbNppKnnlbhX+6TMzvb9wUCCFqEUgAAAAAQBEJTUtT+r39Vwq23yBIXV6e9evt25d/8e9lWvyPD5fJDhQCCDaEUAAAAAAQJi8Wi6ClTlPzsAkVOnFin3aiqUtmrr6rgzj/JkX7A9wUCCCpsdI6gYLbN3AAAAAAzqNy0SSXPPSd3fkHdxpAQxV50oWIvvVSW8HDfFwfA68w2N2alFAAAAAAEqcjRo5W8YIGizz6rbqPLJdvyt5R3y62q3rHD98UBaPNYKYWgYLY0GAAAADCb6h07VPzMArkOHfLYHn32WYq78kpZo6N9XBkAbzHb3JiVUgAAAAAAhZ94opKfelKxl14ihYTUaS//YK3ybrpZlZs3+6E6AG0RK6UQFMyWBgMAAABm5kg/oJIFC+TYu9dje9SUUxV/zTWy8rM1EFDMNjdmpRQAAAAAoJawnj2U9I9HFXf11ZKHTc4r1m9Q3o03qeLLL8U6BwDNRSgFAAAAAKjDEhKi2BkXKHnBMwofelKddndJiYr/8ZiKHnlErgIPb+8DgAYQSgEAAAAA6hXaqZPaP/CAEm66SZaYmDrtVd98q7ybblb5J+tYNQWgSQilAAAAAADHZbFYFD3tDCUveEYRY8bUaTfsdpU884wK/3KfnNk5fqgQQCAilAIAAAAANEpIUpIS775L7e68Q9aEhDrt1du3K//mm2Vf864Ml8sPFQIIJIRSAAAAAIBGs1gsipowQcnPLlDUqafWaTeqqlT68ssquOsuOQ4e9H2BAAIGoRQAAAAAoMms8fFqd9utSvzLvbJ2SKrT7ti1W/m33KqyZctlOJ1+qBCA2RFKAQAAAACaLXLUKCUvWKDos86q2+h0yrZkifJv+6Mc+/b5vjgApkYoBQAAAABoEWt0tBKuv07t//awQjp3rtPuPHBA+bffodJFi2VUVfmhQgBmRCgFAAAAAPCKiMGDlfz0U4q58ELJesx00+2WfeVK5f3hFlX/9JN/CgRgKoRSAAAAAACvsUREKH7ObCU99g+FpqbWaXcdPqyCu+5WyfMvyF1R4YcKAZgFoRQAAAAAwOvC+/ZVh8f/pdjLL5dCQ+u0l3/wgfJv/r2qtm3zfXEATIFQCgAAAADQKixhYYq77FJ1ePIJhfXvX6fdlZurwr/cp+IFC+S22/1QIQB/IpQCAAAAALSqsO7dlfT3RxR/zTVSeHid9oqPP1HeTTerctMmP1QHwF8IpQAAAAAArc4SEqKYC85X8tNPK3zI4Drt7oICFT34kIoff0Lu0lI/VAjA1wilAAAAAAA+E9qls9o/+KDir79OlqjIOu0VGzYo78abVPH1136oDoAvEUoBAAAAAHzKYrUq5qyzlLxggSKGD6/T7i4pUfHfH1XR3x+Vq6jY9wUC8AlCKQAAAACAX4QkJyvxr/cp4Q+/lyUmpk575ddfK++mm1SxYYMMw/BDhQBaE6EUAAAAAMBvLBaLok8/XckLnlHEySfXaTfKylT8+BMqeuhhuQoK/FAhgNZCKAUAAAAA8LuQpCQl3nO32t3+R1ni4uq0V23apLwbb1L5xx+zagpoIwilAAAAAACmYLFYFDVpkpKfXaDIiRPqtBvl5SpZ8KwK/3KfnDk5fqgQgDcRSgEAAAAATCWkXTsl3nGHEu/6f7K2a1envXr7duXf/HvZ33tfhtvt+wIBeAWhFAAAAADAlCLHjlXyswsUddppddqMykqVvviiCu/5s5yHs/xQHYCWIpQCAAAAAJiWNS5O7W75gxLv+4usHZLqtFf/9JPyfv972de8y6opIMAQSgEAAAAATC9y5EglL1ig6DOn122srlbpyy+r4K675Tx0yPfFAWgWQikAAAAAQECwRkcr4YYb1P7BBxWSklKn3bFzp/L+cItsq9+R4XL5oUIATUEoBQAAAAAIKBFDT1KHp59S9Dnn1G2srlbZq6+q4K675MzM9H1xABqNUAoAAAAAEHCsUVFKuHa+2v/tYYV06lSn3bFr95FVUytXsmoKMClCKQAAAABAwIoYPPjIqqnzzpMsltqNDofKFi1WwZ/+JMfBg/4pEEC9CKUAAAAAAAHNGhmphHlzlfTI3xTSpUuddseevcq/5VbZ3lrBqinARAilAAAAAABtQviJJyr5qScVc8EFdVdNOZ0qe+01FdxxpxwZGf4pEEAthFIAAAAAgDbDEhGh+GuuVtLfH1FI16512h379in/1ttUtny5DKfTDxUC+BWhFAAAAACgzQkfOFDJTz6hmJkzJesxU1+nU7bXlyj/9jvkSD/gl/oAEEoBAAAAANooS0SE4q+ao6RH/67QE7rVaXempSn/tttUtvRNGQ6HHyoEghuhFAAAAACgTQvv318dnnhCMRddVHfVlMsl29KlR1ZNpaX5p0AgSBFKAQAAAADaPEt4uOJnX6mkx/6h0O7d67Q709OV/8fbj6yaYq8pwCcIpQAAAAAAQSO8b191eOJxxV56Sf2rpv54uxzp6f4pEAgihFIAAAAAgKBiCQtT3BVXqMM/H1Noamqddmd6uvJv+6PK3lzGqimgFRFKAQAAAACCUlifPurw+L8Ue9mlnldNvfGG8u+4U44DB/xSH9DWEUoBAAAAAIKWJSxMcZdfXv+qqf37j6yaWracVVOAlxFKAQAAAACCXs2qKU97TTmdsi1ZooI775QjI8M/BQJtEKEUAAAAAAD6v72m6ntDn2PffuXfeptsy9+S4XL5oUKgbSGUAgAAAADgKL++oS/m4os9rpoqe/11FdxxpxwHD/qnQKCNIJQCAAAAAOAYlrAwxV/5OyX941GFntCtTrtj3z7l33KrbCtWsGoKaCZCKQAAAAAA6hHer586PPGEYi660POqqf+8poI//YlVU0AzEEoBAAAAAHAclvBwxc+eraRH/66Qbh5WTe3Ze2SvqbffZtUU0ASEUgAAAAAANEJ4//5KfvIJxcycWXfVlMOhssX/UcGf/p+cmZn+KRAIMIRSAAAAAAA0kiU8XPFXzVHS3/+ukK5d67Q79uxR3h9ukW3VKlZNAQ0glAIAAAAAoInCB/yyamrGDMliqd3ocKhs4SIV3HW3nIcP+6U+IBAQSgEAAAAA0AyWiAjFX32Vkv7+iEK6dKnT7ti1S3m//4Ps774rw+32Q4WAuRFKAQAAAADQAuEDByr5qScVc8EFdVdNVVer9KWXVXjvvXJm5/inQMCkCKUAAAAAAGghS0SE4q+5WkmP/E0hnTrVaa/+4Ufl/+H3sn/4oQzD8EOFgPkQSgEAAAAA4CXhJ56oDk8/pehzzqnTZlRUqvTfz6nwr3+VKy/PD9UB5kIoBQAAAACAF1kjI5Vw7Xy1f/BBhXTsWKe9eus25d38e5V/+imrphDUCKUAAAAAAGgFEUNPUoenn1LUtGl12ozycpU89bSKHnpYrsJCP1QH+B+hFAAAAAAArcQaHa12N92oxPvukzUpqU571aZNyrvpZlV89jmrphB0CKUAAAAAAGhlkSNHKPmZpxU1ZUqdNsNmU/G//qXiRx+Vq7jY98UBfkIoBQAAAACAD1hjY9Xu1luUePfdsrZrV6e98uuNyr/596r4+mvfFwf4AaEUAAAAAAA+FHnKGCUveEaREyfUaXOXlKj474+q6J//kruszA/VAb5DKAUAAAAAgI9Z4+OVeMcdanfnnbLExdVpr/z8c+XddLMqN23yQ3WAbxBKAQAAAADgJ1ETxit5wQJFnDKmTpu7qEhFDz6k4qeekttu90N1QOsilAIAAAAAwI9CEtsp8a67lHDrrbLExNRpr/j0v8q7+feq2rbN98UBrYhQCgAAAAAAP7NYLIqecqqSFzyjiJEj67S78/NV+Jf7VPL8C3JXVvq+QKAVEEoBAAAAAGASIUlJSvzLvUq46SZZoqLqtJd/8IHy/3CLqnfu9EN1gHcRSgEAAAAAYCIWi0XR085Qh2eeVvhJJ9Vpd2VlqeCuu1W6eLEMh8MPFQLeQSgFAAAAAIAJhXbsqPYP3K/4+fOl8PDajW637G+vVP5tf5Rjf5p/CgRaiFAKPjdnzhxZLJYm/wIAAACAYGOxWhVz7jlKfupJhfXvX6fdmZGh/NtvV9my5TJcLj9UCDQfoRQCwoABA/xdAgAAAAD4TWjXrkr6+yOKu/J3Umho7UaXS7YlS1Rw55/kzMz0T4FAM1gMwzD8XQSCy6FDh1RUVNRgv7/85S9atWqVJOmxxx7T7bff3uzvLC0tVUJCgkpKShQfH9/s6wAAAACAvznSD6j4ySflTE+v2xgerrjfXaGY886Txco6FNRmtrkxoRRMqbKyUl26dFFRUZHCwsKUmZmpjh07Nvt6Zht4AAAAANAShsMh27Jlsq14W3K767SHDx6shN//XqGdUvxQHczKbHPj0Ia7AL63atWqmtVU5557bosCKUlasGBBzf+9++67W1wfEGgef/xxlZaWKj4+Xrfddpu/ywF8jjEAMA6AtjYGLGFhirviCkWMHq3iJ5+S69ChWu3VP/6o/D/8XvFXX6OoaWewTy8kmW9uzEqpNiI9PV3btm3T4cOHZbPZ1LlzZ6WmpmrcuHEKCwvzd3lNNnXqVH366aeSpPfee0/nnHNOi67XpUsXZWVlqXPnzjp8+LA3SgQCSrdu3XTo0CF17dpVmewzgCDEGAAYB0BbHgNGVZXKXntN9jXvemyPGDVSCTfeqJCkJB9XBrMx29yYlVKtIC0tTZs2bdJ3332nTZs2acuWLSorK6tpT01N1YEDB7zyXStWrNDjjz+ujRs3emxv3769LrvsMj3wwAPq0KGDV76ztWVkZOi///2vpCMD5swzz/RzRQAAAABgXpaICMXPnauIMWNU8tTTcuXm1mqv+m6z8m7+vRKuvVaRkyayagqmQSjlJRs2bNAjjzyi7777ToWFha3+fTabTfPmzdObb7553H6FhYV67rnntHLlSi1evFjTp09v9dpaauHChfp1Ad/s2bMVEhLi54oAAAAAwPwihgxRh6efUukrr6jik3W12gybTcX/+pciv/lGCddfJ6sJ9hMC2IrfS7Zt26aPP/7YJ4GUy+XSZZddVieQSk5O1rRp03TJJZdoxIgRtdLvnJwcXXDBBfryyy9bvb6WMAxDixYtqjm++uqr/VcMAAAAAAQYa3S02t18sxLvvVfWxMQ67ZVffaW8m25W5f/+54fqgNoIpVpZRESEevfu7dVr/r//9//0wQcf1ByHhYXpmWeeUWZmpj766CMtX75cmzdv1o8//qixY8fW9KuqqtKMGTOUlZXl1Xq8ad26dcrIyJAkTZ48WX369PFzRQAAAAAQeCJHj1LyM08rcuLEOm3u4mIVPfSwip95Ru7ycj9UBxzB43teFBYWpkGDBmnUqFEaPXq0Ro0apSFDhuirr77SlClTvPIdaWlpeuqpp2p99tZbb+mCCy6o0/fEE0/Up59+qtNPP71mz6mCggLdf//9ev7554/7PatXr5bNZmtxvePGjVOvXr0a3f+VV16p+f+vueaaFn8/AAAAAAQra3y8Eu+4XRVjT1HJc8/LOGqvY0mq+GSdqrd/r4RbblHE4EF+qhLBjFDKS2bPnq3rrrtOkZGRrfo9999/vxwOR83xnDlzPAZSv4qKitKiRYs0ZMgQVVdXSzoS/Nx5553HDYtuueWWmhVLLbFw4cJGh1JFRUVavXq1JCkhIUEXX3xxi78fAAAAAIJd1IQJCh80SCULnlXVpk212ly5uSq85x7FzLhAcZdfLkt4uJ+qRDDi8T0vSUxMbPVAqqKiQitWrKj12Z/+9KcGz+vXr59mzJhRc+x0OvXGG294u7wWW7JkiaqqqiRJs2bNUlRUlJ8rAgAAAIC2ISQxUYl/vkcJN90kS9Qxc1fDkH3VauX/8XY50tL8UyCCEiulAshHH32k8qOe9x07dqwGDBjQqHOvuuoqLV++vOZ45cqV+vOf/1xv/++//15ut7v5xf4iOjq60X2PfnSPDc4BAAAAwLssFouip52h8JNOUsmTT6p6x45a7c6MDOXffofifvMbxVx0oSy8CR2tjFAqgHz44Ye1jk899dRGnztx4kSFhobK6XRKkrZu3aqcnBylpKR47B/v49eDbtu2Tdu2bZMkDRkyRKNHj/bp9wMAAABAsAjtlKL2Dz8k+5o1KnvtdemXeaIkyelU2euvq/K7TWp3yy0K7dLFf4WizePxvQDy448/1jo++s16DYmJidGQIUNqffbTTz95pS5vYINzAAAAAPAdS0iIYmfOVIcnHldoz5512h27div/D7fI/sFaGYbhhwoRDAilAsjOnTtrHffp06dJ5/fu3bvW8Y5jlmr6S1VVlZYsWSJJCg8P1xVXXOHnigAAAAAgOISlpqrDPx9TzCUXS9baEYFRVaXS559X0V/vl6ugwE8Voi0jlAoQhYWFKiwsrPVZ9+7dm3SNY/vv3bu3xXV5w6pVq1RUVCRJmjFjhpKSkvxcEQAAAAAED0tYmOJ/9zsl/f0RhXTuXKe9autW5d38e1V8/rkfqkNbRigVIIqLi2sdR0dHKyYmpknX6NixY63jkpKSlpblFa+++mrN/8+jewAAAADgH+EDBqjDU08q+qyz6rQZNpuK//kvFT32mNxlZX6oDm0RoVSAsNlstY6joqKafI1jzykzwV8kBw8e1KeffirpyEquqVOn+rkiAAAAAAhe1shIJVx/nRLvu0/W9ol12iu/+FJ5N9+sys1b/FAd2hrevhcgjg2lIiMjm3yNY0OpY6/pDwsXLpTb7ZYkzZkzR1Zr6+Skv27Ml5WVpS4teHvETTfdpJtuuslbZQE+8+s4c7vdKi0t9XM1gO8xBgDGAcAYaKK+fRTx8MMqeXWhqr7+unZbTq5K/vxnRU2dqrjfXSFrM+anaJ4FCxZowYIFzT4/KytLkkyzeT2hVICyWCw+Oae13Xfffbrvvvta/XvmzZunBx98UNL/DcLmuOeee3TPPfd4qyzA57KyspSQkODvMgC/YQwAjAOAMeBFH66Vbv+jv6tAM8ybN8/fJUgilAoYsbGxtY4rKiqafI1jzzn2mm3ZX//6V0nSSy+91KJwjpVSAAAAAAB/aelKKcMwNG/evJo5sr8RSgUIQqmWsVqteuCBB/TAAw/4uxQAAAAAAJrl7rvv1t133+3vMryGjc4DxLHLS8vLy2W325t0jdzc3FrH7dq1a2lZAAAAAAAAzUIoFSCSkpKUmFj7zQcHDx5s0jUyMjJqHfft27fFdQEAAAAAADQHoVQAGThwYK3jffv2Nen8tLS0414PAAAAAADAVwilAsjgwYNrHW/cuLHR59rtdn3//ffHvR4AAAAAAICvEEoFkDPPPLPW8YYNGxp97hdffCGn01lzPHz4cKWkpHirNAAAAAAAgCYhlAog06dPV1RUVM3xxo0btWvXrkadu2jRolrHM2fO9GZpAAAAAAAATUIoFUCio6N18cUX1/rs0UcfbfC8PXv2aNWqVTXHoaGh+u1vf+v1+gAAAAAAABqLUCrA/PWvf1VYWFjN8aJFi7RmzZp6+1dWVuqqq65SdXV1zWfXXHONevfu3ap1AgAAAAAAHE+ovwtoSzIzM2vt2/Sr7OzsWsdOp1MHDhzweI3Y2Fh16NCh3u/o1auX/vCHP+if//xnzWcXX3yxHn/8cc2fP1/h4eE1n+/cuVNz587V119/XfNZUlKS7rvvvsb+lgAAAAAAAFqFxTAMw99FtBU9evRQRkZGi64xe/bsOvs/Hcvlcum8887T2rVra33esWNHjRgxQnFxcUpLS9OWLVt09P+84eHhWrdunSZOnNiiGgEAAAAAAFqKlVIBKCQkRMuXL9fcuXO1bNmyms9zc3P14YcfejynY8eOWrx4MYFUAxwOh7766isdPHhQWVlZio2NVZcuXTR8+HD16NHD3+UBQNBxuVzat2+fduzYocOHD6ukpEQRERFKTExU7969NWrUKMXExHj1O7kXwEz8MQYAs6moqNCuXbuUkZGhw4cPq6ysTA6HQ/Hx8UpKStLgwYM1aNAghYZ6Z3rLfQBm4+sx4EuBVzEkHXnM780339TFF1+sf/3rX/rmm2889mvfvr0uu+wy3X///UpOTvZxlS2XlpamTZs26bvvvtOmTZu0ZcsWlZWV1bSnpqbW+yhkU+Tl5em+++7TsmXLVFhY6LHPuHHjdNttt+miiy5q8fcBAOp38OBBrVy5UuvWrdMXX3yh0tLSevuGhITojDPO0E033aRzzjmnRd/LvQBm4csxYLFYWlKq0tPTmaSjVSxcuFD//e9/9e2332r//v1yu93H7R8bG6tLL71UN998s4YNG9as7+Q+ADPx1Rjw932Ax/faiPT0dG3ZskWHDx+W3W5Xp06dlJqaqvHjx9faZyoQbNiwQY888oi+++67em8Gv/JGKLV27VrNmTNHubm5jep/+eWX64UXXuBfJeETrRnM+vsGBHjy29/+VkuXLm3Wueeee65efvllpaSkNPlc7gUwC1+PAe4FMKtu3brp0KFDTT4vJCREN998sx577LEmrRrhPgCz8dUY8Pd9gJVSbUTPnj3Vs2dPf5fhFdu2bdPHH3/sk+/asGGDZsyYUevthBaLRSNGjFCvXr1UXFysrVu3Kj8/v6Z9yZIlKi0t1erVq2W18gJLeF9TglmgrdmzZ4/Hz7t27aq+ffsqJSVFTqdTaWlp2r59e61/NXzvvfc0adIkffbZZ+rUqVOjv5N7AczEH2MACATR0dHq3bu3unfvrvj4eLndbhUWFuqHH36o9WIpl8ulJ598UgcOHNCKFSsUEhLS4LW5DyAQtOYY8CsDMJknnnjCkFTnV0REhNG7d+9an6Wmpjb7e37++WcjMTGx1vXGjx9v7Nixo1a/yspK46mnnjLCwsJq9b3rrrta+DsFPKtvDHj61ZIx0NjvqO9Xenq6137PwK9GjhxZ82ds+PDhxjPPPGPs27fPY9/MzExj/vz5df5sTpgwwXC73Y36Pu4FMBtfj4GjzxszZoyRnp7epF8Oh8Obv32gRr9+/Yzzzz/feO6554zt27cbLper3r4bN240Tj/99Dpj4R//+EeD38N9AGblqzHg7/sAoRRM54knnjDCwsKMYcOGGXPnzjVeeOEFY/PmzUZ1dbWxfv16r03Ir7766lrXGjdunFFRUVFv/1WrVtUJyQ4cONDs7wfq46tg1t83IMCTUaNGGeecc46xadOmRp/z7LPP1hkvS5cubdS53AtgNr4eA0efM3ny5GZWDXhfdXV1k/q7XC7jiiuuqPVnOiEhwaisrDzuedwHYFa+GgP+vg8QSsF0CgsL670ReCuU2rNnjxESElJznfDwcGPPnj0Nnjd79uxa33/VVVc16/uB4/FVMOvvGxDgSXNX4F100UW1/kyfffbZDZ7DvQBm5MsxYBjcC9C2lJSUGDExMbX+XK9du7be/twH0NY0dQwYhv/vAzz8CtNJTExUZGRkq37HG2+8IZfLVXN84YUXqm/fvg2e96c//anW8fLly1VZWen1+hDcZs+erdLSUm3dulUvvfSS5s+frxEjRigsLMzfpQGtrrkbZd544421jtevX9/gOdwLYEa+HANAWxMfH68JEybU+mzfvn319uc+gLamqWPADAilEJRWrVpV6/iqq65q1HkDBw7UmDFjao7tdrvPNmVH8PBFMAu0NcOHD691XFFRoeLi4uOew70AbUlzxgDQFrVv377W8dFvLT4W9wG0RU0ZA2ZAKIWgk52dre3bt9cch4aGavz48Y0+/9RTT611vHbtWm+VBgBoJk+vPD76LUrH4l6AtqapYwBoqzIyMmodd+nSxWM/7gNoqxo7BsyCUApB58cff6x1fNJJJykmJqbR548bN67W8U8//eSVugAAzXfs0vTQ0FB16NCh3v7cC9DWNHUMAG3Rnj179O2339YcWywWTZ482WNf7gNoi5oyBsyi7j+pAG3cjh07ah336dOnSef37t37uNcDAPjeihUrah2PGjVKVmv9//bGvQBtTVPHgCcHDx7UVVddpf/97386fPiw7Ha7EhMT1aFDBw0fPlyTJk3SxRdfXOfREMAMsrKydMkll9TaI+riiy+ud5827gNoa5o6Bjzxx32AUApB59h/SezevXuTzk9NTa11XFBQoKKiIiUmJra4NsBfmIggkNlsNr3yyiu1Pps5c+Zxz+FegLakOWPAk/T0dKWnp9f6LDc3V7m5udqxY4eWLFmi2267TfPmzdODDz6o2NjYFtUNtITT6VRRUZF27typ9957Ty+88IJKS0tr2nv16qUFCxbUez73AQS6lo4BT/xxH+DxPQSdYzf97NixY5POj42NrbMJdUlJSUvLAvwqPT1dixYt0o4dO1RcXCyHw1Hr5nPttdeqe/fuuvXWW2Wz2fxdLlDLXXfdpezs7Jrjdu3aae7cucc9h3sB2pLmjIHmstvtevLJJzVy5EgeV4JP3XLLLbJYLDW/wsLC1LFjR02ePFmPPfZYrcn4lClT9Pnnnx/373buAwg03h4DzeXt+wArpRB0jp1QR0VFNfkaUVFRtV77avY3GgDe8OsN6IMPPtDKlSs1aNAgf5cEaNWqVXX+FfDhhx9ucFUf9wK0Fc0dA0cLDQ3VhAkTNHXqVJ100knq1q2b4uLiZLPZdPDgQX3xxRf6z3/+o9zc3Jpz9uzZo6lTp+qbb76ps2IE8Jfzzz9fN954o6ZNm9ZgX+4DaIuaMgaO5s/7AKEUgs6xN6Bj/4WjMaKiolRUVFTvNYFAwUQEgWz79u268sora302bdo0XX/99Q2ey70AbUFLxsCvHnroIc2bN6/ef00fNmyYzj//fD344IO6//779eijj8owDElH3l524YUX6rvvvpPFYmn+bwTwkrVr18rlcikyMlKTJk06bl/uA2iLmjIGfuXv+wCP7yHoNWfw8IMX2oKHHnpIhw4d0vr163XPPffovPPO0/Dhw9WnT5+am89jjz2mjIwM/b//9/9q/bn/9Qb06w0J8LWDBw/qnHPOqTUBSE1N1euvv+6zv9e5F8CfvDUG7rnnnkY93hEZGalHHnlEzzzzTK3Pt2zZoqVLlza+cKCZ/vKXv9Tsd5Oenq4dO3boiy++0DPPPKPTTjtNkuRwOPT+++9r8uTJuummm2pt+NwQ7gMwu9YaA/6+DxBKIegcuxlbRUVFk69x7Dls9IlA5O8bENBcubm5OuOMM3To0KGazzp16qRPPvlEycnJjboG9wIEMm+Mgea68cYbdf7559f67N///nerficgSe3bt1ePHj1qfg0cOFATJkzQTTfdpE8//VRffPFFrRXczz77rObPn1/v9bgPINB4eww0l7fvA4RSCDrcgIDmYSICMygsLNTUqVO1Z8+ems86dOigdevWqW/fvo2+DvcCBCpvjYGWuOuuu2odf/PNN3U2jQZ8bcKECVq/fr2SkpJqPnv11Vf1zjvveOzPfQBtTVPHQEt48z5AKIWgk5CQUOs4Ly+vSefbbLY6N6B27dq1tCwgIDARgT+VlJRo2rRp+uGHH2o+S0xM1CeffNLkjfe5FyAQeXMMtMTJJ59c67X3LpdLO3bs8Nn3A/Xp2bOn/vKXv9T67B//+IfHvtwH0BY1ZQy0hDfvA4RSCDrH/itiRkZGk84/tn/79u1rDUigLWMiAn8pKyvTmWeeqc2bN9d8Fh8frw8//FDDhg1r8vW4FyDQeHsMtITValX37t1rfdbUCT3QWn7zm9/UOq7vH9C4D6CtauwYaAlv3gcIpRB0Bg4cWOt43759TTo/LS2t1vGJJ57Y4pqAQMFEBP5gt9t19tln65tvvqn5LDY2VmvXrtXJJ5/crGtyL0AgaY0x0FJRUVG1jpvz6BPQGjp27FgrHHK73UpPT6/Tj/sA2qrGjoGW8tZ9gFAKQWfw4MG1jr///nuVl5c3+vyvvvrquNcD2jomIvCliooKnXvuufryyy9rPouOjtb777+vcePGNfu63AsQKFprDLRUfn5+reMOHTr4qRKgrrCwsFrHVVVVdfpwH0Bb1pgx0FLeug8QSiHodO7cWSeddFLNsdPprPWDXkM2bNhQ6/iss87yVmlAQGAiAl+prKzU+eefX+vv3cjISK1Zs0aTJk1q0bW5FyAQtOYYaIn8/Pw6q0S6dOnip2qA2iorK+v8rJKSklKnH/cBtFWNHQMt4c37AKEUgtLMmTNrHS9cuLBR5+3atUvffvttzXFMTIymTZvm1doAM2MiAl+prq7WhRdeqHXr1tV8FhERodWrV+v000/3yndwL4CZ+WIMNNebb74pt9tdc5ySklLnUSjAXz799NNafz6jo6PVtWtXj325D6AtasoYaC5v3gcIpRCULr/8coWEhNQcr1y5Unv37m3wvEcffbTW8aWXXqrIyEiv1weYFRMR+ILT6dSll16qtWvX1nwWFhamFStWaPr06V77Hu4FMCtfjYHmyMnJ0UMPPVTrs/POO08Wi8VPFQH/x+1268EHH6z12Zlnnqnw8HCP/bkPoK1p6hhoDm/fBwilEJT69u2r2bNn1xxXV1drzpw5qqysrPecd955R4sWLao5Dg8P13333deaZQKmwkQEvuByuXT55ZfrnXfeqfksNDRUy5Yt07nnnuvV7+JeADPy1RjYvXu33n333Sadk52drXPPPVc5OTk1n4WHh+uuu+7yWl2AJD3zzDPKyspq0jkOh0PXXHNNrRVMknTjjTfWew73AZiVL8aAae4DBmBCP//8s5Genl7n19KlSw1JNb+6du3qsV96erqRl5fX4HckJibWut748eONnTt31upXWVlpPP3000ZYWFitvnfddVdr/icAPFq/fn2tP4epqalNvsauXbuMNWvWNOmcrKwsY9SoUbW+Ozw83Ni/f3+Tvx84niuvvLLWnzNJxj/+8Y96/64/3q+KiooGv497AczGV2Pg1/vJkCFDjEcffdTYs2dPvX1LS0uNZ555xkhJSalT2wMPPNAa/xkQ5IYOHWpERUUZl19+ubFmzRqjtLS03r7l5eXGG2+8YQwaNKjOn8/f/e53DX4X9wGYkS/GgFnuAxbDMIzmR1pA6+jRo4cyMjJadI3Zs2fX+lcMTzZs2KDp06erurq65jOLxaKRI0eqV69eKikp0ZYtW+q88v7cc8/V6tWray33BbwpMzNTTqezzufffPONZs2aVXPctWvXejfljI2N9bgJ+YYNGzRlyhQNGTJEV1xxhWbOnKm+fft6vEZZWZkWL16shx56qNa/iEjSAw88oHvvvbcpvy2gQd5cebd+/XqdeuqpDfbjXgAz8dUY+PVecLSEhAQNHjxYHTp0UFxcnGw2m37++Wdt377d4z1p/vz5euGFF7xWL/CrYcOGafv27TXHFotFffr0UY8ePdSuXTuFh4errKxMGRkZ2rFjhxwOR51r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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize = (12, 6.75))\n",
- "\n",
- "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.SFRD_II_avg, color=\"#E64D4E\", linewidth=3.0, label = 'Pop II')\n",
- "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.SFRD_III_avg, color=\"#0B92B1\", linewidth=3.0, label = 'Pop III')\n",
- "\n",
- "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.SFRD_II_avg + CoeffStructure.SFRD_III_avg, color=\"#665191\", linewidth=3.0, label = 'Pop II + III')\n",
- "\n",
- "plt.xlim([10, 35])\n",
- "plt.ylim(1e-7, 1e-1)\n",
- "\n",
- "plt.xlabel(r'$z$', fontsize = 30)\n",
- "plt.ylabel(r'$\\dot{\\overline{\\rho}}_*(z)$', fontsize = 30)\n",
- "\n",
- "plt.xticks(fontsize=30)\n",
- "plt.yticks(fontsize=30)\n",
- "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
- "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
- "plt.legend(fontsize=20, frameon = False)\n",
- "plt.tight_layout()\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "b1a55a1e",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAKZCAYAAABp1ZinAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA+vNJREFUeJzs/Xl8leWdP/6/zpqzZd/3hLAkJIGwL4pEUQFFUQRBxxZw+9T+cDpNp2NnOv1W24fVtjadjs7SaVW0o6MIuAsoSxARBQKBBJKwZN/3nJwtZ7t/f5zkSMg5WUhycid5PR+PPHLu+1z3db9P6x1yvXNd70siCIIAIiIiIiIiIiIiH5KOdwBERERERERERDT1MClFREREREREREQ+x6QUERERERERERH5HJNSRERERERERETkc/LxDoAmlqtXr2L//v348ssvcf78edTU1KC7uxtBQUGYPXs27rzzTjz22GOIjIwc71CJiIiIiIiISMQk3H2Phmrbtm144403Bm0XEBCA//iP/8Ajjzzig6iIiIiIiIiIaCLiTCkaspqaGgCARqPBvffei9tuuw2zZs2Cv78/qqur8d577+Gtt96CXq/H97//fSgUCmzevHmcoyYiIiIiIiIiMeJMKRqy73//+1iwYAEee+wx6HQ6j23eeecdPPTQQwCAsLAwVFZWQqPR+DJMIiIiIiIiIpoAmJSiUXf//ffjgw8+AAB8+OGHuPfee8c3ICIiIiIiIiISHe6+R6Nu1apV7teXLl0ax0iIiIiIiIiISKxYU2qSKy8vR0FBAerq6mAwGBAdHY3ExEQsX74cCoViTO5ptVrdr2Uy2Zjcg4iIiIiIiIgmNialfKisrAynTp3C6dOncerUKZw5cwZdXV3u9xMTE1FRUTEq99q9ezdyc3Nx4sQJj++HhIRg8+bN+NWvfoWwsLBRuWevw4cPu1+np6ePat9ERERERERENDmwptQYy8vLwwsvvIDTp0+jra1twLajkZQyGAx44okn8M477wypfWRkJN544w2sXr16RPftdfLkSSxbtgxOpxMxMTEoLy+HUqkclb6JiIiIiIiIaPLgTKkxVlBQgM8//9wn93I4HNi8eTM+++yzPufDw8Mxb948BAYG4urVqzh79ix6c5GNjY1Yv349Dh48iJtvvnlE99fr9di2bRucTicA4De/+Q0TUkRERERERETkEQudjxM/Pz+kpKSMap8/+9nP+iSkFAoFXn75ZdTU1ODAgQPYtWsX8vPzUVRUhGXLlrnbdXd347777kN9ff0N39vhcOChhx5CcXExAODBBx/E1q1bb/zDEBEREREREdGkxqSUDygUCmRlZeHxxx/Hn//8Z+Tn56Orqwt//etfR+0eZWVl+NOf/tTn3HvvvYcdO3b0m600e/ZsHDp0qE9iqrW1Fc8999wN3VsQBDz22GPuhNjChQvx6quv3lBfRERERERERDQ1sKbUGGtvb4darYZKper3Xl5eHm699Vb38UhqSm3duhVvvvmm+3jbtm14/fXXB7zm0qVLyMzMdO+WJ5fLUVpaimnTpg35voIg4KmnnsKf//xnAMDcuXNx+PBhhISE3MCnICIiIiIiIqKpgjOlxlhwcLDHhNRoMpvN2L17d59zzzzzzKDXzZw5E/fdd5/72G634+233x7WvZ9++ml3QiojIwMHDx5kQoqIiIiIiIiIBsWk1CRw4MABmEwm9/GyZcuQmpo6pGu3b9/e53jv3r1Dvu/TTz+N//iP/wAApKen4/DhwwgLCxvy9UREREREREQ0dTEpNQns37+/z3F2dvaQr12xYgXk8u82YTx79iwaGxsHve7v//7v8corrwD4LiEVHh4+5PsSERERERER0dTGpNQkUFRU1Of42gLmg9FqtcjMzOxz7sKFCwNe86Mf/Qgvv/wygO8SUhEREUO+JxERERERERERk1KTQHFxcZ/j6dOnD+v6lJSUPscXL1702vbHP/4x/v3f/x2Aaxc/JqSIiIiIiIiI6EbIB29CYtbW1oa2trY+5xISEobVx/XtL1++7LHdM888g3/7t38DAISFheHll19GU1MTmpqavPYdHByM2NjYYcVDRERERERERJMfk1ITXEdHR59jjUYDrVY7rD6un+nU2dnpsd27777rft3S0oJVq1YN2vfWrVuxc+fOYcVDRERERERERJMfk1ITnMFg6HOsVquH3cf113R1dY0optHidDrx7LPP4i9/+QskEskN97Njxw7s2LFjFCMjIiIiIiIi8r1XXnnFvenYjRAEAU888QSeffZZSKXjX9GJSakJ7vqklEqlGnYf1yelru+zV0VFxbD7Holnn30Wv/71r0fcz89//nP8/Oc/H4WIiIiIiIiIiCa23nH2r371q3GOhEmpSedGZhSNZBbSWPrLX/7ifh0dHX3D/XCmFE0WqampqK+vR3R0NEpKSsY7HKJxx2eCqC8+E0R98ZmgyWikM6Xq6+sBuMbbTErRiOl0uj7HZrN52H1cf831fY6X3mRZdHQ06urqxjkaovHXO71WKpUiICBgnKMhGn98Joj64jNB1BefCZqM/uVf/gX/8i//csPXx8TEoL6+XjSTU8Z/ASGNyGROShERERERERHR5MWZUhNcYGBgn2OTyQSj0TisHfiampr6HAcFBY1GaKOmoaEBcXFx/c7n5OQgJydnHCIiIiIiIiIiEq/c3Fzk5ub2O9/Q0DAO0XjHpNQEFxoaiuDgYLS3t7vPVVVVIS0tbch9VFZW9jmeMWPGqMU3GgRBQG1tbb/zer1+HKIhIiIiIiIiEje9Xu9xHC02TEpNAmlpafj666/dx1euXBlWUqqsrKxff2IikUgQExPT7zzXhRMRERERERH1FxAQgNjY2H7n6+rqIAjCOETkGZNSk0BGRkafpNSJEydwzz33DOlao9GI8+fP9+tPTKKiolBTUzPeYRARERERERFNCN7K3fQWOhcLFjqfBNasWdPnOC8vb8jXHjt2DHa73X08b948REZGjlZoREREREREREQeMSk1CaxevRpqtdp9fOLECZSUlAzp2p07d/Y5vv/++0cztFHRW+j8+i9PRduIiIiIiIiIprrc3FyP42gWOqdRp9FosHHjRvztb39zn/vtb3+L119/fcDrLl26hPfff999LJfL8fDDD49ZnDeKhc6JiIiIiIiIho6Fzsmnnn32Wbzzzjuw2WwAXDOg7r//ftx7770e21ssFmzfvh1Wq9V97rHHHkNKSopP4h0OFjonIiIiIiIiGjoWOie3mpqaPnWbel0/bc5ut6OiosJjHzqdDmFhYV7vMW3aNPzoRz/CSy+95D63ceNG5Obm4sknn4RSqXSfLy4uxuOPP96nOHpoaCh++ctfDvUj+RQLnRMREREREREN3UQpdM6klA/cfPPNqKysHLRdbW0tkpOTPb63devWfvWfrvfiiy/iwoUL2LdvHwDAZrPh6aefxq9//WvMnz8f/v7+KCsrw5kzZ/pkRpVKJd5//31ER0cP/UMREREREREREY0Ak1KTiEwmw65du/D444/j3XffdZ9vamrC/v37PV4TERGBN954AytWrPBVmERERERERERE3H1vstHp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je33FRAQMN6hERERERERjZmYmBjcf//9AIADBw7gtdde69fGarXi0Ucfhc1mAwDs2LFjwD5//etfo7S0tN/54uJiPP/88wBcY7D169ePNHwaRwEBAR7H0dHR0eMdWh+cKUWiV1JSwgQUERERERFNSX/84x9x6NAhtLe34/HHH8fx48exZcsWhISEoKSkBC+99BIKCgoAAA8++CDWrl3rta8ZM2agqakJS5cuxTPPPIPs7GwAQF5eHl588UV0dnYCAF5++WUolcqx/mg0hryVu9Hr9QgUUb04JqWIiIiIiIiIRCouLg6HDh3CunXrUFdXh9dee83jjKkNGzbgjTfeGLCvmJgY/PGPf8SDDz6If/7nf+73vlQqxe9+9zs88MADoxY/0UC4fI+IiIiIiIhIxObNm4fS0lK88MILWLJkCYKCgqBUKhETE4MNGzbgo48+wp49e6BSqQbt6+6778bp06exfft2JCYmQqlUIiIiAg888AC++uor/OQnP/HBJyJykQi9VcyIRKZ3WmFnZyeX7xEREREREd2g7OxsHD16FCtXrkReXt54h0PjSGzjbM6UIiIiIiIiIiIin2NSioiIiIiIiIiIfI5JKSIiIiIiIiIi8jkmpYiIiIiIiIiIyOeYlCIiIiIiIiIiIp+Tj3cARERERERERDR2uOMeiRWTUiR6qampkEr7T+rLyclBTk7OOEREREREREREJF65ubnIzc3td97pdI5DNN4xKUWiV19f7/G8Xq/3cSRERERERERE4qfX61FbWzveYQyKSSkSvejoaI8zpQICAsYhGiIiIiIiIiJxCwgIQGxsbL/zTqfT68SP8SARBEEY7yCIPNHr9QgMDERnZycTUEREREREREQjJLZxNnffIyIiIiIiIiIin2NSioiIiIiIiIiIfI5JKSIiIiIiIiIi8jkmpYiIiIiIiIiIyOeYlCIiIiIiIiIiIp9jUoqIiIiIiIiIiHyOSSkiIiIiIiIiIvI5JqWIiIiIiIiIiMjnmJQiIiIiIiIiIiKfY1KKiIiIiIiIiIh8jkkpIiIiIiIiojGSl5cHiUTi8UutViM+Ph7r1q3DX//6V1gslvEOd8R6P1t2drbH97Ozs91tPHn22Wfd7+fl5Y1doCQKTEoRERERERERjQOLxYKamhp8+umneOKJJ5CVlYVLly6Nd1hEPsOkFBEREREREZEP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pl14kpKSopSUFJdz6enpSk9P165du/Tee+8pISFBs2bN0pNPPqnw8PA6xQ3Ul7KyMmVlZWn37t364osv9Morr8hms5WXd+7cWS+88EKF19NPoLGpa5vwxBd9BMv34BfO3MSzRYsWNbo+PDzcbdPpnJycuoYFGEpKSooWLFigXbt2KTs7W6WlpS4dyK233qr27dvr/vvvV15enq/DBSr08MMP6/jx4+XH0dHRmjlzZqXX0E+gsatNu6it/Px8Pffccxo8eDBLlOAz9913n0wmU/lXQECAWrRoofPOO0/PPPOMy+B77Nix+v777yv93U8/AX9X322ituq7j2CmFPzCmQPokJCQGt8jJCTE5dWtRn8LAdAQTnciy5cv16effqrevXv7OiTAxWeffeb2qd7f//73Kmf40U+gMattu/gjq9WqUaNG6YILLlC/fv3Utm1bRUREKC8vT4cPH9a6dev09ttvKz09vfyavXv36oILLtCGDRvcZokARjB58mTdeeeduuiii6qsSz+BpqAmbeKPfNlHkJSCXzizEznzU4rqCAkJUVZWVoX3BPwVAw00Ftu3b9dNN93kcu6iiy7S7bffXuW19BNorOrSLk7729/+plmzZlX4ifmAAQM0efJkPfnkk3r88cf11FNPyel0Svr9jWVXXnmlNm/eLJPJVPtvBGgAK1askN1uV3BwsM4999xK69JPoCmoSZs4zdd9BMv34Jdq8wPPH1JojP72t78pNTVVq1ev1qOPPqpJkyZp4MCB6tq1a3kH8swzz+jQoUN66KGHXNrB6U7kdKcC+NLhw4d16aWXuvyB36FDB7377rte+51PPwGjqa928eijj1ZrCUdwcLD+8Y9/aN68eS7nk5KS9MEHH1Q/cKAe/PWvfy3f3yYlJUW7du3SunXrNG/ePJ1//vmSpNLSUn355Zc677zzdNddd7ls8FwV+gn4m4ZqE77uI0hKwS+cuYFaYWFhje9x5jVs3InGwNedCFAf0tPTdeGFFyo1NbX8XKtWrfTNN98oLi6uWvegn0BjUx/torbuvPNOTZ482eXciy++2KDPBM7UrFkzdezYsfyrZ8+eGjVqlO666y59++23Wrduncts7/nz52v27NkV3o9+Av6uvttEbdV3H0FSCn6BTgSoHww0YDSZmZm64IILtHfv3vJzsbGxWrVqlbp161bt+9BPoDGp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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize = (12, 6.75))\n",
- "\n",
- "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.J_21_LW_II, color=\"#E64D4E\", linewidth=3.0, label = 'Pop II')\n",
- "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.J_21_LW_III, color=\"#0B92B1\", linewidth=3.0, label = 'Pop III')\n",
- "\n",
- "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.J_21_LW_II + CoeffStructure.J_21_LW_III, color=\"#665191\", linewidth=3.0, label = 'Pop II + III')\n",
- "\n",
- "plt.xlim([10, 35])\n",
- "plt.ylim(1e-3, 1e2)\n",
- "\n",
- "plt.xlabel(r'$z$', fontsize = 30)\n",
- "plt.ylabel(r'$J_{21}$', fontsize = 30)\n",
- "\n",
- "plt.xticks(fontsize=30)\n",
- "plt.yticks(fontsize=30)\n",
- "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
- "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
- "plt.legend(fontsize=20, frameon = False)\n",
- "plt.tight_layout()\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "a85d3ff1",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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/LLOOeccJSQkKCEhQb1799aSJcH9SPQvvvhCw4cPV4sWLWQYhhYsWFDquJdeeklt2rRRdHS0evTooVWrVlVqP5MmTdLUqVOD0DGAuiqiXVs1evppRXTsaH3DNJXxxhtKe2E6D0AHAAAAwkSNhFKmaeqNN95Qhw4dNGXKFGVkZAR+e22apjweT+D72bNn67rrrpPf76+JVsJeq1at9Pjjj2vdunVat26dLrroIl1++eX64YcfSh3/1VdfyVvKBdmWLVu0f//+UtfJyspS165dNX369DL7mD17tu68805NnjxZKSkp6tu3r4YOHao9e/YExvTo0UNdunQp8dq3b58WLlyojh07qmPxC8lydOrUSa1atSrxmjZtWoW3AaD2cTdooIaPParofv1KvJfz6ac8AB0AAAB13rRp00q9nu7UqZPdrVkYZpDvdVi6dKnuvvtu/fDDD4Eg6uTMqCZNmujRRx/VkCFDdMkll+jHH38MvD9y5EjNnj07EFihbA0aNNBTTz2lm2++2VL3+/3q3r27OnTooFmzZsntdkuStm7dqv79++uuu+7S3XffXe62DcPQ/PnzNXLkSEu9V69e6t69u15++eVArXPnzho5cmSFZj/dd999evvtt+V2u5WZmSmv16u//vWveuCBB0qMTU9PV2JiYpnbmjJlih588MHT7hNA7WaapjLff1+Zb79T4j13kyZK+vvfFJGcbENnAAAAgL0efPBBPfTQQ2W+n5aWpoSEhBB2VLqgzpS65JJLdOmll+r7778P3J4nSREREfp//+//adu2bbrlllvUqlUrff755+rSpYukwguLBQsW6PLLL1deXl4wW6pVfD6fZs2apaysLPXu3bvE+y6XS4sXL1ZKSopuuOEG+f1+/fTTT7rooos0YsSI0wZSZcnPz9f69etLPIB+0KBB+vrrryu0jalTp+rnn3/Wrl279PTTT2v8+PGlBlJFNW/eXC1btizxcsKBA8B+hmGo3jXX8AB0AAAAoJiEhIRSr6ebN29ud2sWQZ2W9Nlnn8kwjMDMKNM0NXLkSD399NNq27atZWyTJk20cuVKXXLJJUpJSZFUOMvq0ksv1aJFixQbGxvM1sLad999p969eys3N1fx8fGaP3++zjrrrFLHtmjRQsuXL1e/fv107bXXavXq1Ro4cKBmzJhR5f0fPnxYPp+vxMPqmzZtWuYt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OUIpAAAAAAAAhByhFAAAAAAAAEKOUAoAAAAAAAAhRygFAAAAAACAkCOUAgAAAAAAQMgRSgEAAAAAACDkCKUAAAAAAAAQcoRSAAAAAAAACDlCKQAAAAAAAIQcoRQAAAAAAABCjlAKAAAAAAAAIUcoBQAAAAAAgJAjlAIAAAAAAEDIEUoBAAAAAAAg5AilAAAAAAAAEHKEUgAAAAAAAAg5QikAAAAAAACEHKEUAAAAAAAAQo5QCgAAAAAAACFHKAUAAAAAAICQI5QCAAAAAABAyBFKAQAAAAAAIOQIpQAAAAAAABByhFIAAAAAAAAIOUIpAAAAAAAAhByhFAAAAAAAAEKOUAoAAAAAAAAhRygFAAAAAACAkCOUAgAAAAAAQMgRSgEAAAAAACDkCKUAAAAAAAAQcoRSAAAAAAAACDlCKQAAAAAAAIQcoRQAAAAAAABCjlAKAAAAAAAAIUcoBQAAAAAAgJAjlAIAAAAAAEDIEUoBAAAAAAAg5AilAAAAAAAAEHKEUgAAAAAAAAg5QikAAAAAAACEHKEUAAAAAAAAQo5QCgAAAAAAACFHKAUAAAAAAICQI5QCAAAAAABAyBFKAQAAAAAAIOQIpQAAAAAAABByhFIAAAAAAAAIOUIpAAAAAAAAhByhFAAAAAAAAEKOUAoAAAAAAAAhRygFAAAAAACAkCOUAgAAAAAAQMgRSgEAAAAAACDkCKUAAAAAAAAQcoRSAAAAAAAACDlCKQAAAAAAAIQcoRQAAAAAAABCjlAKAAAAAAAAIUcoBQAAAAAAgJAjlAIAAAAAAEDIEUoBAAAAAAAg5AilAAAAAAAAEHKEUgAAAAAAAAg5QikAAAAAAACEHKEUAAAAAAAAQo5QCgAAAAAAACFHKAUAAAAAAICQI5QCAAAAAABAyBFKAQAAAAAAIOQIpQAAAAAAABByhFIAAAAAAAAIOUIpAAAAAAAAhByhFAAAAAAAAEKOUAoAAAAAAAAhRygFAAAAAACAkCOUAgAAAAAAQMgRSgEAAAAAACDkCKUAAAAAAAAQcoRSAAAAAAAACDlCKQAAAAAAAIQcoRQAAAAAAABCjlAKAAAAAAAAIUcoBQAAAAAAgJAjlAIAAAAAAEDIEUoBAAAAAAAg5AilAAAAAAAAEHKEUgAAAAAAAAg5QikAAAAAAACEHKEUAAAAAAAAQo5QCgAAAAAAACFH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xozRK6+8wm8YYZuaDGvtPoEAFXHttdfqvffeq9K6l112mf71r3+padOmlV6X8wWcKtTHBOcKhItWrVpp7969lV7P7XbrT3/6k5566qlKzRLhPAGnC9UxYfd5gplSNmjTpo3atGljdxtBsXHjRn3yySch2dfKlSs1cuRIy6cTGoah7t27q23btjp+/LhSUlJ0+PDhwPvvvPOO0tPTtWDBArlcfNgkQqMyYS1Q223durXUesuWLdWhQwc1bdpUBQUF2rFjh7755hvLbwE//PBD9evXT59//rmaNWtW4X1yvoCT2XFMAOEoNjZW7dq1U+vWrZWQkCC/36+jR4/qu+++s3w4lc/n07PPPqtdu3Zp7ty5crvdp9025wmEo5o8JmxlAtXwzDPPmJJKvKKiosx27dpZasnJyVXez88//2wmJSVZtnf++eebmzZtsozLzc01n3vuOTMiIsIy9r777qvmTwpUXFnHRWmv6hwXFd1HWa+dO3cG7WcGytKjR4/An7lu3bqZL7zwgrl9+/ZSx/7yyy/mhAkTSvxZveCCC0y/31+h/XG+gNOF+pgoul6vXr3MnTt3Vurl9XqD+eMDZerYsaM5YsQI8+WXXza/+eYb0+fzlTl29erV5sCBA0scG08++eRp98N5AuEiVMeE3ecJQilUyzPPPGNGRESY5557rnnLLbeYr7zyirl+/XozPz/fXLFiRdAuvm+66SbLtvr06WPm5OSUOX7+/PklQrJdu3ZVef9AZYQqrLX7BAJURM+ePc1LL73UXLt2bYXXefHFF0scP++9916F1uV8AacL9TFRdJ3+/ftXsWug5uXn51dqvM/nM6+77jrLn/HExEQzNze33PU4TyBchOqYsPs8QSiFajl69GiZf4kHK5TaunWr6Xa7A9uJjIw0t27detr1xo4da9n/jTfeWKX9A5UVqrDW7hMIUBFVnZF31VVXWf6MDxs27LTrcL5AOAjlMWGanCtQu6WlpZlxcXGWP+dLliwpczznCdR2lT0mTNP+8wQ3w6JakpKSFB0dXaP7ePfdd+Xz+QLLV155pTp06HDa9e655x7L8pw5c5Sbmxv0/oDixo4dq/T0dKWkpOi1117ThAkT1L17d0VERNjdGhByVX3w5e23325ZXrFixWnX4XyBcBDKYwKo7RISEnTBBRdYatu3by9zPOcJ1HaVPSacgFAKjjd/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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "plt.figure(figsize = (12, 6.75))\n",
- "\n",
- "plt.semilogy(CoeffStructure.zintegral,CoeffStructure.xe_avg, color=\"#E64D4E\", linewidth=3.0)\n",
- "\n",
- "plt.xlim([10, 35])\n",
- "plt.ylim([1e-4, 1e-3])\n",
- "\n",
- "plt.xlabel(r'$z$', fontsize = 30)\n",
- "plt.ylabel(r'$x_e$', fontsize = 30)\n",
- "plt.xticks(fontsize=30)\n",
- "plt.yticks(fontsize=30)\n",
- "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
- "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
- "# plt.legend(fontsize=20, frameon = False)\n",
- "plt.tight_layout()\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "77eb7769",
- "metadata": {},
- "source": [
- "## Step 4: Fluctuations"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "1b89f7d8",
- "metadata": {},
- "source": [
- "The last structure to run is Power_Spectra, which uses our lognormal and log-chisquare prescription to compute the statistics of IGM fluctuations in the form of two-point functions."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "f80f6e74",
- "metadata": {},
- "outputs": [],
- "source": [
- "RSDMODE = 1\n",
- "\n",
- "PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, ClassyCosmo, CorrFClass, CoeffStructure, RSD_MODE = RSDMODE)\n",
- "klist = CorrFClass._klistCF"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "b53d6fbd",
- "metadata": {},
- "source": [
- "## Plotting Results"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "id": "548b2917",
- "metadata": {},
- "outputs": [],
- "source": [
- "from scipy.interpolate import RegularGridInterpolator\n",
- "\n",
- "interp = RegularGridInterpolator((zlist, klist), PS21.Deltasq_T21, method = 'cubic', bounds_error=False, fill_value=0)\n",
- "interpLin = RegularGridInterpolator((zlist, klist), PS21.Deltasq_T21_lin, method = 'cubic', bounds_error=False, fill_value=0)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 13,
- "id": "9a9a4555",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAKZCAYAAABp1ZinAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA77VJREFUeJzs3Xd8U1X/B/DPzWrSdA9KKZsCZe8NZS9BhiKgbBUnivbn9hFx66PWRwVFxYGIIBtZsvcqq0CZZbXQlu42Hdm5vz8qhZC0dCZt+nm/Xrxszjn33G+wt/R8c4YgiqIIIiIiIiIiIiIiB5I4OwAiIiIiIiIiIqp5mJQiIiIiIiIiIiKHY1KKiIiIiIiIiIgcjkkpIiIiIiIiIiJyOCaliIiIiIiIiIjI4ZiUIiIiIiIiIiIih2NSioiIiIiIiIiIHI5JKSIiIiIiIiIicjiZswMg12exWDB37lz89NNPEATBpn7WrFmYNWuWEyIjIiIiIiIicr558+Zh3rx5NuWiKGLmzJmYO3cuJBLXm1ckiKIoOjsIcm1z5szBBx984OwwiIiIiIiIiKqld955B++//76zw6hwTEpRpQsODsatW7cKv74XZ0qRo4SFhSEpKQnBwcG4cOGCs8OhGo7fj1RV8HuRqgp+L1JVwe9FcoaiZkolJSUBAGrXrl34tSvh8j2qdLeX7AUHByMxMdHJ0VBNdnu6q0QigZeXl5OjoZqO349UVfB7kaoKfi9SVcHvRXKGt956C2+99ZZNeZ06dZCUlGR3KxxX4HoLEomIiIiIiIiIqMpjUoqIiIiIiIiIiByOSSkiIiIiIiIiInI4JqWIiIiIiIiIiMjhmJQiIiIiIiIiIiKHY1KKiIiIiIiIiIgcjkkpIiIiIiIiIiJyOCaliIiIiIiIiIjI4ZiUIiIiIiIiIiIih2NSioiIiIiIiIiIHI5JKSIiIiIiIiIicjgmpYiIiIiIiIiIyOGYlCIiIiIiIiIiIodjUoqIiIiIiIiIiBxO5uwAyPXNmjULb7/9NmbNmuXsUKiGi4iIgEajgZeXl7NDIeL3I1UZ/F6kqoLfi1RV8HuRqhJXH08LoiiKzg6CXJtGo4G3tzeys7P5g52IiIiIiIiohFx9PM3le0RERERERERE5HBMShERERERERERkcMxKUVERERERERERA7HpBQRERERERERETkck1JERERERERERORwTEoREREREREREZHDMSlFREREREREVMNdv34dgiBAEAT89ttvNvW//fZbYf3169cdHh+5JialiIiIiIiIiEpo9+7dhckZQRAwceLE+14zffr0wvZEdAeTUkRERERERERltHz5cpw5c8bZYRBVS0xKEREREREREZWRKIp49913nR1GpZs+fTpEUYQoimjYsKGzwyEXwaQUERERERERURkEBAQAANasWYMTJ044ORqi6odJKSIiIiIiIqIymD17Ntzc3ACgRsyWIqpoTEoRERERERERlUHdunXx1FNPAQA2bNiAI0eOlLmv1NRU/Oc//0GHDh3g4+MDpVKJhg0bYsqUKdi/f3+x1zZs2BCCIGD69OkAgAsXLmDmzJlo2LAh3NzcEBQUhLFjx+Lw4cNlju9+p+/169cPgiCgX79+AICEhAREREQgNDQUKpUK/v7+GDp0KDZv3lyi+2VmZuLDDz9Ejx49EBAQADc3N9SpUwejR4/G6tWri702Ly8Pf/31F5588km0b98e3t7ekMvlCAwMRN++ffHFF18gNze32D5uv9e5c+cCAHbu3IlHHnkE9erVg1wu5xLGCiJzdgBERERERERE1dWbb76JhQsXQqvVYs6cOdiyZUup+9i6dSseeeQRaDQaq/K4uDjExcXhjz/+wPPPP49vvvkGEknxc0tWr16NKVOmID8/v7AsJSUFa9euxfr167FkyRJMmDCh1DGWxv79+zFmzBikp6cXlul0OmzduhVbt27F559/jldeeaXI6zdt2oRJkyYhKyvLqjwpKQl///03/v77b4wYMQLLli2Dh4eHzfUjRozAnj17bMrT0tKwd+9e7N27F9999x02bdqEsLCw+76ft99+Gx9//PF921HpcaYUERERERERURkFBwfj2WefBVCQXLrfrKZ7RUdH48EHH4RGo4FcLsdLL72EXbt2ISoqCj/88AMaNWoEAJg/fz7efPPNYvs6ffo0Jk2ahKCgIMybNw+HDx/GoUOHMHfuXCiVSpjNZjz11FNITU0t25stgaSkJIwdOxZSqRSffvop9u/fj6ioKERGRsLHxwdAQSLv7Nmzdq/ftm0bRo0ahaysLDRs2BCfffYZdu/ejRMnTmD9+vWYPHkyAGDjxo2YNm2a3T5MJhPatGmDt99+G2vWrMGRI0dw+PBh/PXXX5g4cSIkEgmu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ElK1atXCunXr0KdPH0eHS0RERERERFWAUqnEK6+8AqBgRc/EiRORl5dXZPucnBzMmzfPqqxp06aFXy9atMjudd9//z3Wrl1b/oCpxuNMqSrKw8MDy5Ytw7hx4/Dll1/i8OHDdtv5+flhwoQJeO+99xAYGOjgKImIiIiIiGqu6Ojo+66EAQpmMIWGhlZ+QABee+017NixAzt27MDmzZvRsmVLPPPMM+jRowd8fHyQk5ODixcvYvfu3Vi7di2USiVmzZpVeH2HDh3QunVrxMTE4Pvvv0dWVhYmTZqE4OBg3LhxA3/88QdWrlyJXr164cCBAw55T+S6mJQqhaL2iapM48aNw7hx43Dt2jWcOHECiYmJyMvLQ+3atdGgQQP06tXLap8pIiIiIiIicox169Zh3bp1923366+/OiwpJZVKsX79ejzzzDP4/fffER8fj7feeqvI9veevCcIAhYvXowBAwYgMzMTS5cuxdKlS63atGnTBitWrECdOnUq5T1QzcGkVDXRqFGjIvepIiIiIiIiIrpNpVJh0aJFePHFF/Hzzz9j7969uHnzJvLy8uDh4YGGDRuiU6dOGD58OEaOHGlzffv27REdHY1PPvkEmzdvRmJiIjw9PREaGorx48fj+eefh1KpdMI7I1cjiHdvTERUCW5vzJadnc2NzomIiIiIiIhKyNXH09zonIiIiIiIiIiIHI5JKSIiIiIiIiIicjgmpYiIiIiIiIiIyOG40Tk5TFhYGCQS2zxoREQEIiIinBARERERERERkfNFRkYiMjLSptxisTghGsdhUoocJikpyW65RqNxcCREREREREREVYdGo0FCQoKzw3A4JqXIYYKDg+3OlHLFEwSIiIiIiIiISsrLywshISE25RaLpcgJHq5AEEVRdHYQ5Npc/QhLIiIiIiIiosrg6uNpbnROREREREREREQOx6QUERERERERERE5HJNSRERERERERETkcExKERERERERERGRwzEpRUREREREREREDsekFBERERERERERORyTUkRERERERERE5HBMShERERERERERkcMxKUVERERERERERA7HpBQRERERERERETmczNkBUM0RFhYGicQ2DxoREYGIiAgnRERERERERETkfJGRkYiMjLQpt1gsTojGcZiUIodJSkqyW67RaBwcCREREREREVHVodFokJCQ4OwwHI5J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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#choose a z to plot\n",
- "kchoose=0.3 \n",
- "zlistHighRes = np.geomspace(zlist[0], zlist[-1], 1000)\n",
- "\n",
- "powerSpectrum = interp((zlistHighRes, kchoose))\n",
- "powerSpectrumLin = interpLin((zlistHighRes, kchoose))\n",
- "\n",
- "plt.figure(figsize = (12, 6.75))\n",
- "\n",
- "plt.semilogy(zlistHighRes, powerSpectrum, color=\"#E64D4E\", linewidth=3.0, label = 'Nonlinear')\n",
- "plt.semilogy(zlistHighRes, powerSpectrumLin, color=\"#0B92B1\", linewidth=3.0, linestyle = 'dashed', label = 'Linear')\n",
- "\n",
- "plt.xlim([10, 25])\n",
- "plt.ylim([1,200])\n",
- "\n",
- "plt.xlabel(r'$z$', fontsize = 30)\n",
- "plt.ylabel(r'$\\Delta^2_{21}\\,\\rm[mK^2]$', fontsize = 30)\n",
- "\n",
- "plt.xticks(fontsize=30)\n",
- "plt.yticks(fontsize=30)\n",
- "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
- "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
- "plt.legend(fontsize=20, frameon = False)\n",
- "plt.tight_layout()\n",
- "\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "id": "f5ae3002",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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sCFefvllfPnll0VtI0aMgFqtxrRp06BQKIraz58/jylTppjUnQoICMAHH3xQ2o9kd0lJSahbt65Ze0REBCIiIhwQEREREREREZHtqNVqqNVqs/b7cweugkkpJxEeHo7r16+XOC4+Ph6hoaEW+yZMmGBW/+l+n332GWJiYrBlyxYAgE6nw4svvoiPPvoIHTp0gLe3N2JjY3HixAmTyv0KhQLr169HUFBQ6T+UnYmiaPFoTI1G44BoiIiIiIiIiGxLo9FYfO51VUxKVTNSqRSrV6/GlClTsGrVqqL2lJQUbN261eI9NWvWxLJly9CzZ097hVkugiCgTp06Zu3OemQrERERERERUVmoVCoEBwebtSckJJhsLHEVTEpVQ15eXli5ciVGjBiBr776CocOHbI4zt/fH6NHj8acOXNQo0YNO0dZdrVr1+YRwERERERERFRlWStPU6dOHSQmJjogoophUspJWKsTVZlGjBiBESNGIC4uDidOnEBCQgJyc3NRu3ZthISEoEePHiZ1poiIiIiIiIiIbIVJKUJoaKjVOlWuYMaMGZg5cyZmzJjh6FCIiBwiIiICGo2GrysTUbXF74NEVN256nOxILriS4dE99BoNPDx8UFWVhZ/ECEiIiIiIqJqx1Wfi7lTiqqMsLAwSCQSs3Zr79wSERERERERuRK1Wg21Wm3WbjQaHRBNxTEpRVWGtaJuGo3GzpEQERERERER2Z5Go0F8fLyjw7AZJqWoyggKCrK4U8qVti4SERERERERWaNSqRAcHGzWbjQaXfL0PdaUIpfnqu/OEhEREREREdmCqz4Xm28rISIiIiIiIiIiqmRMShERERERERERkd0xKUVEREREREREpXbt2jUIggBBELB06VKz/qVLlxb1X7t2ze7xketgUoqIiIiIiIioEkRGRhYlZwRBwJgxY0q8Z+LEiUXjiao6JqWIiIiIiIiI7GD16tU4c+aMo8MgchpMSlGVERYWhrp165r9o1arHR0aERERERERRFHEBx984OgwKt3EiRMhiiJEUUSDBg0cHU6VolarLT73hoWFOTq0cpE5OgAiW0lMTLTYrtFo7BwJERERERGRqcDAQKSmpmL9+vU4ceIEOnTo4OiQyAVpNBrEx8c7OgybYVKKqoygoCBIJOab/1QqlQOiISIiIiIi+s/LL7+Mjz/+GIWFhfjggw+wceNG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4XllMXPJyMjA7t27q73/999/L2r369evzD4DBgyAUqk0tffu3YuYmJjaJ0lERERWj0UpIiIisjuRkZGidsmiFAA4OTlh+/bt6Nixoyn266+/Yvbs2RbJz9zGjh2LI0eOiH7GjRtXr9dctGiRqPBXkfj4eHz55Zei2JQpU8rs5+HhgSeffNLUNhqNePHFF+ueKBEREVktFqWIiIjI7pSe5Lzk8L17PDw8sGfPHgQHB5ti69atw1tvvVXv+ZmbSqVCv379RD+lh8eZ2+nTpzFv3rxK98nPz8ekSZOQk5NjivXt27dMkfCeN998Ew4ODqb277//jpdffrlaxa9717Pl+cGIiIgaGhaliIiIyO6ULEoFBASgUaNG5e7XqFEj7NmzB97e3qbY0qVL8emnn9Z7jrbs3sp5y5cvx5NPPomEhIQy+0RERKB///44cuSIKaZSqbBmzZoKz9u2bVuEhYWJYp9++ikGDBiAAwcOVFicOnv2LN566y0EBwcjKiqqNm+JiIiIJKCsehciIiIi25Gbm4urV6+a2hX1yrmnbdu22LlzJ4YMGYLc3FwAwCuvvAJfX19MmjSpXnO1VbNnz8bu3btx5swZfP/999i8eTO6d++O4OBgFBUV4fLly6L/BvesXLlSNGSyPC+88AKio6PxySefmGJHjx7F4MGD4e3tjS5dusDHxwcGgwFpaWk4d+4ctFqt2d8jERER1T8WpYiIiMiulJ7kvLyhe6X17NkTW7duxahRo6DX6yEIAqZOnQpvb28MHz68PtO1SY6Ojti1axeGDx+O8+fPw2g04sSJEzhx4kS5+zs4OGDlypXVnrMrLCwM7dq1wyuvvIK8vDxTPD09Hfv27TPLeyAiIiLpcfgeERER2ZXS80lV1VPqnhEjRmD9+vWQyWQAgOLiYjz++OM4efKk2XO0B4GBgTh+/DjeeecdBAUFlbuPQqHAiBEjcObMGTzzzDM1Ov+sWbMQExODV199FYGBgZXu6+joiKFDh+Kbb75B7969a3QdIiIikg57ShEREZFdeemll/DSSy/V6tinnnoKTz31lJkzqp3Y2Nh6O7ePjw8EQajzeZydnbF48WIsXLgQ4eHhiI6ORmJiIpycnBAUFIQHHngAfn5+tT6/n58fli9fjuXLl+PChQu4cOEC0tLSkJWVBbVaDR8fH7Rp0wadO3eGWq2u8/shIiIiy2JRioiIiIjqRC6Xo2/fvujbt2+9XaNjx45VzkdFREREtoVFKSIiIqJ6dOfOnTK9ngICAuDk5CRNQmQzSv+7iY+PlyYRIiKiesKiFBEREVE9eu211/Daa6+JYgcOHMDAgQOlSYhsRvPmzaVOgYiIqF5xonMiIiIiIiIiIrI4FqWIiIiIiIiIiMjiOHyPiIiIyIymTp2KqVOnSp0G2QFzrJBIRERkzdhTioiIiIiIiIiILI5FKSIiIiIiIiIisjiZwH7BRERERERERERkYewpRUREREREREREFseiFBERERERERERWRyLUkREREREREREZHEsShERERERERERkcWxKEVERERERERERBbHohQREREREREREVkci1JERERERERERGRxLEoREREREREREZHFsShFREREREREREQWx6IUERERERERERFZHItSRERERERERERkcSxKERERERERERGRxf0/+MuWrQBd0gsAAAAASUVORK5CYII=",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#choose a z to plot\n",
- "zchoose=16\n",
- "klistHighRes = np.geomspace(1e-4, 1e1, 1000)\n",
- "\n",
- "powerSpectrum = interp((zchoose, klistHighRes))\n",
- "powerSpectrumLin = interpLin((zchoose, klistHighRes))\n",
- "\n",
- "plt.figure(figsize = (12, 6.75))\n",
- "\n",
- "plt.loglog(klistHighRes, powerSpectrum, color=\"#E64D4E\", linewidth=3.0, label = 'Nonlinear')\n",
- "plt.loglog(klistHighRes, powerSpectrumLin, color=\"#0B92B1\", linewidth=3.0, linestyle = 'dashed', label = 'Linear')\n",
- "\n",
- "plt.xlim([1e-3,1e0])\n",
- "plt.ylim([1e-1,1e3])\n",
- "\n",
- "plt.xlabel(r'$k\\,\\rm [Mpc^{-1}]$', fontsize = 30)\n",
- "plt.ylabel(r'$\\Delta^2_{21}\\,\\rm[mK^2]$', fontsize = 30)\n",
- "plt.xticks(fontsize=30)\n",
- "plt.yticks(fontsize=30)\n",
- "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
- "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
- "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
- "plt.legend(fontsize=20, frameon = False)\n",
- "plt.tight_layout()\n",
- "\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "19b8014b",
- "metadata": {},
- "source": [
- "For questions, don't hesitate to reach out to hcruz2@jhu.edu!"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "0cb987ba",
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "zeus21_userparams",
- "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.11.11"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/docs/Tutorial_Zeus21_UVLFs.ipynb b/docs/Tutorial_Zeus21_UVLFs.ipynb
deleted file mode 100644
index 5996e47..0000000
--- a/docs/Tutorial_Zeus21_UVLFs.ipynb
+++ /dev/null
@@ -1,273 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### NOTE: This notebook only includes atomic-cooling galaxies with PopII stars. Pop III stars in minihalos have not been added to this module yet.\n",
- "\n",
- "This tutorial will cover how to generate UVLFs from Zeus21. It is recommended to do the basics tutorial first, to get a handle on how the code works. That said, this can stand on its own, so let's go!"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [],
- "source": [
- "import zeus21\n",
- "from matplotlib import pyplot as plt\n",
- "import numpy as np\n",
- "import copy\n",
- "\n",
- "\n",
- "#set up the CLASS cosmology\n",
- "from classy import Class\n",
- "ClassCosmo = Class()\n",
- "ClassCosmo.compute()\n",
- "\n",
- "#and the user parameters\n",
- "UserParams = zeus21.User_Parameters(precisionboost=1.2)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we set up the cosmology and astrophysics. We do not need to go as far as the 21-cm calculation when doing UVLFs. We do not need the Coeff or PS21 structures (since we won't compute 21-cm in this tutorial), nor do we need the correlation functions. We do need the HMFs, though.\n",
- "\n",
- "As before, we begin by running CLASS, where you can change the input parameters as shown below. Then we save the cosmo parameters, the correlation functions, and the halo mass function at all desired z and M. T\n",
- "\n",
- "Then we set up the astro parameters. They're shared between the UVLF and the 21-cm calculation so one can jointly do inference."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {},
- "outputs": [],
- "source": [
- "CosmoParams_input = zeus21.Cosmo_Parameters_Input(zmin_CLASS=0.0) #make sure to provide zmin_CLASS lower than standard (5.0) if you want lower z results (eg HMFs)\n",
- "\n",
- "CosmoParams,ClassyCosmo, CorrFclass ,HMFintclass = zeus21.cosmo_wrapper(UserParams, CosmoParams_input)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we have to define the astrophysical parameters. You can run with the default set, but let's spice things up a bit. Let's define two:\n",
- "-One with a standard halo-galaxy connection\n",
- "-One with a very stochastic halo-galaxy connection, but lower UV brightness per galaxy (smaller f* at peak)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {},
- "outputs": [],
- "source": [
- "AstroParams_std = zeus21.Astro_Parameters(UserParams, CosmoParams, accretion_model=0) #made accretion_model exponential, like in the paper (2306.09403)\n",
- "AstroParams_bursty = zeus21.Astro_Parameters(UserParams, CosmoParams, sigmaUV=0.9, accretion_model=0) #made accretion_model exponential, like in the paper (2306.09403)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now define the redshift and magnitudes over which to plot. You give an arbitrary and width dz, and the code will assume the selection function is a Gaussian around it. For magnitudes you provide centers and widths of bins, assumed to be tophats. It will then generate the UVLF under those specs. Make sure the binning of z and MUV are the same as whatever date you're considering!"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {},
- "outputs": [],
- "source": [
- "z, dz = 5.0, 0.5 #zcentral and width (assumed Gaussian)\n",
- "\n",
- "MUVcenters = np.linspace(-17,-23,13) #centers of bins\n",
- "MUVwidths = -np.diff(MUVcenters)\n",
- "MUVwidths = np.append(MUVwidths,MUVwidths[-1])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/Users/et24528/anaconda3/envs/zeus21_userparams/lib/python3.11/site-packages/zeus21/UVLFs.py:29: RuntimeWarning: divide by zero encountered in log10\n",
- " MUVtab = 51.63 - 2.5 * np.log10(LUVtab) #AB magnitude\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAG7CAYAAADwnIBTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXoBJREFUeJzt3Xd4FOX6xvHvJiEJvQURlCqHLi0UqZIgofcSpEhXmgpYUYEfKGLBdiQ0UThIhyNEEeklCCgQiJQAggKhBaQGAqTO74852RABSbK72U1yf64r18m+s5l59oyQm5l3ntdiGIaBiIiIiNiVm7MLEBEREcmKFLJEREREHEAhS0RERMQBFLJEREREHEAhS0RERMQBFLJEREREHEAhS0RERMQBFLJEREREHEAhS0RERMQBFLJEREREHEAhS0RERMQBsn3I6tSpEwULFqRr167OLkVERESykGwfsl566SXmzZvn7DJEREQki8n2IcvPz4+8efM6uwwRERHJYlw6ZIWEhNCuXTuKFy+OxWJh5cqV97xn2rRplClTBm9vb3x9fdm2bVvGFyoiIiLyNy4dsqKjo6levTpTp0697/YlS5YwcuRI3n77bfbt20fjxo1p1aoVERER1vf4+vpStWrVe77OnTuXUR9DREREsiGLYRiGs4tIDYvFwooVK+jYsaN1rF69etSqVYvp06dbxypVqkTHjh2ZPHlyqve9ZcsWpk6dyvLly//xfTExMcTExFhfJyYmcuXKFQoXLozFYkn9hxERERGnMQyDGzduULx4cdzcHHe9ycNhe3aw2NhYQkNDefPNN1OMBwQEsGPHDoccc/LkyUyYMMEh+xYREZGMdfr0aR5//HGH7T/ThqxLly6RkJBA0aJFU4wXLVqUyMjIVO+nRYsW7N27l+joaB5//HFWrFhBnTp17vveMWPGMHr0aOvr69evU7JkSU6fPk2+fPnS90FEREQkQ0VFRVGiRAmHP/iWaUNWkr/fpjMMI0237tauXZvq93p5eeHl5XXPeL58+RSyREREMhlHT/Vx6Ynv/8THxwd3d/d7rlpdvHjxnqtb9hYUFETlypUfeMVLREREJNOGLE9PT3x9fVm/fn2K8fXr19OgQQOHHnv48OGEh4eze/duhx5HREREMi+Xvl148+ZNjh8/bn194sQJwsLCKFSoECVLlmT06NH06dOH2rVrU79+fWbNmkVERARDhgxxYtUiIiIiLh6y9uzZg5+fn/V10qTzvn37MnfuXAIDA7l8+TITJ07k/PnzVK1aldWrV1OqVClnlSwiIiICZKI+Wa4kKCiIoKAgEhIS+P3337l+/bomvouIiGQSUVFR5M+f3+G/vxWybJBRJ0lERETsJ6N+f2faie8iIiIirkwhS0RERMQBFLLSQX2yRERE5GE0J8sGmpMlIiKS+WhOloiIiEgmppAlIiIi4gAKWSIiIiIOoJCVDpr4LiIiIg+jie820MR3ERGRzEcT30VEREQyMYUsEREREQdQyBIRERFxAIUsEREREQdQyEoHPV0oIiIiD6OnC22gpwtFREQyHz1dKCIiIpKJKWSJiIiIOIBCloiIiIgDKGSJiIiIOIBCloiIiIgDKGSlg1o4iIiIyMOohYMN1MJBREQk81ELBxEREZFMTCFLRERExAEUskREREQcQCFLRERExAEUskREREQcQCFLRERExAEUskREREQcQCErHdSMVERERB5GzUhtoGakIiIimU9G/f72cNieRURERFyFYUB4OGzeDOvXZ8ghFbJEREQk6zEMOHoUtmwxg9WWLXDxYoaWoJAlIiIimZ9hwJ07kDOn+Xr3bqhXL+V7vL2hYUOoXx/ee8/hJWlOlg00J0tERMSJTpwwr1IlfbVtCzNmmNvi4qB4cahaFfz8zK+6dcHLS3OyRERERFIwDJg3L/n236lTKbf//HPy9zlywPnz4HFv1ImJiXFsnf+jkCUiIiKu6exZc16Vv7/52mIxb/MdP26+9vAwr075+UHTptCgQcqf/1/ASkhIYN++fWzcuJGNGzeybdu2DClfIUtERERcQ2Rk8lWqzZvh2DHIkweuXDGvTAEMHmy+9vMz51flyXPPbgzD4OjRo9ZQtWXLFq5evZqxnwWFLBEREXG2L7+EadPgyJGU425uULEiXLgAjz9ujr3++n13cebMGWuo2rhxI+fOnUuxPV++fDRt2pRmzZpRr149nnrqKUd8khQUskRERCRjXLoEW7eaV6rGjoVHHjHHr183A5bFAjVqJN/+a9wYChS4764uX77M5s2b2bhxI5s2beL3339Psd3Ly4uGDRvSrFkzmjVrhq+vLx7/u30YFRXlsI94N4UsERERcYyrV81QlXQLcP/+5G2NG0P37ub3PXqYTwE2aQKFCt13V9HR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ytQ+//xz5s+fj7u7O0uXLqV06dLOLklERET+J9uHLA8PD2rUqEGNGjUYNGiQs8tJtQ0bNvDqq68C8Mknn+Dv7+/kikRERORuHs4uwNkKFChAWFiYs8tIkz///JPAwEASExPp27cvL730krNLEhERkb/J9leyMpubN2/SsWNHrly5Qp06dZgxY4YmuouIiLgglw5ZISEhtGvXjuLFi2OxWFi5cuU975k2bRplypTB29sbX19ftm3blqZjREVF4evrS6NGjdi6daudKncMwzDo378/Bw4coGjRonz33Xd4e3s7uywRERG5D5e+XRgdHU316tXp378/Xbp0uWf7kiVLGDlyJNOmTaNhw4bMnDmTVq1aER4eTsmSJQHw9fUlJibmnp9dt24dxYsX5+TJkxQvXpyDBw/Spk0bDhw44LJL0bz//vssX76cHDly8N133/H44487uyQRERF5AIthGIazi0gNi8XCihUr6Nixo3WsXr161KpVi+nTp1vHKlWqRMeOHZk8eXKaj9GqVSveffddateufd/tMTExKQJbVFQUJUqU4Pr16w4PZqtWraJ9+/YYhsGsWbMYPHiwQ48nIiKSVUVFRZE/f36H//526duF/yQ2NpbQ0FACAgJSjAcEBLBjx45U7ePq1avW0HTmzBnCw8MpW7bsA98/efJk8ufPb/0qUaJE+j9AGhw5coRevXphGAZDhw5VwBIREckEMm3IunTpEgkJCRQtWjTFeNGiRYmMjEzVPg4fPkzt2rWpXr06bdu25YsvvqBQoUIPfP+YMWO4fv269ev06dM2fYbUuH79Oh07diQqKopGjRrx+eefO/yYIiIiYjuXnpOVGn9/ss4wjFQ/bdegQQMOHDiQ6mN5eXnh5eWVpvpskZCQQK9evTh69CiPP/44y5cvx9PTM8OOLyIiIumXaa9k+fj44O7ufs9Vq4sXL95zdSuzGj9+PD/++CPe3t6sXLkyy3wuERGR7CDThixPT098fX1Zv359ivH169fToEEDhx47KCiIypUrU6dOHYcdY/ny5UyaNAmAr776Cl9fX4cdS0REROzPpW8X3rx5k+PHj1tfnzhxgrCwMAoVKkTJkiUZPXo0ffr0oXbt2tSvX59Zs2YRERHBkCFDHFrX8OHDGT58uPXpBHvbv38/ffv2BWD06NH07t3b7scQERERx3LpkLVnzx78/Pys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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "UVLFs_std = zeus21.UVLFs.UVLF_binned(AstroParams_std,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths)\n",
- "UVLFs_bursty = zeus21.UVLFs.UVLF_binned(AstroParams_bursty,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths)\n",
- "\n",
- "\n",
- "plt.semilogy(MUVcenters,UVLFs_std,'k-')\n",
- "plt.semilogy(MUVcenters,UVLFs_bursty,'r--')\n",
- "plt.xlim(-22,-17)\n",
- "plt.ylim(1e-6,1e-1)\n",
- "plt.xlabel(r'$M_{\\rm UV}$');\n",
- "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$');"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "If you're new to the world of UVLFs note that the x axis is a UV absolute magnitude, and y is the comoving number density of galaxies at that magnitude (divided by the width of the bin)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "#now let's change the alpha and beta too to see what they do\n",
- "AstroParams_lowalpha = copy.deepcopy(AstroParams_std)\n",
- "AstroParams_lowalpha.alphastar-=0.2\n",
- "UVLFs_lowalpha = zeus21.UVLFs.UVLF_binned(AstroParams_lowalpha,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths)\n",
- "\n",
- "AstroParams_lowbeta = copy.deepcopy(AstroParams_std)\n",
- "AstroParams_lowbeta.betastar-=0.2\n",
- "UVLFs_lowbeta = zeus21.UVLFs.UVLF_binned(AstroParams_lowbeta,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths)\n",
- "\n",
- "#and the dust assumptions -- they can be degenerate! (Beware, these are measured independently, see Refs.)\n",
- "AstroParams_lessdust = copy.deepcopy(AstroParams_std)\n",
- "AstroParams_lessdust.C0dust-=0.1;\n",
- "UVLFs_lessdust = zeus21.UVLFs.UVLF_binned(AstroParams_lessdust,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths)\n",
- "\n",
- "\n",
- "plt.semilogy(MUVcenters,UVLFs_std,'k-')\n",
- "plt.semilogy(MUVcenters,UVLFs_lowalpha,'b--')\n",
- "plt.semilogy(MUVcenters,UVLFs_lowbeta,'g--')\n",
- "plt.semilogy(MUVcenters,UVLFs_lessdust,'r-.')\n",
- "plt.xlim(-22,-17)\n",
- "plt.ylim(1e-6,1e-1)\n",
- "plt.xlabel(r'$M_{\\rm UV}$');\n",
- "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$');\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Zeus allows to compute the bias as a function of MUV as well. Let's do that and plot it!"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAG4CAYAAACkWPilAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARvRJREFUeJzt3Xd8FHX+x/H3JkASSkIJRNDQOwECCSAgJSDgSYsCVu4AAeXECiggnKg0BRUVy50EUOTgQDEBARV+Ir2HEnrv0qQklBBS5vfHmA2BoJRNZjfzej4e83B3ZnbziSPH+77VYRiGIQAAABvzsroAAAAAqxGIAACA7RGIAACA7RGIAACA7RGIAACA7RGIAACA7RGIAACA7RGIAACA7RGIAACA7RGIAACA7blNIFq6dKnat2+vUqVKyeFwKCYmJtN1wzD01ltvqVSpUvLz81Pz5s21bds2a4oFAAC5itsEokuXLql27dr69NNPs7w+ZswYffjhh/r000+1bt063XPPPWrVqpUuXLiQw5UCAIDcxuGOm7s6HA5FR0crMjJSktk6VKpUKb3yyisaOHCgJCkpKUlBQUF677339Nxzz1lYLQAA8HR5rC7gVhw4cEAnTpxQ69atned8fHzUrFkzrVy58qaBKCkpSUlJSc73aWlpOnv2rIoVKyaHw5HtdQMAgLtnGIYuXLigUqVKycsrezq3PCIQnThxQpIUFBSU6XxQUJAOHTp008+NHj1ab7/9drbWBgAAcsaRI0d03333Zct3e0QgSnd9q45hGH/a0jN48GD169fP+T4+Pl6lS5fWkSNH5O/vn211AgAA10lISFBwcLAKFSqUbT/DIwLRPffcI8lsKSpZsqTz/KlTp25oNbqWj4+PfHx8bjjv7+9PIAIAwMNk53AXt5ll9mfKlSune+65RwsXLnSeu3r1qpYsWaJGjRpZWBkAAMgN3KaF6OLFi9q7d6/z/YEDB7Rp0yYVLVpUpUuX1iuvvKJRo0apUqVKqlSpkkaNGqX8+fPrqaeesrBqAACQG7hNIFq/fr0iIiKc79PH/nTr1k1fffWVXn/9dSUmJur555/XuXPn1KBBAy1YsCBb+xMBAIA9uOU6RNklISFBAQEBio+PZwwRAAAeIif+/vaIMUQAAADZiUAEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsj0AEAABsz5aBqH///kpOTra6DAAA4CZsGYiioqL04IMP6vTp01aXAgAA3IDHBKKUlBQNHTpU5cqVk5+fn8qXL6933nlHaWlpt/1dBQsW1NKlSxUeHq5Nmza5vlgAAOBRPCYQvffee/r3v/+tTz/9VDt27NCYMWM0duxYjR8//ra/a9GiRapUqZIOHz6sRo0aaebMmdlQMQAA8BQeE4hWrVqljh07qm3btipbtqw6d+6s1q1ba/369bf9XVWqVNGaNWvUpk0bJSYm6vHHH9eQIUPuqLUJAAB4Po8JRA888IB++eUX7d69W5K0efNmLV++XA8//PBNP5OUlKSEhIRMR7oiRYpo3rx5eu211yRJo0aNUseOHRUfH5+9vwgAAHA7HhOIBg4cqCeffFJVq1ZV3rx5VadOHb3yyit68sknb/qZ0aNHKyAgwHkEBwdnuu7t7a0xY8Zo6tSp8vX11dy5c3X//fc7QxcAALAHjwlEM2bM0NSpUzVt2jRt2LBBX3/9td5//319/fXXN/3M4MGDFR8f7zyOHDmS5X1PP/20li1bpvvuu087d+5U/fr19dNPP2XXrwIAANyMwzAMw+oibkVwcLAGDRqkvn37Os+NGDFCU6dO1c6dO2/pOxISEhQQEKD4+Hj5+/vfcP3EiRPq1KmTVq5cKS8vL7377rsaMGCAHA6Hy34PAABwe/7q729X8JgWosuXL8vLK3O53t7eLh0Ifc8992jRokXq1auX0tLS9Prrr6tr165KTEx02c8AAADux2MC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VFSU9u3bp759+8rHx0crV67Uww8/rPDwcEVHRztbkAAA1smWLrOvvvpKhw4d0oIFC7RixQpXf/0d8+gusz+Tmmou+pg3r/l+5Ehp6FDztY+PGaIefVTq0EGyw7Yqbuz48eP64IMP9MUXX+jy5cuSzNakIUOG6LHHHpO3t7fFFQKA+2EMkYvl2kB0vS1bpGnTpFmzpD17Ms7nyWOONYqKkoKDrasP+v333/XRRx9p/PjxSkhIkCRVqlRJgwcPVteuXZU3PdwCANw7ECUmJsowDOX/Y/HAQ4cOKTo6WtWrV1fr1q1dWqSr2CYQpTMMaetWMxjNmmW+LlhQOn1a8vU171m1ygxH991nba02df78eX322WcaN26czpw5I0kqXbq0Bg4cqGeeeUa+6c8JAGzMrQNR69at9eijj6pPnz46f/68qlatqrx58+r333/Xhx9+qH/+85+urvWu2S4QXW/3bmn7dnNmmmQGpqpVzfMNGpiz1Tp1ksqXt7RMO7p48aL+85//aOzYsc6Nk0uWLKkBAwboueeeU4ECBSyuEACs49azzDZs2KAmTZpIkr777jsFBQXp0KFDmjJlij755BOXFQgXqlw5IwxJUkKCuSK2wyGtWSO9/rpUoYIUGioNHy7t3GlVpbZTsGBB9e/fXwcOHNCnn36q4OBgHT9+XP3791fZsmU1atQoxcfHW10mAORadxyILl++rEKFCkmSFixYoEcffVReXl66//77dejQIZcViGwUECAtWyYdOyZ9/rnUsqXk7S1t3iy9+aY0dmzGvYZhHshWfn5+6tu3r/bu3auoqChVqFBBv//+u4YMGaIyZcrozTffdHatAQBc544DUcWKFRUTE6MjR47o559/do4bOnXqlD27ozxZyZLSP/8p/d//mdP5J040N5l9/PGMe9auNVuPBgwwxx0xVTxb5cuXTz179tTOnTs1depUVatWTfHx8Ro+fLjKli2r119/XSdOnLC6TADINe54DNF3332np556SqmpqWrZsqUWLFggSRo9erSWLl2qH3/80aWFuoLtxxDdjUGDpPfey3h/773SI4+Y0/nZQiTbpaWlKTo6WiNGjNCmTZskSb6+vurdu7def/113cegeAC5mFsPqpakEydO6Pjx46pdu7a8vMzGprVr18rf319Vq1Z1WZGuQiC6C5cuST//bM5W++GHzAs+BgZK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Wrp0qWbPnu3ccDadt7e3mjZtqsjISHXs2FFlypSxsFIAt4NA9CdGjx6tN954Qy+//LI++uijW/oMgQi53oED0o8/mq1HixZJCQmZr+/cKVWpYr42jFw9ONswDG3cuFExMTGKiYnRlvStVv4QGhqqyMhIRUZGqlatWmw2C7gxAtFNrFu3To899pj8/f0VERFBIAKykpJi7r2W3r129KgZmNL/4v/736V9+zJaj+rXz2hpyoX279/vbDlavny5cxq/JJUpU8YZjh544AHlyZPHwkoBXI9AlIWLFy+qbt26+vzzzzVixAiFhobeNBAlJSUpKSnJ+T4hIUHBwcEEIthTcrKUvg1GWpo5W+333zOu+/pK998vNWkiNW9udrXlUqdPn9a8efMUExOjn3/+WVeuXHFeK1q0qNq3b6+OHTuqdevWKpC+sjgAyxCIstCtWzcVLVpU48aNU/Pmzf80EL311lt6++23bzhPIAJkrp6d3nq0aJF0+nTGtQYNpNWrM94vXizVqmWOScplLl26pIULFyomJkZz587VmTNnnNd8fX3VunVrRUZGql27dipevLiFlQL2RSC6zv/+9z+NHDlS69atk6+v718GIlqIgFtkGNKuXdKyZeYikTVrSq+/bl67cEEqXNhsVQoJkZo2NVuRmjSR7r3X0rJdLSUlRStWrHCOOzp48KDzmpeXlxo3buwclF0hfZ0oANmOQHSNI0eOKDw8XAsWLFDtPxap+6tAdD3GEAF3YMcOqVMn85/XK1/eXAOpT5+cryubGYahLVu2OMPRxvR95/5Qs2ZNdezYUZGRkapbty6DsoFsRCC6RkxMjB555JFMK9CmpqbK4XDIy8tLSUlJf7k6LYEIuAunTpn7rqW3Im3aZLYaffaZ9Pzz5j179khDh2a0IoWESF5elpbtKocOHdLs2bM1e/ZsLVmyRKmpqc5rwcHB6tixozp27KhmzZopb/pYLQAuQSC6xoULFzLtYSRJPXr0UNWqVTVw4ECFhIT85XcQiAAXSkgwF4msWTOj6+zLL6Xnnsu4p0gRqXHjjIAUFpYxsNuDnT171jko+6efftLly5ed1woXLqy2bdsqMjJSbdq0UaFChSysFMgdCER/gS4zwM1s3y59/73ZirRihXTpUubrc+dKbduar8+eNWe25c+f83W6UGJion755RfFxMRozpw5On3N4HQfHx+1bNlSkZGR6tChg4KCgiysFPBcBKK/QCAC3FhKitmttnRpRkDavdscoC1Jb7whjR0rhYebrUdNm5qtSUWKWFn1XUlNTdXq1asVExOj6Oho7du3z3nN4XCoYcOGzkHZlStXtrBSwLMQiFyMQARY6PqVsR95RIqJyXyPw2F2wTVpIr37rlSwYI6W6EqGYWj79u2KiYnR7NmztW7dukzXq1Wr5lwMMjw8XF65ZKwVkB0IRC5GIALciGFIBw9mtCAtXWoOypakYsXMQdzpIeHLLyUfHzMolSvnkVuOHD16VHPmzFFMTIx+/fVXpaSkOK+VKlVKHTp0UGRkpCIiIpQvF68YDtwJApGLEYgAN3fihBmOzp+Xevc2zxmGFBwsHTtmvr/33owutiZNpOrVPW4m2/nz5/Xjjz8qJiZG8+fP18WLF53X/P391bx5czVv3lwRERGqVasWrUewPQKRixGIAA909ar05ptmUFq3ztyC5FoREeZK2+mu3aLEAyQlJWnRokXOKf0nTpzIdL1IkSJq2rSpMyQRkGBHBCIXIxABHu7yZXPD2qVLzWPVKrMlKX1ixaVLUvHiUo0a5vYj9eubR+XKHtGKlJaWptjYWC1evFiLFy/WsmXLdOHChUz3EJBgRwQiFyMQAblMcrIZgtJnrq1YIT3wwI33+ftL9epJzz4rPfZYjpZ4N1JSUrRhw4ZMAena7jWJgAR7IBC5GIEIyOXSB2qvXZtxxMZKiYnm9Y8+kl5+2Xy9e7c59T+9FSksTHLzRRRvNSA1a9bMGZBq1qxJQILHIxC5GIEIsKHkZGnbNjMcRURIlSqZ57/6SurRI+M+Ly9zgHZ6QGrbVrrvPktKvlUEJNgFgcjFCEQAnHbtkn74QVqzxgxLhw9nvv7DD1K7dubrrVulLVvMcUluPO0/OTk5U0Bavnz5DQGpaNGimbrYCEjwBAQiFyMQAbipEyfMWWzpAWnqVKlECfPav/4ljRhhvi5WLKMVqUEDc2xSYKB1df+J6wPSsmXLdOm67VSKFi2aqQUpJCSEgAS3QyByMQIRgDvyxRdmF9umTeYyANfbvTujK+7ECSkgQPLzy8kKbwkBCZ6KQORiBCIAdyUpSdq8OfOg7ZMnpTNnMqb1P/WU9O235hYk1079r1pV8va2tv7rEJDgKQhELkYgAuByly9L+fNnvG/UyFwf6XqFCkn33y/99JPbromUnJycaR2k5cuX/2lAioiIUI0aNQhIyHYEIhcjEAHIdoYhHTmS0YK0Zo20fr0ZnEJDpY0bM+7t2NEMR+njkcLDzTWT3MStBKRixYplakEiICE7EIhcjEAEwBIpKdKOHVJ8fMbCkUlJZvi5dkySw2F2rdWtK7VsmXlZADdwOwGpadOmql+/vkJDQ+XnhuOp4FkIRC5GIALgNlJSpNWrM2a1rV1rLiqZrnNncyySZLY6de5sbkESGmoeFStaPiYpOTlZ69evzxSQLl++nOkeb29vhYSEqF69eqpXr57Cw8NVs2ZN5fWg/eZgPQKRixGIALi1U6fMqf+bNknVqkmPPmqeP3BAKl8+873585sDt0NDpQ4dpIcfzulqb5AekH799VetWrVK69at08mTJ2+4z8fHR6GhoQoPD3cGpSpVqsjbzQadw30QiFyMQATAI505Y7YWbdpkHnFxGduRSNKgQdLo0ebr06elvn2l2rUzWpNKlbJkMUnDMHT06FGtW7dO69evd/7z/PnzN9xbsGBB1a1bN1NLUvny5eVw00UwkbMIRC5GIAKQK6SmSnv2mEsAbNokPfSQ1KyZeW3hQql168z3FytmBqPataXHHzcHcVvEMAzt27dP69atcwakDRs23DAWSTJntIWHh2dqSSpVqhQhyYYIRC5GIAKQ6x04IH33XUZr0q5dZoBKFxUl9expvt68Wfr444zWpNq1pcKFc7zk1NRU7dixw9mKtG7dOm3evFlXs1gE85577snUilSvXj0FuulK4XAdApGLEYgA2E5iorm5bXpr0vPPm+OTJHMF7uefz3x/2bIZ4ahrV3PwtgWuXr2qLVu2ZOpu27Ztm1KvDXd/KFu2bKaAFBYWxv/G5zIEIhcjEAHANTZskGbPNoPS5s3SoUOZry9enNEVt2CBNHduxrik6tUlX98cLffy5cvatGmTsxVp3bp12r17d5b3VqlSJVNLUp06dZj+78EIRC5GIAKAP3HunBmM0luTxo3L6ELr31/68MOMe729zZam9Nak7t0t2eQ2Pj5esbGxmVqSDl0f7JQx/f/a8UghISHKly9fjteM20cgcjECEQDcoYULzW1H0scmnT2b+frRo9K995qv//tfaetWsxWpenVzsckCBXKs1FOnTjlDUvpxs+n/tWvXztTdVrVqVab/uyECkYsRiADABQxD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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- }
- ],
- "source": [
- "\n",
- "bias_UVLFs_std = zeus21.UVLFs.UVLF_binned(AstroParams_std,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths,RETURNBIAS=True)/UVLFs_std\n",
- "bias_UVLFs_bursty = zeus21.UVLFs.UVLF_binned(AstroParams_bursty,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths,RETURNBIAS=True)/UVLFs_bursty\n",
- "#note it's divided by UVLF, since the bias returns *Phi on each MUV bin, so you have to divide by UVLF to get the bias alone\n",
- "\n",
- "plt.plot(MUVcenters,bias_UVLFs_std,'k-')\n",
- "plt.plot(MUVcenters,bias_UVLFs_bursty,'r--')\n",
- "plt.xlim(-22,-17)\n",
- "plt.ylim(0,10)\n",
- "plt.xlabel(r'$M_{\\rm UV}$');\n",
- "plt.ylabel(r'bias, $b$');"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Note a possible issue: for no/low stochasticity (sigmaUV~0) the UVLF becomes noisy because there are not enough halos in each MUV bin. Can be fixed change precisionboost in constants.py"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "#and the newly added pop3 UVLF - note they'll normally be very faint, so you'll need to go to fainter MUVs\n",
- "AstroParams_popIII = zeus21.Astro_Parameters(UserParams, CosmoParams, accretion_model=0, USE_POPIII=True) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "UVLFs_pop2,UVLFs_pop3= zeus21.UVLFs.UVLF_binned(AstroParams_popIII,CosmoParams,HMFintclass,z,dz,MUVcenters,MUVwidths)\n",
- "\n",
- "\n",
- "plt.semilogy(MUVcenters,UVLFs_pop2,'k-')\n",
- "plt.semilogy(MUVcenters,UVLFs_pop3,'r--')\n",
- "plt.xlim(-22,-17)\n",
- "plt.ylim(1e-6,1e-1)\n",
- "plt.xlabel(r'$M_{\\rm UV}$');\n",
- "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$');"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "zeus21_userparams",
- "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.11.11"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/acknowledging.rst b/docs/acknowledging.rst
new file mode 100644
index 0000000..95b60a3
--- /dev/null
+++ b/docs/acknowledging.rst
@@ -0,0 +1,27 @@
+=============
+Acknowledging
+=============
+
+If you find this code useful, please cite both these papers:
+
+.. admonition:: Citation
+
+ * Muñoz 2023, [An Effective Model for the Cosmic-Dawn 21-cm Signal](https://arxiv.org/abs/2302.08506)
+
+ * Sklansky, Thélie, Muñoz, Cruz, Libanore, Venditti, in prep.
+
+and include a link to [this Github](https://github.com/JulianBMunoz/Zeus21).
+
+In addition, the following papers introduce multiple features into ``zeus21``.
+
+If you use the UVLF module, please cite:
+
+.. admonition:: Citation
+
+ * Muñoz, Mirocha, Furlanetto, Nashwan, 2023, [Breaking degeneracies in the first galaxies with clustering](https://arxiv.org/abs/2306.09403)
+
+If you use relative velocites, Lyman-Werner feedback, or Population III stars, please cite:
+
+.. admonition:: Citation
+
+ * Cruz, Muñoz, Sabti, Kamionkowski, 2024, [The First Billion Years in Seconds: An Effective Model for the 21-cm Signal with Population III Stars](https://arxiv.org/abs/2407.18294).
\ No newline at end of file
diff --git a/docs/authors.rst b/docs/authors.rst
new file mode 100644
index 0000000..94292d0
--- /dev/null
+++ b/docs/authors.rst
@@ -0,0 +1 @@
+.. include:: ../AUTHORS.rst
\ No newline at end of file
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..dd0d587
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,69 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# For the full list of built-in configuration values, see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Project information -----------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
+
+import os
+import sys
+
+sys.path.insert(0, os.path.abspath(".."))
+
+project = 'Zeus21'
+year = "2023"
+author = "The zeus21 collaboration"
+copyright = f"{year}, {author}"
+
+# -- General configuration ---------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
+
+extensions = [
+ "myst_parser",
+ "sphinx.ext.autodoc",
+ "sphinx.ext.autosummary",
+ "sphinx.ext.napoleon",
+ "sphinx.ext.viewcode",
+ "sphinx_copybutton",
+ "nbsphinx",
+ "autoapi.extension"
+]
+
+autosummary_generate = True
+autoapi_dirs = ["../zeus21"]
+autoapi_options = [
+ "members",
+ "undoc-members",
+ "show-inheritance",
+ "show-module-summary",
+]
+
+
+copybutton_prompt_text = r"\$ "
+copybutton_prompt_is_regexp = True
+
+
+html_theme = "sphinx_rtd_theme"
+html_theme_options = {
+ "navigation_depth": 4,
+}
+
+
+templates_path = ['_templates']
+exclude_patterns = [
+ "_build",
+ "Thumbs.db",
+ ".DS_Store",
+ "**.ipynb_checkpoints",
+]
+
+
+
+
+
+# -- Options for HTML output -------------------------------------------------
+# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
+
+#html_theme = 'alabaster'
+#html_static_path = ['_static']
diff --git a/docs/developer_install.rst b/docs/developer_install.rst
new file mode 100644
index 0000000..22e907d
--- /dev/null
+++ b/docs/developer_install.rst
@@ -0,0 +1,16 @@
+====================
+Install as Developer
+====================
+
+First clone the repository from GitHub:
+
+.. code-block:: console
+
+ git clone https://github.com/julianbmunoz/zeus21.git zeus21
+ cd zeus21/
+
+Then, install in "editable" mode:
+
+.. code-block:: console
+
+ pip install -e .
diff --git a/docs/PspecandGlobal_Zeus21.png b/docs/images/PspecandGlobal_Zeus21.png
similarity index 100%
rename from docs/PspecandGlobal_Zeus21.png
rename to docs/images/PspecandGlobal_Zeus21.png
diff --git a/docs/Zeus21Logo-Horizontal.jpg b/docs/images/Zeus21Logo-Horizontal.jpg
similarity index 100%
rename from docs/Zeus21Logo-Horizontal.jpg
rename to docs/images/Zeus21Logo-Horizontal.jpg
diff --git a/docs/Zeus21Logo-Horizontal.pdf b/docs/images/Zeus21Logo-Horizontal.pdf
similarity index 100%
rename from docs/Zeus21Logo-Horizontal.pdf
rename to docs/images/Zeus21Logo-Horizontal.pdf
diff --git a/docs/zeusLogo.png b/docs/images/zeusLogo.png
similarity index 100%
rename from docs/zeusLogo.png
rename to docs/images/zeusLogo.png
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 0000000..b94d9db
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,39 @@
+.. image:: images/Zeus21Logo-Horizontal.jpg
+ :width: 75%
+ :align: center
+
+
+.. include:: ../README.md
+ :parser: myst_parser.sphinx_
+ :start-after:
+
+
+
+.. toctree::
+ :hidden:
+ :maxdepth: 1
+
+ installation
+ tutorials
+ acknowledging
+
+.. toctree::
+ :hidden:
+ :caption: API Reference
+
+ autoapi/zeus21/index
+
+.. toctree::
+ :hidden:
+ :caption: Development
+
+ developer_install
+ authors
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
\ No newline at end of file
diff --git a/docs/installation.rst b/docs/installation.rst
new file mode 100644
index 0000000..783c62a
--- /dev/null
+++ b/docs/installation.rst
@@ -0,0 +1,28 @@
+============
+Installation
+============
+
+You can download and install this package by doing:
+
+.. code-block:: console
+
+ git clone https://github.com/julianbmunoz/zeus21.git zeus21
+ cd zeus21/
+ pip install .
+
+that should take care of all dependencies (remember to work in your favorite conda env).
+If you have issues with cache'd versions of packages you can add ``--no-cache-dir`` at the end of ```pip install .``.
+
+**NOTE:** You may run into problems when pip-installing ``classy`` (the Python wrapper of ``CLASS``).
+If so, their installation guide is `here `_,
+but in short the steps are:
+
+.. code-block:: console
+
+ git clone https://github.com/lesgourg/class_public.git class
+ cd class/
+ make
+ cd python/
+ python setup.py install --user
+
+(modifying the Makefile to your `gcc` as needed)
\ No newline at end of file
diff --git a/docs/readme_link.md b/docs/readme_link.md
deleted file mode 100644
index 339dc8f..0000000
--- a/docs/readme_link.md
+++ /dev/null
@@ -1,2 +0,0 @@
-.. include:: ../README.md
- :parser: myst_parser.sphinx_
diff --git a/docs/source/conf.py b/docs/source/conf.py
deleted file mode 100644
index abf9209..0000000
--- a/docs/source/conf.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# Configuration file for the Sphinx documentation builder.
-#
-# For the full list of built-in configuration values, see the documentation:
-# https://www.sphinx-doc.org/en/master/usage/configuration.html
-
-# -- Project information -----------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
-
-project = 'Zeus21'
-copyright = '2023, Julian B Muñoz'
-author = 'Julian B Muñoz'
-
-# -- General configuration ---------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
-
-extensions = [
- "myst_parser"
-]
-
-templates_path = ['_templates']
-exclude_patterns = []
-
-
-
-# -- Options for HTML output -------------------------------------------------
-# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
-
-html_theme = 'alabaster'
-html_static_path = ['_static']
diff --git a/docs/source/index.rst b/docs/source/index.rst
deleted file mode 100644
index b7afc77..0000000
--- a/docs/source/index.rst
+++ /dev/null
@@ -1,19 +0,0 @@
-.. include:: ../readme_link.md
-
-
-Contents
-===========
-
-.. toctree::
- :maxdepth: 2
- :caption: Contents:
-
-
-
-
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
diff --git a/docs/tutorials.rst b/docs/tutorials.rst
new file mode 100644
index 0000000..96941cb
--- /dev/null
+++ b/docs/tutorials.rst
@@ -0,0 +1,25 @@
+=========
+Tutorials
+=========
+
+If you want to get started, we recommend checking the Jupyter tutorials.
+
+Currently you can find tutorials for:
+
+.. toctree::
+ :maxdepth: 1
+ :caption: Tutorials
+
+ tutorials/Tutorial_Zeus21_21cm
+ tutorials/Tutorial_Zeus21_UVLFs
+ tutorials/Tutorial_Zeus21_PopIIandIII_Fiducial
+ tutorials/Tutorial_Zeus21_Maps
+
+Here is an example power spectrum (at k=0.3/Mpc) and global signal as a function of redshift, for two cases of X-ray luminosity.
+You can run it yourself with the included tutorial!
+
+.. image:: ./images/PspecandGlobal_Zeus21.png
+ :width: 75%
+ :align: center
+
+
diff --git a/docs/tutorials/Tutorial_Zeus21_21cm.ipynb b/docs/tutorials/Tutorial_Zeus21_21cm.ipynb
new file mode 100644
index 0000000..3a3db78
--- /dev/null
+++ b/docs/tutorials/Tutorial_Zeus21_21cm.ipynb
@@ -0,0 +1,461 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 21-cm global signal and power spectrum"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This tutorial will cover the basics up to predicting the 21-cm power spectrum and global signal, assuming PopII stars only (see separate tutorial for PopIII). We will start by importing the necessary packages (Zeus, numpy, class)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import zeus21\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "First we set up the user parameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "precisionboost = 1.2 # boost the precision in redshift \n",
+ "zmin = 5. # min redshift down to which we compute the 21-cm related quantities\n",
+ "UserParams = zeus21.User_Parameters(precisionboost=precisionboost, zmin=zmin)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we set up the cosmology by calling zeus21.Cosmo_Parameters.\n",
+ "\n",
+ "This will run CLASS, which will use the input parameters passed to zeus21.Cosmo_Parameters. \n",
+ "An instance of Class will be stored as attribute to zeus21.Cosmo_Parameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set up your parameters here, as an example the CDM (reduced) density\n",
+ "omega_cdm = 0.12\n",
+ "CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, omegac=omega_cdm)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We also need to generate the halo mass function at all desired z and M, which ends the cosmology part."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "HMFinterp = zeus21.HMF_interpolator(UserParams=UserParams,CosmoParams=CosmoParams)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Then, we can set the astrophysics parameters. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# set up your parameters\n",
+ "# here are the peak of f*(Mh) and the escape fraction amplitude as an example\n",
+ "epsstar = 0.1\n",
+ "fesc10 = 0.1\n",
+ "AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams, epsstar=epsstar, fesc10=fesc10)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now, we can compute the 21-cm global signal by calling zeus21.get_T21_coefficients.\n",
+ "\n",
+ "This will compute multiple related quantities:\n",
+ "- the SFRD, the basic ingredient for zeus21 formalism,\n",
+ "- the Lyman-alpha properties and fluxes,\n",
+ "- the X-ray properties and fluxes,\n",
+ "- and the reionization quantities."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "T21global = zeus21.get_T21_coefficients(UserParams=UserParams, CosmoParams=CosmoParams, AstroParams=AstroParams, HMFinterp=HMFinterp)\n",
+ "zlist = T21global.zintegral"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The T21global instance holds all the information needed to find the 21-cm signal during cosmic dawn. It has saved the 21-cm global signal, the Wouthuysen-Field coupling, and all temperatures. It also has the effective biases $\\gamma_R$ for all $R$ (which will be used for the power spectrum below). This structure also has ancillary data like the evolution of the SFRD and Nion. If you want to learn what else the CoeffStructure holds, just do dir(CoeffStructure).\n",
+ "\n",
+ "Let us start by plotting the global signal."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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VbgAoHr16vjzzz+xZ88eVKpUCQ8ePICXlxd69eqFx48fi45HRERqwNJFQkiShOPHj+OTTz5Bo0aNsHXrVmRlZaF79+64cuUKNm/ejNq1a4uOqXbe3t64ceMGRo0aBQMDA+zYsQOurq44e/as6GhERKRiLF2kcTdu3ICHhwfc3d1x8OBBGBgYoHfv3oiIiMDu3btRv3590RE1ytLSEgsWLMD58+dRt25dPHr0CG3atMHatWtFRyMiIhVi6SKNefHiBUaNGoUGDRrgyJEjMDExweDBg3H79m1s3bpV79evcnFxwdmzZ9GtWzekpaVhwIABGD58eI7TERERkfZi6SK1kyQJ69evR+3atbFw4UJkZmbC29sbN2/exPLly1GjRg3REUsMKysr7N69G1OnTgUALF26FB06dOA8LyIiHcDSRWoVGRkJd3d3fP3113jy5Anq1q2Lw4cPY8+ePahevbroeCWSgYEB/vvf/2Lfvn2wsrLCiRMn0LRpU9y9e1d0NCIiKgaWLlKL5ORkTJo0CY0aNcKJEydQqlQpzJ49G1euXIGHh4foeFqha9euOHfuHGrXro3o6Gi4u7vj1q1bomMREVERsXSRyh09ehT169fHrFmzkJGRgW7duuHGjRsYP348TExMRMfTKnXq1MHx48dRr149xMTEoG3btrhx44boWEREVAQsXaQyz58/x4ABA9CxY0fcv38flSpVwt69e7F3715UqVJFdDytZWtri9DQUDRo0ABxcXFo27Ytrl27JjoWEREVEksXqURgYCCcnJyUyxwMGzYMkZGR6Natm+BkuqF8+fIICQmBi4sLnjx5gnbt2uHy5cuiYxERUSGwdFGxvHr1CoMGDUKXLl0QFxeHunXrIjw8HEuWLOGpkFSsXLlyOHr0KD766CMkJCSgffv2iIiIEB2LiIgKiKWLiuz06dNo1KgRVq1aBQAYPXo0IiIi0LJlS8HJdFeZMmUQFBQENzc3PH/+HF26dEFMTIzoWEREVAAsXVRoGRkZmDZtGlq3bo179+7B0dERR48exfz582FmZiY6ns6Ty+U4ePAgnJycEBMTg08//RTJycmiYxER0QewdFGhREVFoV27dpgyZQoyMzPh6+uLq1evon379qKj6RW5XI6//voLNjY2uHjxIvr164esrCzRsYiIKB8sXVRg+/btQ8OGDREeHg5LS0v8/vvv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QAoNDVU+xrv7/d1330mVK1eWTExMpPLly0seHh7SqVOnNL9z+chvv5OTkyUPDw+pfPnykrGxsVS5cmWpX79+UlRUVI7H0LXXO9vKlSslc3Nz6cWLF7k+hra93nn9Dq9bt065jS6+vz+037r6/v7Qfot+f8v+F5KIiIiI1IhzuoiIiIg0gKWLiIiISANYuoiIiIg0gKWLiIiISANYuoiIiIg0gKWLiIiISANYuoiIiIg0gKWLiIiISANYuoiIiIg0gKWLiIiISANYuoiIiIg0gKWLiCgfDx8+hEwme+/Stm1b0dGISMsYiQ5ARFSSOTo6IjY2VvlzXFwcOnbsiDZt2ghMRUTaSCZJkiQ6BBGRNkhJSUHbtm1Rvnx5/PnnnzAw4MECIio4jnQRERXQgAED8PLlSwQHB7NwEVGhsXQRERXAzz//jEOHDuHcuXOwtLQUHYeItBAPLxIRfcCuXbvwxRdf4ODBg+jQoYPoOESkpVi6iIjycf36dTRr1gyjR4/GsGHDlNebmJigbNmyApMRkbZh6SIiysf69evx9ddfv3e9u7s7wsLCNB+IiLQWSxcRERGRBvDrN0REREQawNJFREREpAEsXUREREQawNJFREREpAEsXUREREQawNJFREREpAEsXUREREQawNJFREREpAEsXUREREQawNJFREREpAEsXUREREQa8H+D068XNyUtjgAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure()\n",
+ "plt.plot(zlist, T21global.T21avg, \"k\")\n",
+ "plt.xlabel(r\"z\");\n",
+ "plt.ylabel(r\"$\\overline{ T_{21}}$ [mK]\")\n",
+ "plt.xlim(zmin, 25)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It has the usual absorption trough around $z\\sim15$ (given so far we only have atomic-cooling haloes), and turns into emission at $z\\sim11$.\n",
+ "\n",
+ "Since the v2 version of zeus21 now properly computes reionization quantities, let us now plot the volume fraction of ionized hydrogen."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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0qRJWr58udlxAABwGXe9f1tuzxLOTvVJ3ps2bRI9GACAs0dZ8jLx8fHy9/fXd999p0OHDpkdBwAAj0dZ8jItW7ZUbGysJM5bAgDAGShLXohLCAAA4DyUJS/024tTct4SAABnh7LkheLi4hQYGKicnBx9/fXXZscBAMCjUZa8UFBQkOLi4iRJGzduNDkNAACejbLkpUaOHClJ+vDDD01OAgCAZ6MsealRo0ZJ+nXPUmVlpclpAADwXJQlLxUTE6OQkBAdP35cGRkZZscBAMBjUZa8lK+vr0aMGCFJSk1NNTkNAACei7LkxaoPxVGWAABoOsqSF6suS+np6Tpx4oTJaQAA8EyUJS/WrVs3denSReXl5dq6davZcQAA8EiUJS9ms9k4FAcAwFlqVFny9fV1VQ64CGUJAICz06iyxPeMeZ4RI0bIZrPpiy++UG5urtlxAADwOI0qSzabzVU54CKhoaG69NJLJXE1bwAAmoJzlpoBDsUBANB0fs54knbt2tW518kwDNlsNuXl5Tnj16CJRo0apccff1ypqan2bQIAABrGKWXpxx9/dMbTwEUGDRqkc845Rzk5OcrIyFBMTIzZkQAA8BgchmsGgoKCNHr0aEnSunXrzA0DAICHcUpZateundq3b6927drVmtq3b++MX4GzdP3110uiLAEA0FgchmsmxowZIz8/P+3bt0/ffPONLrjgArMjAQDgEZxSlpYvX+7w8cTERGf8GpyFtm3baujQofroo4/01ltvaebMmWZHAgDAIzilLO3du9d++9VXX9WkSZPs9/nklXVcf/31+uijj7Ru3TrKEgAADWQzGnFZbl9fX1VWVjpc5tJLL1VmZuZZB3OnoqIihYSEqLCwUMHBwWbHcZns7Gx17txZNptNubm5nE8GAPBo7nr/dvqn4diTZF0RERGKjo6WYRh65513zI4DAIBH4NIBzQyfigMAoHGcchiu+grehmHo+PHjatu2rSTPuYJ3czkMJ/16ftkll1yiwMBA5efnq1WrVmZHAgCgSdz1/t3kE7yLi4vVunVrSVw6wJP07t1bUVFROnz4sN5//33deOONZkcCAMDSmnwYbvDgwcrNzXVmFriBzWazH4pbu3atuWEAAPAATS5LMTExGjhwoL766qsa8zMzMzVmzJizDgbXGTdunCTpnXfeUWlpqclpAACwtiaXpZdfflm3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HnlENputxtShQweH62zZskXR0dEKCgpSVFSUnn/+eTeldZ6uXbvWGrfNZtPUqVPrXH7z5s11Lv/VV1+5OXnjpKWl6ZprrlF4eLhsNpvWrVtX43HDMPTII48oPDxcLVq00LBhw7Rv374zPu/q1at10UUXKTAwUBdddJHWrl3rohE0jaNxl5eXa9asWerTp4/OOecchYeHKzExUceOHXP4nK+88kqdfwOnTp1y8Wga7kzb+9Zbb62VPzY29ozP68nbW1Kd281ms+nJJ5+s9zk9YXvPnTtXl112mVq3bq327dvr+uuv14EDB2os442v8TON21tf4w3Z3ma9xr2+LEnSxRdfrJycHPu0d+/eepc9cuSIxowZo8GDByszM1N//OMfNW3aNK1evdqNic/ezp07a4w5NTVVkvT73//e4XoHDhyosd6FF17ojrhNdvLkSfXt21fPPvtsnY8/8cQTmj9/vp599lnt3LlTHTp00KhRo1RcXFzvc27btk0TJkzQpEmT9Nlnn2nSpEkaP368Pv30U1cNo9EcjbukpES7d+/Wn//8Z+3evVtr1qzR119/rWuvvfaMzxscHFxj++fk5CgoKMgVQ2iSM21vSbrqqqtq5N+wYYPD5/T07S2p1jZbunSpbDabbrzxRofPa/XtvWXLFk2dOlXbt29XamqqKioqlJCQoJMnT9qX8cbX+JnG7a2v8YZsb8mk17jh5R5++GGjb9++DV7+wQcfNHr27Flj3p133mnExsY6OZl73XfffUa3bt2MqqqqOh/ftGmTIcn4+eef3RvMiSQZa9eutd+vqqoyOnToYMybN88+79SpU0ZISIjx/PPP1/s848ePN6666qoa86688kpj4sSJTs/sDKePuy47duwwJBnffvttvcssW7bMCAkJcW44F6pr3Lfccotx3XXXNep5vHF7X3fddcaIESMcLuNp29swDCMvL8+QZGzZssUwjObzGj993HXxxtd4XeM26zXeLPYsHTx4UOHh4YqMjNTEiRN1+PDhepfdtm2bEhISasy78sortWvXLpWXl7s6qkuUlZXptdde02233SabzeZw2UsvvVQdO3bUyJEjtWnTJjcldI0jR44oNze3xvYMDAzU0KFDlZ6eXu969f0NOFrH6goLC2Wz2dSmTRuHy504cUJdunRRp06ddPXVVyszM9M9AZ1o8+bNat++vbp3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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure()\n",
+ "plt.plot(zlist, 1-T21global.xHI_avg, \"k\")\n",
+ "plt.xlabel(r\"z\");\n",
+ "plt.ylabel(r\"$\\overline{ x_{\\rm HII}}$\")\n",
+ "plt.xlim([zmin, 25])\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let us plot the relevant temperatures too. Here is the CMB temperature $T_{\\rm CMB}$; the gas kinetic temperature $T_k$, which has an adiabatic/cosmological and an X-ray component; and the spin temperature $T_S$, which has the WF coupling in it (and we store its inverse in the code)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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dqRAsIed8+fDAbhwAeLjraxIRESchcKOFAj2MTtRURF4eprn1JUlIiK5QWFHCoTMW0b4+Znn1JUlIiK5QWFHCoQrhR217IiISG5Q2JECwd6NdeLECSpUMACFHRERyR0KO1IgVKxYEYCEhATKlj0HqBtLRERyR7Z2Pe/Zs2eOn/izzz5zrIorcj2enp74+Phw9uxZihc/AZRVy46IiOSKbLXsLF68GHd3d7y9vbN1LFmyhHjNG5YcsrfuuLoeB9SNJSIiuSNbLTsAH330UbZban744YcbLkiKrkqVKrFz5058fU/w3/9C/fpWVyQiIs4gW2Fn9erV+Pj4ZPtJf/31V8df6SLZldGyc4IXX7S4GBERcRrZ6sZq06YNhmFc975du3YB0KpVKzw8PG6uMilyKlWqBMDx48ctrkRERJxJtmdjPfjgg9cMPLt27aJ9+/a5UpQUTfaWnRMnThASAkuWQFKSxUWJiEihl+2w888//zBs2LArXtu9ezft27endevWuVaYFD32sHP8+HHuvBPuvx/UyCMiIjcr2wOUly9fTuvWrfHx8WHSpEmO83v37qV9+/bceeedzJ07N0+KlKLB3o114sQJGjY0W3USE62tSURECr9st+zcdtttLF26lE8++YT33nsPgH///Zd27drRrFkz5s+fj6ura46++Lp16+jatSuBgYHYbDYWL17suJaSksLLL79MvXr1KFmyJIGBgTz22GOcPHkyy3O0bdsWm82W5ejfv3+O6pCCwd6yExUVxapVCWzZAnXqWFyUiIgUetlu2QFo2rQpixcv5v777+f8+fNMmzaNJk2a8MMPP+Q46ACcP3+eBg0aMGjQIHr16pXl2oULF9i6dSuvv/46DRo0IDo6mlGjRtGtWzc2b96c5d6hQ4fy5ptvOh572rfNlkKlbNmyeHp6kpCQwMmTJ6lWrZrVJYmIiBPIUdgBaNeuHd999x19+vShU6dOLFy4EDc3txv64l26dKFLly5XvObt7c2KFSuynPv444+54447CA0NpXLlyo7zJUqUcGwkKYWXzWajYsWKHDx4kBMnTijsiIhIrsh2N1bZsmXx8fHBx8eHwYMHA/DHH3/g5+fnOJ+TtXhuRExMDDabjTJlymQ5/+2331K+fHnq1KnDCy+8QFxc3DWfJykpidjY2CyHFAz2cTvz5x+nZk144gmLCxIRkUIv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UkeOW3bmzp3LnXfeyZ49e1i0aBEpKSns2bOH33//HW9v71wrrGrVqvj7+7NixQrHueTkZNauXesIMo0bN8bNzS3LPeHh4ezateuaYUcKH3tXlqenOW7nYk+miIgUMKf37OGLKVPo0KEDAQEBPPXZZ6xev5758+dbVlOOW3beeecdJk+ezPDhw/Hy8mLKlClUrVqVYcOGZWmByY74+HgOHjzoeHzkyBG2bduGj48PlStXZtSoUbzzzjvUqFGDGjVq8M4771CiRAkeeughALy9vRkyZAjPP/885cqVw8fHhxdeeIF69eo5ZmeJc6hevTqrVq2idOmDJCTA4cNQp47VVYmICMCZf/9l0VtvMX/pUn6Pjibz4i9NGzakb/369H3sMcvqy3HYOXToEPfddx9gdgedP38em83Gc889R7t27XI08Hfz5s3cfffdjsf26e0DBgxgxowZvPTSSyQkJPD0008THR1Ns2bNWL58OV5eXo7PmTx5MsWKFaNv374kJCTQvn17ZsyYgaura06/NSnA7C077u5my86hQ1ZWIyIiZw8cYNF//sO8JUtYdfZsloDTuEIF+r7wAn369CkQK9/nOOz4+Pg4FvWrWLEiu3btol69epw7d44LFy7k6Lnatm171UUKwRycPH78eMaPH3/Ve4oXL87HH3/Mxx9/nKOvLYWLPeykpirsiIhYJTo6msWLFzNvzhxWrlhBaqZrt5coQd82bejz0ktUa9vWqhKvKMdh56677mLFihXUq1ePvn378uyzz/L777+zYsUK2rdvnxc1imRaWFBhR0QkP507fJgf33qLeWvWsOL4cVIy7dnTwNOTfq1b0+ell6jerp2FVV5bjsPO1KlTSUxMBMwp3G5ubqxfv56ePXvy+uuv53qBIgC33HILAOfPRwHnOHSojKX1iIg4s5ijR/nprbeY99NPLDt9msxbEtavX5++ffvSp1s3bq1Xz7Iac8JmXKsf6RKpqal8++23dO7c2TE13BnExsbi7e1NTExMvq4hJDnj7+/PqVOngM24uTUmIQE0NEtEJHfExsby86RJzPvqK36LjCTzwjJ1ixen75130ufNN6lVgGY7Z/f3d45adooVK8ZTTz3F3r17b7pAkZyqXr06p06dYuTIQzz8cGOryxERKfTiwsL4Zdky5i1Zwq+//pplK6XbPDzod+ed9Hn+eWrfe6+F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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure()\n",
+ "plt.plot(zlist, T21global.T_CMB, \"r--\", label=r\"$T_{\\rm CMB}$\")\n",
+ "plt.plot(zlist, T21global.Tk_avg, \"b-.\", label=r\"$T_{\\rm k}$\")\n",
+ "plt.plot(zlist, 1.0/T21global._invTs_avg, \"k\", label=r\"$T_{\\rm S}$\")\n",
+ "plt.xlabel(r\"z\")\n",
+ "plt.ylabel(r\"Temperatures [K]\")\n",
+ "plt.ylim(0, 200)\n",
+ "plt.legend()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This lines up with our expectation from the 21-cm global signal above. Absorption begins when $T_S$ departs from $T_{\\rm CMB}$, at $z\\sim 20$, as it begins to couple to $T_k$. It turns into emission at $z\\sim 11$ when $T_S\\sim T_k > T_{\\rm CMB}$. Full WF coupling only occurs after there has been some X-ray heating, so we don't get a deep 21-cm trough for this model. This would be different with a lower X-ray luminosity $L_X$ as we will see below.\n",
+ "\n",
+ "Let's move now to the 21-cm fluctuations.\n",
+ "\n",
+ "Note that reionization is only properly computed for the global signal for now. Correlations between the reionization and other 21-cm quantities will be added in a future version of zeus21."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "RSDMODE = 1 # which RSD mode you want, 0 is no RSDs (real space), 1 is spherical (as simulations usually take), 2 is mu~1 (outside the wedge, most relevant for observations)\n",
+ "PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, T21global, RSD_MODE = RSDMODE)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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rz+w79/3vWzZMqF58+aChYWF4OjoKPTo0UPYt2+fDqNVj6psw78fU6ZMEQShenr0e++9J7i7uwvm5uZCr169hMuXL9c4R+/evcXjVX7++WchICBAMDU1FQIDA/UuoXzUfSckJNS6D4Bw+PBh8Rz/vu9XXnlFaNq0qWBmZia4uLgI4eHhwsmTJ3V/c4/wqPsuLi4WwsPDBRcXF8HU1FRo2rSpMGXKFCEpKanGOYzt/Vb5+uuvBUtLSyE3N7fWcxji+/2wn+N169aJxxjjZ/xx922sn/HH3beUn3HZ/w+QiIiIiOqJY6SIiIiI1MREioiIiEhNTKSIiIiI1MREioiIiEhNTKSIiIiI1MREioiIiEhNTKSIiIiI1MREioiIiEhNTKSIiIiI1MREioiIiEhNTKSIiIiI1MREioganQ8//BAymeyBx6effip1aERkYLhoMRE1OgUFBSgqKhKfL1q0CL/99htOnDgBb29vCSMjIkOjkDoAIiJds7W1ha2tLQDg/fffx2+//YajR48yiSKiemPXHhE1Wu+//z7WrVuHo0ePwtfXV+pwiMgAMZEiokaJSRQRaQITKSJqdJhEEZGmcIwUETUqixcvxpdffom9e/fC3Nwc6enpAABHR0eYm5tLHB0RGRrO2iOiRkMQBDg4OCA/P/+BfadOnULnzp0liIqIDBkTKSIiIiI1cYwUERERkZqYSBERERGpiYkUERERkZqYSBERERGpiYkUERERkZqYSBERERGpiYkUERERkZqYSBERERGpiYkUERERkZqYSBERERGpiYkUERERkZr+HwilzYh+oanlAAAAAElFTkSuQmCC",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#choose a k to plot\n",
+ "klist = PS21.klist_PS\n",
+ "kchoose=0.3\n",
+ "_ik = min(range(len(klist)), key=lambda i: np.abs(klist[i]-kchoose))\n",
+ "\n",
+ "plt.figure()\n",
+ "plt.semilogy(zlist,PS21.Deltasq_T21[:,_ik], color=\"k\", linewidth=2.0, label=\"Full Zeus21\")\n",
+ "plt.semilogy(zlist,PS21.Deltasq_T21_lin[:,_ik], color=\"gray\", linewidth=1.2, label=\"Linear\")\n",
+ "\n",
+ "plt.xlabel(r\"$z$\")\n",
+ "plt.ylabel(r\"$\\Delta^2_{21}$ [mK$^2$]\")\n",
+ "plt.legend()\n",
+ "\n",
+ "plt.xlim(zmin, 25)\n",
+ "plt.ylim(1, 200)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This shows the evolution of the fluctuations at a particular scale (i.e., wavenumber $k$). We have shown the full result from zeus21, as well as the linear approximation (which is also stored). We can flip the script now and show the 21-cm power against wavenumber at a particular redshift."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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IlI/HOeJiIiISEWwPBEREREpgOWJiIiISAEsT0REREQKYHkiIiIiUgDLExEREZECWJ6IiIiIFMDy1AIOkklERETN4SCZT8BBMomIiNQPB8kkIiIiUhEsT0REREQKYHkiIiIiUgDLExEREZECWJ6IiIiIFMDyRERERKQAliciIiIiBbA8ERERESmA5YmIiIhIASxPLeDtWYiIiKg5vD3LE/D2LEREROqHt2chIiIiUhEsT0REREQKYHkiIiIiUgDLExEREZECWJ6IiIiIFMDyRERERKQAliciIiIiBbA8ERERESmA5YmIiIhIASxPRERERApgeSIiIiJSAMtTC3hjYCIiImoObwz8BLwxMBERkfrhjYGJiIiIVATLExEREZECWJ6IiIiIFMDyRERERKQAliciIiIiBbA8ERERESmA5YmIiIhIASxPRERERApgeSIiIiJSAMsTERERkQJYnoiIiIgUwPJEREREpACWJyIiIiIFsDy1YMOGDXB3d0dAQIDYUYiIiEiFSARBEMQOocrKyspgYmKC0tJSGBsbix2HiIiIWqEjv7+554mIiIhIASxPRERERApgeSIiIiJSAMsTERERkQJYnoiIiIgUwPJEREREpACWJyIiIiIFsDwRERERKYDliYiIiEgBLE9ERERECmB5IiIiIlIAyxMRERGRAlieiIiIiBTA8kRERESkAJYnIiIiIgWwPBEREREpgOWJiIiISAEsT0REREQKYHlqwYYNG+Du7o6AgACxoxAREZEKkQiCIIgdQpWVlZXBxMQEpaWlMDY2FjsOERERtUJHfn9zzxMRERGRAlieiIiIiBTA8kRERESkAJYnIiIiIgWwPBEREREpgOWJiIiISAEsT0REREQKYHkiIiIiUgDLExEREZECWJ6IiIiIFMDyRERERKQAliciIiIiBbA8ERERESmA5YmIiIhIASxPRERERApgeSIiIiJSAMsTERERkQJYnoiIiIgUwPJEREREpACttrxo//79Cr9m1KhR0NPTa8vmiIiIiFRGm8pTTEyMQstLJBJcu3YNzs7ObdkcERERkcpo82G7goICyGSyVj309fWVmZmIiIhING0qT7NmzVLoENxzzz0HY2PjtmyKiIiISKVIBEEQxA6hysrKymBiYoLS0lIWQCIiIjXRkd/fCu95qqqqQm5ubpPp6enpSglEREREpMoU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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "#choose a z to plot\n",
+ "zchoose=13.\n",
+ "_iz = min(range(len(zlist)), key=lambda i: np.abs(zlist[i]-zchoose))\n",
+ "\n",
+ "plt.figure()\n",
+ "plt.loglog(klist,PS21.Deltasq_T21[_iz], color='k', linewidth=2.0, label=\"Full Zeus21\")\n",
+ "plt.loglog(klist,PS21.Deltasq_T21_lin[_iz], color='gray', linewidth=1.2, label=\"Linear\")\n",
+ "\n",
+ "plt.xlabel(r\"$k$ [Mpc$^{-1}$]\")\n",
+ "plt.ylabel(r\"$\\Delta^2_{21}$ [mK$^2$]\")\n",
+ "plt.legend()\n",
+ "\n",
+ "plt.xlim(1e-2, 1)\n",
+ "plt.ylim(1, 200)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This was for a specific set of astro+cosmo parameters. Let's do a different example with lower X-ray luminosity (which we expect will produce a deeper cosmic dawn absorption). This is controlled through the free parameter L40_xray (luminosity per unit SFR in units of 10^40 erg/s/SFR), with a fiducial value of 3.0. Let's lower it to 1.0 and see what happens."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "AstroParams_lowLX = zeus21.Astro_Parameters(CosmoParams=CosmoParams, epsstar=epsstar, L40_xray=1.0)\n",
+ "T21global_lowLX = zeus21.get_T21_coefficients(UserParams=UserParams, CosmoParams=CosmoParams, AstroParams=AstroParams_lowLX, HMFinterp=HMFinterp)\n",
+ "PS21_lowLX = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams_lowLX, T21global_lowLX, RSD_MODE = RSDMODE)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note that we can re-run the astrophysics part only, so it should take ~few seconds in a laptop. Let's plot the global signal and fluctuations comparing with the fiducial case."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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LVq0KOvWrWPr1q1pJuF5UebMmfnzzz9ZvHix6Zf51atXqV+/Pt9//z3RcW+Yp8aNgy+/hMaNtclNhdCTJD5CiFeaMQP279eeFy2qjdCcFmzevJlSpUoxdOhQQp+O0ujp6cnUqVM5deoUrVq1SpUpQGyJwWDgk08+4fjx49SpUwfQRqYfO3YstWrV4sKFCwBERGgTmQIEBmrJz3NNo4SwOEl8hBDxunYNhgx5tjxnDri56RePJTx48IDOnTvTrFkz00jGDg4OfPnll1y8eJFvv/3WZntppZYCBQrg4+PD2LFjcXJyAuDw4cNUrFiR1atX4+oKmzdrYz4BXL+uJT/xzN4hhEWkauPmdevWJfmYJk2a4Gajf12lcbOwF0pBixawaZO2/MUXWhsNe6WUYsWKFXz99dfcu3fPtL5hw4b88ssvlIn71hYJOnToEJ988omptMdgMDB58mT69evH3bsG6tXTprkAKFECdu6EV8yGIdIguxjAMKlDshsMBi5evJjgxHjWTBIfYS/+/ffZjOu5c2uNUj099Y0ptdy4cYNevXrxzz//mNbFVWt9+umnab5KK6nCwsL44osv+OOPP0zrevbsya+//kpgoBP16kHctGDly4OPD7zh5PPCzthNr67AwECMRmOiHunTp0/tcFLF9OnTKVWqFFWrVtU7FCFSRIsW2ijN7u7w22/2mfQYjUZmzpxJ6dKlzZKedu3acfbsWT777DNJet5AhgwZWLx4MSPjxj8Afv/9d1q3bo2n52P++0+bzR3g+HF4/31tnCghLEaloq5du6qQkJBE79+zZ0917969VIwodQUHBytABQcH6x2KECnChj+OCbp//7565513FGB65MqVS/311196h2ZXFi5cqJydnU3/x+XKlVPXr19X584plTWrUlqlqlJduyplNOodrdCbpb5DZQDDFCRVXUJYv/3799OhQwez6RY+++wzpkyZQubMmXWMzD75+Pjw7rvvmmZ8z507N//++y/h4RVp1AgiI7X9Ro9OO70GRfxsvqorPDycmzdvvrT+9OnTqXVJIUQyxfORtRtKKX766Sfq1atnSnqyZcvGhg0bmDt3riQ9qaRBgwbs37/f1Hbz1q1b1K1bl4cP/2Xx4mf7jRwJixbpFKRIU1Il8fnrr78oVqwYLVq0oFy5chw4cMC0rVOnTqlxSSFEMh04APnzQ48e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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "f = plt.figure(figsize = (6,6))\n",
+ "\n",
+ "ax = f.add_subplot(211)\n",
+ "\n",
+ "plt.semilogy(zlist, PS21.Deltasq_T21[:,_ik], \"k\", linewidth=2.0, label=r\"$L_{X,40} = 3.0$ (fid.)\")\n",
+ "plt.semilogy(zlist, PS21_lowLX.Deltasq_T21[:,_ik], \"b-.\", linewidth=2.0, label=r\"$L_{X,40} = 1.0$\")\n",
+ "\n",
+ "plt.ylabel(r\"$\\Delta^2_{21}$ [mK$^2$]\")\n",
+ "plt.legend()\n",
+ "plt.xlim(5, 25)\n",
+ "plt.ylim(1,200)\n",
+ "\n",
+ "ax = f.add_subplot(212)\n",
+ "\n",
+ "plt.plot(zlist,T21global.T21avg, \"k\", linewidth=2.0)\n",
+ "plt.plot(zlist,T21global_lowLX.T21avg, \"b-.\", linewidth=2.0)\n",
+ "\n",
+ "plt.xlabel(r\"z\")\n",
+ "plt.ylabel(r\"$\\overline{ T_{21}}$ [mK]\")\n",
+ "\n",
+ "plt.xlim(5, 25)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Just as we expected! Lowering the X-ray luminosity (blue) makes for a deeper 21-cm global absorption, and larger 21-cm fluctuations too. By $z\\sim 10$ there is still enough heating to raise the 21-cm signal near absorption. We can confirm this by plotting the spin temperature and comparing against the `standard' case"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "plt.figure()\n",
+ "plt.plot(zlist, 1.0/T21global._invTs_avg, \"k\", label=r\"$L_{X,40} = 3.0$ (fid.)\")\n",
+ "plt.plot(zlist, 1.0/T21global_lowLX._invTs_avg, \"b-.\", label=r\"$L_{X,40} = 1.0$\")\n",
+ "plt.plot(zlist, T21global.T_CMB, \"r--\")\n",
+ "plt.xlabel(r\"z\")\n",
+ "plt.ylabel(r\"Temperatures [K]\")\n",
+ "plt.legend()\n",
+ "plt.xlim(5, 25)\n",
+ "plt.ylim(0,200)\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "You're now ready to calculate any 21-cm power spectrum or global signal that you want!"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "to_dev",
+ "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.14.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/docs/Tutorial_Zeus21_Maps.ipynb b/docs/tutorials/Tutorial_Zeus21_Maps.ipynb
similarity index 99%
rename from docs/Tutorial_Zeus21_Maps.ipynb
rename to docs/tutorials/Tutorial_Zeus21_Maps.ipynb
index 97a9650..d41713b 100644
--- a/docs/Tutorial_Zeus21_Maps.ipynb
+++ b/docs/tutorials/Tutorial_Zeus21_Maps.ipynb
@@ -1,5 +1,12 @@
{
"cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Map-making"
+ ]
+ },
{
"attachments": {},
"cell_type": "markdown",
diff --git a/docs/tutorials/Tutorial_Zeus21_PopIIandIII_Fiducial.ipynb b/docs/tutorials/Tutorial_Zeus21_PopIIandIII_Fiducial.ipynb
new file mode 100644
index 0000000..d8235e4
--- /dev/null
+++ b/docs/tutorials/Tutorial_Zeus21_PopIIandIII_Fiducial.ipynb
@@ -0,0 +1,734 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "21609608-8da1-40d1-bf4d-12d8ca84f267",
+ "metadata": {},
+ "source": [
+ "# Zeus21 with Population II and III Stars"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5f2e29a3",
+ "metadata": {},
+ "source": [
+ "This quick tutorial covers all the new features in the updated public version of Zeus21 (see our paper [Cruz et al. 2024](https://arxiv.org/abs/2407.18294)) for more information.\n",
+ "\n",
+ "In this new version, we have included the influence of Population III stars as well as the suppressive feedback effects from Lyman-Werner radiation and the relative velocity between CDM and baryons."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "2c9e8ec0",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import math\n",
+ "import numpy as np\n",
+ "from matplotlib import pyplot as plt\n",
+ "\n",
+ "#import Zeus\n",
+ "import zeus21\n",
+ "\n",
+ "#set up the CLASS cosmology\n",
+ "from classy import Class\n",
+ "\n",
+ "#and the user parameters\n",
+ "UserParams = zeus21.User_Parameters(precisionboost=1.2)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f3646152-80fa-4166-bcd8-1645ffbebe5b",
+ "metadata": {},
+ "source": [
+ "## Step 1: Set up Cosmology"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e56fce7d",
+ "metadata": {},
+ "source": [
+ "We begin by running CLASS, where the associated parameters can be altered below. Then we save the cosmo parameters, the correlation functions, and the halo mass function at all desired z and M."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "01adaa46-dcdd-4405-a6a1-5b800584dc4d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# cosmo inputs from table 2 last column of 1807.06209, as 21cmFAST\n",
+ "ombh2 = 0.02242 \n",
+ "omch2 = 0.11933\n",
+ "tau_re = 0.0544\n",
+ "hLittle = 0.6766\n",
+ "ns = 0.9665\n",
+ "As = np.exp(3.047)*10**(-10.)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "b5c07181",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "CLASS has run, we store the cosmology.\n",
+ "HMF interpolator built. This ends the cosmology part -- moving to astrophysics.\n"
+ ]
+ }
+ ],
+ "source": [
+ "#set up user parameters\n",
+ "UserParams = zeus21.User_Parameters(FLAG_FORCE_LINEAR_CF=False,zmin_T21=10.)\n",
+ "\n",
+ "#define all cosmology (including derived) parameters, and save them to the CosmoParams structure\n",
+ "CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, omegab = ombh2, omegac = omch2, h_fid = hLittle, As = As, ns = ns, tau_fid = tau_re, USE_RELATIVE_VELOCITIES = True, Flag_emulate_21cmfast=False)\n",
+ "print('CLASS has run, we store the cosmology.')\n",
+ "\n",
+ "# Compute the HMF structure that stores associated quantities\n",
+ "HMFintclass = zeus21.HMF_interpolator(User_Parameters=UserParams,Cosmo_Parameters=CosmoParams)\n",
+ "print('HMF interpolator built. This ends the cosmology part -- moving to astrophysics.')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8eeda1be-f47c-4cb4-b9f2-6998e06c6641",
+ "metadata": {},
+ "source": [
+ "## Step 2: Astrophysics"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "faf27bcd",
+ "metadata": {},
+ "source": [
+ "After that we set up the astro parameters, calculate the SFRD and with it all the global signal and related quantities. In principle one can re-run the astrophysics part only if you're certain of the cosmology parameters. \n",
+ "\n",
+ "With the current implementation, the computation of global quantities below takes less than a second on a laptop.\n",
+ "\n",
+ "For more details on parameters, please refer to those used in Table 1 of our paper linked above.\n",
+ "\n",
+ "NOTE: Pop III stars and LW feedback are turned on using the USE_POP_III and USE_LW_FEEDBACK flags below."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "fbcff876-3535-475d-9cb0-c124b9de2fff",
+ "metadata": {
+ "scrolled": true,
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "### POP II quantities first\n",
+ "\n",
+ "################################\n",
+ "### Model Parameters\n",
+ "accretion_model = \"exp\" # Accretion model. \"exp\" for exponential, \"EPS\" for EPS. \"RP16\" for the dynamically averaged fitting function in Rodríguez-Puebla+16. Default is \"exp\"\n",
+ "\n",
+ "################################\n",
+ "### SFR(Mh) Parameteres\n",
+ "alphastar = 0.69 # alphastar powerlaw index for low masses, default 0.5\n",
+ "betastar = -1.68 # betastar powerlaw index for high masses, default -0.5\n",
+ "epsstar = 10**-1.11 # epsilonstar = fstar at Mc\n",
+ "Mc = 10**11.93 # Pivot mass at which the power law cuts for model 0, default Mc = 3e11\n",
+ "dlog10epsstardz = -0.08 # dlog10epsilonstar/dz, default 0\n",
+ "\n",
+ "################################\n",
+ "### Escape fraction parameters\n",
+ "fesc10 = 0.1 # fesc(M) parameter. Power law normalized (fesc10) at M=1e10 Msun with index alphaesc\n",
+ "alphaesc = 0.0\n",
+ "L40_xray = 10**0.5 # L40_xray: soft-band (E<2 keV) lum/SFR in Xrays in units of 10^40 erg/s/(Msun/yr)\n",
+ "E0_xray = 500. # E0_xray: minimum energy in eV\n",
+ "alpha_xray = -1.0 # Xray SED power-law index\n",
+ "Emax_xray_norm=2000 # max energy in eV to normalize SED. Keep at 2000 eV normally\n",
+ "\n",
+ "################################\n",
+ "### LyA parameters\n",
+ "N_alpha_perbaryon_II = 9690 # number of Pop II photons between LyA and Ly Cont. per baryon (from BL05)\n",
+ "N_alpha_perbaryon_III = 17900 # number of Pop III photons between LyA and Ly Cont. per baryon value of 17900 is from Klessen & Glover 2023 (2303.12500), table A2\n",
+ "\n",
+ "################################\n",
+ "### MTURN Parameters: \n",
+ "Mturn_fixed = None # Mturn_fixed: None if use Matom(z) at each z, Some value if fixed Mturn\n",
+ "FLAG_MTURN_SHARP= False # Mturn_sharp: False if regular exponential cutoff, True if sharp cutoff, active only if Mturn_fixed is on\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "################################\n",
+ "# Pop III Quantities\n",
+ "alphastar_III = 0 \n",
+ "betastar_III = 0\n",
+ "epsstar_III = 10**-2.5709708032788794/3 #AV sugmaUV = 1.3\n",
+ "Mc_III = 1e7\n",
+ "dlog10epsstardz_III = 0.0\n",
+ "\n",
+ "fesc7_III = 10**(-1.35)\n",
+ "alphaesc_III = -0.3\n",
+ "L40_xray_III = 10**0.5\n",
+ "alpha_xray_III = -1.0\n",
+ "\n",
+ "\n",
+ "USE_POPIII = True\n",
+ "USE_LW_FEEDBACK = True\n",
+ "\n",
+ "A_LW = 2.0\n",
+ "beta_LW = 0.6\n",
+ "\n",
+ "A_vcb = 1.0\n",
+ "beta_vcb = 1.8\n",
+ "\n",
+ "\n",
+ "\n",
+ "AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams, \n",
+ " quadratic_SFRD_lognormal=False,\n",
+ " FLAG_USE_PSD=False, \n",
+ " \n",
+ " \n",
+ " accretion_model = accretion_model,\n",
+ " \n",
+ " alphastar = alphastar, \n",
+ " betastar = betastar, \n",
+ " epsstar = epsstar, \n",
+ " Mc = Mc, \n",
+ " dlog10epsstardz = dlog10epsstardz,\n",
+ " \n",
+ " fesc10 = fesc10, \n",
+ " alphaesc = alphaesc,\n",
+ " L40_xray = L40_xray, \n",
+ " E0_xray = E0_xray, \n",
+ " alpha_xray = alpha_xray, \n",
+ " Emax_xray_norm = Emax_xray_norm, \n",
+ " \n",
+ " N_alpha_perbaryon_II = N_alpha_perbaryon_II, \n",
+ " N_alpha_perbaryon_III = N_alpha_perbaryon_III,\n",
+ " \n",
+ " Mturn_fixed = Mturn_fixed, \n",
+ " FLAG_MTURN_SHARP = FLAG_MTURN_SHARP,\n",
+ " \n",
+ " \n",
+ " USE_POPIII = USE_POPIII, \n",
+ " USE_LW_FEEDBACK = USE_LW_FEEDBACK,\n",
+ "\n",
+ " alphastar_III = alphastar_III, \n",
+ " betastar_III = betastar_III,\n",
+ " epsstar_III = epsstar_III,\n",
+ " Mc_III = Mc_III,\n",
+ " dlog10epsstardz_III = dlog10epsstardz_III,\n",
+ "\n",
+ " fesc7_III = fesc7_III,\n",
+ " alphaesc_III = alphaesc_III,\n",
+ " L40_xray_III = L40_xray_III,\n",
+ " alpha_xray_III = alpha_xray_III,\n",
+ " \n",
+ " A_LW = A_LW,\n",
+ " beta_LW = beta_LW,\n",
+ " \n",
+ " A_vcb = A_vcb,\n",
+ " beta_vcb = beta_vcb,\n",
+ " )\n",
+ "\n",
+ "\n",
+ "CoeffStructure = zeus21.get_T21_coefficients(UserParams=UserParams, CosmoParams=CosmoParams ,AstroParams=AstroParams, HMFinterp=HMFintclass)\n",
+ "SFRD_class = zeus21.sfrd.SFRD_class(UserParams, CosmoParams, AstroParams, HMFintclass)\n",
+ "zlist= CoeffStructure.zintegral\n",
+ "print('SFRD and coefficients stored. Move ahead.')\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4cb4b017",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "### POP II quantities first\n",
+ "\n",
+ "################################\n",
+ "### Model Parameters\n",
+ "accretion_model = \"exp\" # ACCRETION MODEL: 0 for exponential, 1 for EPS, default EXP\n",
+ "\n",
+ "################################\n",
+ "### SFR(Mh) Parameteres\n",
+ "alphastar = 0.5 # alphastar powerlaw index for low masses, default 0.5\n",
+ "betastar = -0.5 # betastar powerlaw index for high masses, default -0.5\n",
+ "epsstar = 10**-1. # epsilonstar = fstar at Mc\n",
+ "Mc = 3e11 # Pivot mass at which the power law cuts for model 0, default Mc = 3e11\n",
+ "dlog10epsstardz = 0.0 # dlog10epsilonstar/dz, default 0\n",
+ "\n",
+ "################################\n",
+ "### Escape fraction parameters\n",
+ "fesc10 = 0.1 # fesc(M) parameter. Power law normalized (fesc10) at M=1e10 Msun with index alphaesc\n",
+ "alphaesc = 0.0\n",
+ "L40_xray = 10**0.5 # L40_xray: soft-band (E<2 keV) lum/SFR in Xrays in units of 10^40 erg/s/(Msun/yr)\n",
+ "E0_xray = 500. # E0_xray: minimum energy in eV\n",
+ "alpha_xray = -1.0 # Xray SED power-law index\n",
+ "Emax_xray_norm=2000 # max energy in eV to normalize SED. Keep at 2000 eV normally\n",
+ "\n",
+ "################################\n",
+ "### LyA parameters\n",
+ "N_alpha_perbaryon_II = 9690 # number of Pop II photons between LyA and Ly Cont. per baryon (from BL05)\n",
+ "N_alpha_perbaryon_III = 17900 # number of Pop III photons between LyA and Ly Cont. per baryon value of 17900 is from Klessen & Glover 2023 (2303.12500), table A2\n",
+ "\n",
+ "################################\n",
+ "### MTURN Parameters: \n",
+ "Mturn_fixed = None # Mturn_fixed: None if use Matom(z) at each z, Some value if fixed Mturn\n",
+ "FLAG_MTURN_SHARP= False # Mturn_sharp: False if regular exponential cutoff, True if sharp cutoff, active only if Mturn_fixed is on\n",
+ "\n",
+ "################################\n",
+ "ZMIN = 10.0 # down to which z we compute the evolution\n",
+ "\n",
+ "\n",
+ "\n",
+ "################################\n",
+ "# Pop III Quantities\n",
+ "alphastar_III = 0 \n",
+ "betastar_III = 0\n",
+ "epsstar_III = 10**(-3.0)\n",
+ "Mc_III = 1e7\n",
+ "dlog10epsstardz_III = 0.0\n",
+ "\n",
+ "fesc7_III = 10**(-1.35)\n",
+ "alphaesc_III = -0.3\n",
+ "L40_xray_III = 10**0.5\n",
+ "alpha_xray_III = -1.0\n",
+ "\n",
+ "\n",
+ "USE_POPIII = True\n",
+ "USE_LW_FEEDBACK = True\n",
+ "\n",
+ "A_LW = 2.0\n",
+ "beta_LW = 0.6\n",
+ "\n",
+ "A_vcb = 1.0\n",
+ "beta_vcb = 1.8\n",
+ "\n",
+ "\n",
+ "#set up your astro parameters too, here the peak of f*(Mh) as an example\n",
+ "\n",
+ "AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams, \n",
+ " quadratic_SFRD_lognormal=False,\n",
+ " FLAG_USE_PSD=False, \n",
+ " \n",
+ " accretion_model = accretion_model,\n",
+ " \n",
+ " alphastar = alphastar, \n",
+ " betastar = betastar, \n",
+ " epsstar = epsstar, \n",
+ " Mc = Mc, \n",
+ " dlog10epsstardz = dlog10epsstardz,\n",
+ " \n",
+ " fesc10 = fesc10, \n",
+ " alphaesc = alphaesc,\n",
+ " L40_xray = L40_xray, \n",
+ " E0_xray = E0_xray, \n",
+ " alpha_xray = alpha_xray, \n",
+ " Emax_xray_norm = Emax_xray_norm, \n",
+ " \n",
+ " N_alpha_perbaryon_II = N_alpha_perbaryon_II, \n",
+ " N_alpha_perbaryon_III = N_alpha_perbaryon_III,\n",
+ " \n",
+ " Mturn_fixed = Mturn_fixed, \n",
+ " FLAG_MTURN_SHARP = FLAG_MTURN_SHARP,\n",
+ " \n",
+ " USE_POPIII = USE_POPIII, \n",
+ " USE_LW_FEEDBACK = USE_LW_FEEDBACK,\n",
+ "\n",
+ " alphastar_III = alphastar_III, \n",
+ " betastar_III = betastar_III,\n",
+ " epsstar_III = epsstar_III,\n",
+ " Mc_III = Mc_III,\n",
+ " dlog10epsstardz_III = dlog10epsstardz_III,\n",
+ "\n",
+ " fesc7_III = fesc7_III,\n",
+ " alphaesc_III = alphaesc_III,\n",
+ " L40_xray_III = L40_xray_III,\n",
+ " alpha_xray_III = alpha_xray_III,\n",
+ " \n",
+ " A_LW = A_LW,\n",
+ " beta_LW = beta_LW,\n",
+ " \n",
+ " A_vcb = A_vcb,\n",
+ " beta_vcb = beta_vcb)\n",
+ "\n",
+ "CoeffStructure = zeus21.get_T21_coefficients(UserParams=UserParams, CosmoParams=CosmoParams ,AstroParams=AstroParams, HMFinterp=HMFintclass)\n",
+ "SFRD_class = zeus21.sfrd.SFRD_class(UserParams, CosmoParams, AstroParams, HMFintclass)\n",
+ "zlist= CoeffStructure.zintegral\n",
+ "print('SFRD and coefficients stored. Move ahead.')\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fa72898f",
+ "metadata": {},
+ "source": [
+ "## Step 3: Plotting globally-averaged quantities"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "507bde44",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.plot(zlist, CoeffStructure.T21avg, color = \"#E64D4E\", linewidth = 3)\n",
+ "\n",
+ "plt.xlim([10, 35])\n",
+ "plt.ylim([-120, 30])\n",
+ "\n",
+ "plt.xlabel(r'$z$', fontsize = 30)\n",
+ "plt.ylabel(r'$T_{21}$ [mK]', fontsize = 30)\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "\n",
+ "plt.tight_layout()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3a57e7ae",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.plot(zlist,CoeffStructure.T_CMB , color = \"#EE9063\", linewidth = 3, linestyle = 'dotted', label = r'$T_\\mathrm{CMB}$')\n",
+ "\n",
+ "\n",
+ "plt.plot(zlist,CoeffStructure.Tk_ad , color = \"#0B92B1\", linewidth = 3, label = r'$T_\\mathrm{ad}$')\n",
+ "plt.plot(zlist,CoeffStructure.Tk_xray , color = \"#E64D4E\", linewidth = 3, label = r'$T_x$')\n",
+ "plt.plot(zlist,CoeffStructure.Tk_avg, color = \"#665191\", linewidth = 3, label = r'$T_k$')\n",
+ "\n",
+ "plt.plot(zlist,CoeffStructure._invTs_avg**-1 , color = \"#77AC54\", linewidth = 3, label = r'$T_s$')\n",
+ "\n",
+ "\n",
+ "plt.xlim([10, 35])\n",
+ "plt.ylim([0, 100])\n",
+ "\n",
+ "plt.xlabel(r'$z$', fontsize = 30)\n",
+ "plt.ylabel(r'$T$ [K]', fontsize = 30)\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "plt.legend(fontsize=20, frameon = False)\n",
+ "plt.tight_layout()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6815b8c5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.SFRD_II_avg, color=\"#E64D4E\", linewidth=3.0, label = 'Pop II')\n",
+ "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.SFRD_III_avg, color=\"#0B92B1\", linewidth=3.0, label = 'Pop III')\n",
+ "\n",
+ "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.SFRD_II_avg + CoeffStructure.SFRD_III_avg, color=\"#665191\", linewidth=3.0, label = 'Pop II + III')\n",
+ "\n",
+ "plt.xlim([10, 35])\n",
+ "plt.ylim(1e-7, 1e-1)\n",
+ "\n",
+ "plt.xlabel(r'$z$', fontsize = 30)\n",
+ "plt.ylabel(r'$\\dot{\\overline{\\rho}}_*(z)$', fontsize = 30)\n",
+ "\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "plt.legend(fontsize=20, frameon = False)\n",
+ "plt.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b1a55a1e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.J_21_LW_II, color=\"#E64D4E\", linewidth=3.0, label = 'Pop II')\n",
+ "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.J_21_LW_III, color=\"#0B92B1\", linewidth=3.0, label = 'Pop III')\n",
+ "\n",
+ "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.J_21_LW_II + CoeffStructure.J_21_LW_III, color=\"#665191\", linewidth=3.0, label = 'Pop II + III')\n",
+ "\n",
+ "plt.xlim([10, 35])\n",
+ "plt.ylim(1e-3, 1e2)\n",
+ "\n",
+ "plt.xlabel(r'$z$', fontsize = 30)\n",
+ "plt.ylabel(r'$J_{21}$', fontsize = 30)\n",
+ "\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "plt.legend(fontsize=20, frameon = False)\n",
+ "plt.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "80eb8f5b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.semilogy(CoeffStructure.zintegral, CoeffStructure.xa_avg, color=\"#665191\", linewidth=3.0, label = 'Pop II + III')\n",
+ "\n",
+ "plt.xlim([10, 35])\n",
+ "plt.ylim(1e-3, 1e2)\n",
+ "\n",
+ "plt.xlabel(r'$z$', fontsize = 30)\n",
+ "plt.ylabel(r'$x_\\alpha$', fontsize = 30)\n",
+ "\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "plt.legend(fontsize=20, frameon = False)\n",
+ "plt.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a85d3ff1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.semilogy(CoeffStructure.zintegral,CoeffStructure.xe_avg, color=\"#E64D4E\", linewidth=3.0)\n",
+ "\n",
+ "plt.xlim([10, 35])\n",
+ "plt.ylim([1e-4, 1e-3])\n",
+ "\n",
+ "plt.xlabel(r'$z$', fontsize = 30)\n",
+ "plt.ylabel(r'$x_e$', fontsize = 30)\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "# plt.legend(fontsize=20, frameon = False)\n",
+ "plt.tight_layout()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "77eb7769",
+ "metadata": {},
+ "source": [
+ "## Step 4: Fluctuations"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "36a3cd23",
+ "metadata": {},
+ "source": [
+ "The last structure to run is Power_Spectra, which uses our lognormal and log-chisquare prescription to compute the statistics of IGM fluctuations in the form of two-point functions.\n",
+ "\n",
+ "Note that the new version of Zeus includes a modified prescription for computing power spectra. The form for the 21-cm brightness temperature used in the old version of Zeus is\n",
+ "\n",
+ "\\begin{equation}\n",
+ "T_{21}=T_0(z)\\left(1+\\delta-\\delta_v\\right) x_{\\mathrm{HI}}\\left(\\frac{x_\\alpha}{1+x_\\alpha}\\right)\\left(1-\\frac{T_{\\mathrm{CMB}}}{T_c}\\right)\n",
+ "\\end{equation}\n",
+ "\n",
+ "where the leftmost $\\delta$ term is the total matter overdensity. Because $T_{21}$ tracks neutral hydrogen fluctuations, we make the substitution $\\delta \\rightarrow \\delta_b$. Thus, the large-scale structure (LSS) terms that fold in to computing $\\Delta^2_{21}(k,z)$ now depend on the baryon power spectrum $P_\\mathrm{b}(k,z)$ and the baryon-dark matter cross power spectrum $P_\\mathrm{b,cdm}(k,z)$.\n",
+ "\n",
+ "This new feature can be toggled with UserParams.USE_BARYON_FLAG = 1 for the new $\\delta_b$ prescription or UserParams.USE_BARYON_FLAG = 0 for the old $\\delta$ form."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f80f6e74",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "RSDMODE = 1\n",
+ "\n",
+ "UserParams.USE_BARYON_FLAG = 1\n",
+ "PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, CoeffStructure, RSD_MODE = RSDMODE)\n",
+ "klist = PS21.klist_PS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ff154eb4",
+ "metadata": {},
+ "source": [
+ "## Plotting Results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "62acc2ca",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from scipy.interpolate import RegularGridInterpolator\n",
+ "\n",
+ "interp = RegularGridInterpolator((zlist, klist), PS21.Deltasq_T21, method = 'cubic', bounds_error=False, fill_value=0)\n",
+ "interpLin = RegularGridInterpolator((zlist, klist), PS21.Deltasq_T21_lin, method = 'cubic', bounds_error=False, fill_value=0)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0a03d011",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#choose a z to plot\n",
+ "kchoose=0.3 \n",
+ "zlistHighRes = np.geomspace(zlist[0], zlist[-1], 1000)\n",
+ "\n",
+ "powerSpectrum = interp((zlistHighRes, kchoose))\n",
+ "powerSpectrumLin = interpLin((zlistHighRes, kchoose))\n",
+ "\n",
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.semilogy(zlistHighRes, powerSpectrum, color=\"#E64D4E\", linewidth=3.0, label = 'Nonlinear')\n",
+ "plt.semilogy(zlistHighRes, powerSpectrumLin, color=\"#0B92B1\", linewidth=3.0, linestyle = 'dashed', label = 'Linear')\n",
+ "\n",
+ "plt.xlim([10, 25])\n",
+ "plt.ylim([1,200])\n",
+ "\n",
+ "plt.xlabel(r'$z$', fontsize = 30)\n",
+ "plt.ylabel(r'$\\Delta^2_{21}\\,\\rm[mK^2]$', fontsize = 30)\n",
+ "\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "plt.legend(fontsize=20, frameon = False)\n",
+ "plt.tight_layout()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "730f80cd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#choose a z to plot\n",
+ "zchoose=16\n",
+ "klistHighRes = np.geomspace(1e-4, 1e1, 1000)\n",
+ "\n",
+ "powerSpectrum = interp((zchoose, klistHighRes))\n",
+ "powerSpectrumLin = interpLin((zchoose, klistHighRes))\n",
+ "\n",
+ "plt.figure(figsize = (12, 6.75))\n",
+ "\n",
+ "plt.loglog(klistHighRes, powerSpectrum, color=\"#E64D4E\", linewidth=3.0, label = 'Nonlinear')\n",
+ "plt.loglog(klistHighRes, powerSpectrumLin, color=\"#0B92B1\", linewidth=3.0, linestyle = 'dashed', label = 'Linear')\n",
+ "\n",
+ "plt.xlim([1e-3,1e0])\n",
+ "plt.ylim([1e-1,1e3])\n",
+ "\n",
+ "plt.xlabel(r'$k\\,\\rm [Mpc^{-1}]$', fontsize = 30)\n",
+ "plt.ylabel(r'$\\Delta^2_{21}\\,\\rm[mK^2]$', fontsize = 30)\n",
+ "plt.xticks(fontsize=30)\n",
+ "plt.yticks(fontsize=30)\n",
+ "plt.tick_params(which='major', length=12, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(which='minor', length=5, width=2, direction='in', top = True, bottom = True, left = True, right = True)\n",
+ "plt.tick_params(axis=\"y\", labelsize=30, pad = 10)\n",
+ "plt.tick_params(axis=\"x\", labelsize=30, pad = 10)\n",
+ "plt.legend(fontsize=20, frameon = False)\n",
+ "plt.tight_layout()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4c7cc3ff",
+ "metadata": {},
+ "source": [
+ "For questions, don't hesitate to reach out to hcruz2@jhu.edu!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7c58d071",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "21zeus_hack",
+ "language": "python",
+ "name": "21zeus_hack"
+ },
+ "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.11.13"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/docs/tutorials/Tutorial_Zeus21_UVLFs.ipynb b/docs/tutorials/Tutorial_Zeus21_UVLFs.ipynb
new file mode 100644
index 0000000..4237e6f
--- /dev/null
+++ b/docs/tutorials/Tutorial_Zeus21_UVLFs.ipynb
@@ -0,0 +1,546 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This tutorial will cover how to generate UVLFs from Zeus21. It is recommended to do the basics tutorial first, to get a handle on how the code works. That said, this can stand on its own, so let's go!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import zeus21\n",
+ "from matplotlib import pyplot as plt\n",
+ "import numpy as np\n",
+ "import copy\n",
+ "\n",
+ "# Set up the user parameters\n",
+ "UserParams = zeus21.User_Parameters(precisionboost=1.2)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We first set up the cosmology and astrophysics. \n",
+ "\n",
+ "We do not need to go as far as the 21-cm calculation when doing UVLFs. We do not need the Coeff or PS21 structures (since we won't compute 21-cm in this tutorial), nor do we need the correlation functions. We do need the HMFs, though.\n",
+ "\n",
+ "The astrophysical parameters are shared between the UVLF and the 21-cm calculation, so one can jointly do inference. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Set up the Zeus21 cosmology\n",
+ "CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, HMF_CHOICE=\"ST\", zmin_CLASS=0.0) # CLASS is automatically run by the Cosmo_Parameter class; make sure to provide zmin_CLASS lower than default (5.0) if you want lower z results (e.g. HMFs)\n",
+ "HMFinterp = zeus21.HMF_interpolator(UserParams, CosmoParams) # HMF at all desired z and M; here HMF from Sheth&Tormen2002 (https://arxiv.org/abs/astro-ph/0105113)\n",
+ "\n",
+ "# Set up the astrophysical parameters\n",
+ "AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams, accretion_model=\"exp\") # Here exponential accretion model, as in https://arxiv.org/abs/2306.09403"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now we have to define the LF parameters. You can run with the default set, but let's spice things up a bit. Let's define two:\n",
+ "- one with a standard halo-galaxy connection;\n",
+ "- one with a very stochastic halo-galaxy connection, but lower UV brightness per galaxy (smaller f* at peak).\n",
+ "\n",
+ "We also have to define the redshift and magnitudes over which to plot. You give an arbitrary \\ and width dz, and the code will assume the selection function is a Gaussian around it. For magnitudes, you provide centers and widths of bins, assumed to be tophats. It will then generate the UVLF under those specs. Make sure the binning of z and MUV are the same as whatever data you're considering!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "z, dz = 5.0, 0.5 # Central z and width (assumed Gaussian)\n",
+ "\n",
+ "MUV_centers = np.linspace(-17,-23,13) # Centers of MUV bins\n",
+ "MUV_widths = -np.diff(MUV_centers)\n",
+ "MUV_widths = np.append(MUV_widths, MUV_widths[-1])\n",
+ "\n",
+ "# Set up the LF parameters\n",
+ "LFParams_std = zeus21.LF_Parameters(zcenter=z, zwidth=dz, MUVcenters=MUV_centers, MUVwidths=MUV_widths)\n",
+ "LFParams_bursty = zeus21.LF_Parameters(zcenter=z, zwidth=dz, MUVcenters=MUV_centers, MUVwidths=MUV_widths, sigmaUV=0.9)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "So we can now compute and plot the UVLFs with our adopted parameters. If you're new to the world of the UVLFs, note that the x axis is a UV absolute magnitude, and y is the comoving number density of galaxies at that magnitude (divided by the width of the bin)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/alessandra/SynologyDrive/numerics/zeus21/zeus21_v2_20260630_UVLF-tutorial/zeus21/LFs.py:473: RuntimeWarning: divide by zero encountered in log10\n",
+ " return constants.zeropoint_ABmag_ergsHz - 2.5 * np.log10(L) # AB magnitude\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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ERGRGjBkEREREakBQ1YJ8OlCIiIiehc+XagEPl1IRESkf/h0IREREZEeY8giIiIiUgOGLCIiIiI1YMgiIiIiUgOGLCIiIiI1YMgqAZZwICIiondhCQclsIQDERGR/mEJByIiIiI9xpBFREREpAYMWURERERqwJBFREREpAYMWURERERqwJBFREREpAYMWURERERqwJBVAixGSkRERO/CYqRKYDFSIiIi/cNipERERER6jCGLiIiISA0YsoiIiIjUgCGLiIiISA0YsoiIiIjUgCGLiIiISA0YsoiIiIjUgCGLiIiISA0YsoiIiIjUgCGLiIiISA0YsoiIiIjUgCGrBLhANBEREb0LF4hWAheIJiIi0j9cIJqIiIhIjzFkEREREakBQxYRERGRGjBkEREREakBQxYRERGRGjBkEREREakBQxYRERGRGjBkEREREakBQxYRERGRGjBkEREREakBQxYRERGRGjBkEREREakBQxYRERGRGjBkEREREalBmQ9ZcXFx8PLyQsOGDfH+++8jIyND200iIiKiUsBI2w3QthEjRmDu3Llo06YNUlJSYGpqqu0mERERUSlQpkNWbGwsjI2N0aZNGwCAtbW1lltEREREpYVODxcePnwY3bt3h4ODAyQSCbZu3VromODgYNSsWRNmZmZwc3PDkSNHinz+GzduwMLCAj169ICrqyt++OEHFbaeiIiIyjKd7snKyMiAi4sLPvroI/Tp06fQ/o0bN+LTTz9FcHAwWrdujSVLlsDPzw+XL1+Gk5MTAMDNzQ3Z2dmFvnffvn3Izc3FkSNHEBMTg8qVK6Nz587w8PCAt7e32u+NiIiISjedDll+fn7w8/N74/7ffvsNo0aNwujRowEAv//+O/bu3YtFixZh3rx5AIDo6Og3fn/16tXh4eEBR0dHAECXLl0QExPzxpCVnZ2tENhSU1MBAGlpacW7MSIiItKa/N/bgiCo9To6HbLeJicnB9HR0ZgxY4bCdh8fHxw/frxI5/Dw8MDDhw/x9OlTWFpa4vDhwxg7duwbj583bx7mzJlTaHt+SCMiIiL98eTJE1haWqrt/Hobsh4/fgypVAp7e3uF7fb29khKSirSOYyMjPDDDz+gbdu2EAQBPj4+6Nat2xuPnzlzJgIDA+Xvnz17BmdnZ8THx6v1Q6KiSUtLg6OjI+7du4eKFStquzllGj8L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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "UVLF_std = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams_std).UVLF_tot # AV: using aliases for the new output types defined in LFs, here and in the following\n",
+ "UVLF_bursty = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams_bursty).UVLF_tot\n",
+ "\n",
+ "plt.semilogy(MUV_centers, UVLF_std, 'k-', label=\"Std.\")\n",
+ "plt.semilogy(MUV_centers, UVLF_bursty,'r--', label=\"Bursty\")\n",
+ "plt.xlim(-22,-17)\n",
+ "plt.ylim(1e-6,1e-1)\n",
+ "plt.xlabel(r'$M_{\\rm UV}$');\n",
+ "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$')\n",
+ "plt.legend()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let's play around with parameters."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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p0+XJOXn59d7fKdOndS7d29FRERIklJSUlRQUFBvyCovL68R2IqLiyVJJSUll3djAADAZar/u20YhqnXceuQdTEVFRXKz8/X008/XWN9YmKiNm3a5NA5evfurUOHDunEiRMKDg5Wbm6uHnzwwXr3nz59ul544YVa66tDGgAAaD6OHTum4OBg087fbEPW0aNHVVlZqfbt29dY3759ex08eNChc3h5eenll19W//79ZRiGEhMTNWzYsHr3z8jIUHp6un35119/VefOnVVUVGRqI8ExJSUlioiI0C+//KKgoCBXl9Oq0Rbug7ZwH7SF+yguLlZkZKTpL7w125BVzWKx1Fg2DKPWuou51CPJ8/n6+tY5xUNwcDA/GDcSFBREe7gJ2sJ90Bbug7ZwHx4e5r7/59ZvF15MWFiYPD09a/VaHT58uFbvFgAAQFNrtiHLx8dHVqtVOTk5Ndbn5OQoPj7eRVUBAADYuPXjwtLSUu3atcu+vHv3bhUUFKht27aKjIxUenq6xo4dq9jYWMXFxem9995TUVGRJk2a1CT1+fr6KjMzk1ni3QTt4T5oC/dBW7gP2sJ9NFVbWAyz319shLVr1yohIaHW+tTUVM2bN0+SbTLSV155RQcOHFC3bt30xhtvqH///k1cKQAAQE1uHbIAAACaq2Y7JgsAAMCdEbIAAABMQMgCAAAwASGrAfbs2aPx48crKipK/v7+uu6665SZmamKigr7Pt99953GjBmjiIgI+fv768Ybb9Rbb73lwqpbJkfaQpIee+wxWa1W+fr6KiYmxjXFtgKOtkdRUZGGDx+uNm3aKCwsTI8++mitfdB406ZNU3x8vK644gqFhITUuc8XX3yh+Ph4BQYGqmPHjnrqqad07ty5pi20FXCkLb755hsNGjRIISEhCg0NVWJiogoKCpq0ztbgUm0xb948WSyWOv8OHz58Wddy6ykc3NUPP/ygqqoqzZ49W9dff722b9+uiRMnqqysTK+99pok24ep27Vrp/fff18RERHatGmTHnjgAXl6emrKlCkuvoOWw5G2kGxfArj//vv11VdfaevWrS6suGVzpD0qKys1dOhQtWvXThs2bNCxY8eUmpoqwzA0c+ZMF99By1JRUaFRo0YpLi5Oc+bMqbV969atSklJ0bPPPqv58+dr3759mjRpkiorK2v8ftB4l2qLkydPasiQIbrj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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# First, let's change the astrophysical parameters alpha and beta too to see what they do\n",
+ "AstroParams_lowalpha = copy.deepcopy(AstroParams)\n",
+ "AstroParams_lowalpha.alphastar -= 0.2\n",
+ "UVLF_lowalpha = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams_lowalpha, HMFinterp, LFParams_std).UVLF_tot\n",
+ "\n",
+ "AstroParams_lowbeta = copy.deepcopy(AstroParams)\n",
+ "AstroParams_lowbeta.betastar -= 0.2\n",
+ "UVLF_lowbeta = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams_lowbeta, HMFinterp, LFParams_std).UVLF_tot\n",
+ "\n",
+ "# And the dust assumptions in the LF parameters -- they can be degenerate! (Beware, these are measured independently, see Refs.)\n",
+ "LFParams_lessdust = copy.deepcopy(LFParams_std)\n",
+ "LFParams_lessdust.C0dust -= 0.1\n",
+ "UVLF_lessdust = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams_lessdust).UVLF_tot\n",
+ "LFParams_nodust = copy.deepcopy(LFParams_std) # Added by AV for one-to-one comparison previous tutorial: note that small discrepancy with respect to previous notebook in both UVLF and bias at the bright end, likely due to the different dust loop, while results are recovered with no dust --> TODO: discuss changes with others and whether we should give a warning of some sort\n",
+ "LFParams_nodust.DUST_FLAG = False\n",
+ "UVLF_nodust = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams_nodust).UVLF_tot\n",
+ "\n",
+ "plt.semilogy(MUV_centers, UVLF_std, 'k-', label=\"Std.\")\n",
+ "plt.semilogy(MUV_centers, UVLF_lowalpha,'b--', label=\"Low alpha\")\n",
+ "plt.semilogy(MUV_centers, UVLF_lowbeta,'g--', label=\"Low beta\")\n",
+ "plt.semilogy(MUV_centers, UVLF_lessdust,'r-.', label=\"Less dust\")\n",
+ "plt.semilogy(MUV_centers, UVLF_nodust,'m-.', label=\"No dust\")\n",
+ "plt.xlim(-22,-17)\n",
+ "plt.ylim(1e-6,1e-1)\n",
+ "plt.xlabel(r'$M_{\\rm UV}$');\n",
+ "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$')\n",
+ "plt.legend()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Zeus allows to compute the bias as a function of MUV as well. Let's do that and plot it!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "LFParams_std_bias = copy.deepcopy(LFParams_std)\n",
+ "LFParams_std_bias.RETURNBIAS = True\n",
+ "bias_UVLF_std = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams_std_bias).UVbias_tot # AV: now we can directly compute the normalized bias!\n",
+ "\n",
+ "LFParams_bursty_bias = copy.deepcopy(LFParams_bursty)\n",
+ "LFParams_bursty_bias.RETURNBIAS = True\n",
+ "bias_UVLF_bursty = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams_bursty_bias).UVbias_tot\n",
+ "\n",
+ "#LFParams_nodust_bias = copy.deepcopy(LFParams_nodust) # TODO: remove this part, used for debugging purposes, in order to compare with previous notebook given the different dust loop\n",
+ "#LFParams_nodust_bias.RETURNBIAS = True\n",
+ "#bias_UVLF_nodust = zeus21.LFs.LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams_nodust_bias).UVbias_tot\n",
+ "\n",
+ "plt.plot(MUV_centers, bias_UVLF_std, 'k-', label=\"Std.\")\n",
+ "#plt.plot(MUV_centers, bias_UVLF_nodust, 'k-.', label=\"No dust\")\n",
+ "plt.plot(MUV_centers, bias_UVLF_bursty, 'r--', label=\"Bursty\")\n",
+ "plt.xlim(-22, -17)\n",
+ "plt.ylim(0, 10)\n",
+ "plt.xlabel(r'$M_{\\rm UV}$')\n",
+ "plt.ylabel(r'bias, $b$')\n",
+ "plt.legend()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Note a possible issue: for no/low stochasticity (sigmaUV~0) the UVLF becomes noisy because there are not enough halos in each MUV bin. Can be fixed change precisionboost in constants.py - as we'll do in the next part for Pop IIIs."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Now let's add Pop III stars. Note that Pop IIIs will normally be very faint, so you'll need to go to fainter MUVs to see their effect. We also need higher precisionboost for higher accuracy at these faint MUVs, so we need to recompute the cosmology."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "UserParams_III = zeus21.User_Parameters(precisionboost=2.2) # For accurate results down to MUV~-6\n",
+ "\n",
+ "CosmoParams_III = zeus21.Cosmo_Parameters(UserParams=UserParams_III, HMF_CHOICE=\"ST\")\n",
+ "HMFinterp_III = zeus21.HMF_interpolator(UserParams_III, CosmoParams_III)\n",
+ "\n",
+ "AstroParams_III = zeus21.Astro_Parameters(CosmoParams=CosmoParams_III, accretion_model=\"exp\", USE_POPIII=True) # USE_POPIII = True in the astrophysical parameters to add Pop IIIs to the SFR calculation\n",
+ "\n",
+ "z_III, dz_III = 15.0, 0.5 # We pick a higher redshift to better see the effects at the low-mass end\n",
+ "\n",
+ "MUV_centers_III = np.linspace(-5,-23,100) # We extend to fainter MUVs and increase the number of MUV points\n",
+ "MUV_widths_III = -np.diff(MUV_centers_III)\n",
+ "MUV_widths_III = np.append(MUV_widths_III, MUV_widths_III[-1])\n",
+ "\n",
+ "LFParams_III = zeus21.LF_Parameters(zcenter=z_III, zwidth=dz_III, MUVcenters=MUV_centers_III, MUVwidths=MUV_widths_III, SKIP_POPIII=False) # SKIP_POPIII = False is needed to add the Pop III UVLF calculation - note that this only works if USE_POPIII = True in the astrophysical parameters!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/home/alessandra/SynologyDrive/numerics/zeus21/zeus21_v2_20260630_UVLF-tutorial/zeus21/LFs.py:473: RuntimeWarning: divide by zero encountered in log10\n",
+ " return constants.zeropoint_ABmag_ergsHz - 2.5 * np.log10(L) # AB magnitude\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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H9t0HHX52Ul8fPwtF1nMzT6FzT+vacOGDQQGBlK5cuWsbV27diU5OZlt27aZEbFA1KlTB19fXz755BNSUlK4cuUKn3zyCQ0aNKBatWpmx8s34eHhZGRkcOrUKerVq0fVqlV56KGHOHHihNnR8l1kZCSTJk3i888/t+t6YIVNUXxf+ydneV8rV64c9erV4/PPPycpKYm0tDTmzJmDn58fQUFBZsfLN9u3b+fUqVO4uLjQpEkTKlWqRLdu3di7d+9tHcd53wXs6MiRI8yYMeOmM7Rv2LCB7777jqeeeqoAk+Wv6133mTNncqylWLZsWdzd3XOsu1iUlCxZktWrV/Pll1/i5eWFt7c3y5cvZ9myZRQrVnR71o8ePUpGRgZvvfUW06dP5/vvvycuLo4uXboUyfElmZKTk3nkkUd45513CAgIMDuOaYri+9r1OMv7msViITw8nB07dlCyZEk8PT2ZNm0av/322y3HEhZmmUMUXnvtNV5++WV++eUXypYtS/v27YmLi8v1cVRQXeO1117DYrHc9Gvr1q3Zfub06dPce++9PPjggwwdOvS6x927dy+9evXi1VdfpUuXLgVxKbfF3tdtsVhynMMwjOtuN1NervtGrly5wuDBg2ndujUbN27kr7/+okGDBnTv3p0rV67k85XcHnted0ZGBqmpqXzwwQd07dqVu+++m2+++YZDhw453EBWe173+PHjqVevHo8//ng+p7adPa/7WkXxfe1mCsv72vXk9s/CMAxGjhxJhQoVWLt2LZs3b6ZXr17cf//9REdHm30Zty23152RkQHAhAkTeOCBBwgKCmLevHlYLBYWLlyY6/MV3V+d82DUqFE8/PDDN92nevXqWY9Pnz5Nx44ds9YRvJ7IyEg6derEsGHDePnll+0Z127sed0VK1Zk06ZN2bZduHCB1NTUHL/hme12r/tmvv76a44fP86GDRuyun++/vprypYty08//XTL8xQke153pUqVAKhfv37WtvLly+Pr60tUVFSeM+YHe173ypUr2bNnD99//z1g/WAF8PX1ZcKECbz++us2ZbUne153pqL4vnYzhel97Xpy+2excuVKfvnlFy5cuECpUqUA6/Ju4eHhfPbZZ7z00ksFEdducnvdly5dArK/j3l4eHDHHXfc1vuYCqpr+Pr64uvrm6t9T506RceOHbMq2euNodi7dy+dOnVi4MCBvPnmm/aOazf2vO7g4GDefPNNoqOjsz5sf//9dzw8PByuD/52rvtWLl++jIuLS7bfVjOfZ/724yjsed2tW7cG4MCBA1StWhWAuLg4YmJiHG7smD2v+4cffsjW8rhlyxYGDx7M2rVrqVmzpl3OYS/2vG4omu9rt1KY3teuJ7d/FpcvXwbI8b7u4uLicO9juZHb6w4KCsLDw4MDBw7Qpk0bAFJTUzl+/PhtvY+poMqD06dP06FDBwICAnj33Xc5f/581muZt5Xu3buXjh07EhISwtixY7P62V1dXSlfvrwpuW2Vm+sOCQmhfv36DBgwgHfeeYe4uDjGjRvHsGHDsn7jKYyioqKIi4sjKiqK9PT0rPmlatWqhbe3N126dOH5558nNDSUf/3rX2RkZPD2229TrFix6y7wXVjc6rpr165Nr169eOaZZ5g7dy6lSpVi/Pjx1K1bt0hf9z+LppiYGADq1atXqMea3Oq6i+L7Gtz6uovq+9o/BQcHU7ZsWQYOHMirr76Kl5cXH330EceOHeO+++4zO16+KVWqFCNGjGDixIn4+/tTrVo13nnnHQAefPDB3B/IDnccOp158+YZwHW/Mk2cOPG6r1erVs284DbKzXUbhmH8/fffxn333Wd4eXkZPj4+xqhRo4yrV6+alNo+Bg4ceN3rXrVqVdY+v//+u9G6dWujdOnSRtmyZY1OnToZGzZsMC+0HeTmuuPj443BgwcbZcqUMXx8fIw+ffpkmz6iMMrNdV9r1apVRWLahFtdd1F8XzOM3P19F8X3tevZsmWLERISYvj4+BglS5Y07r77bmPZsmVmx8p3KSkpxnPPPWdUqFDBKFmypHHPPfcYERERt3UMi2H8f+e/iIiIiOSJ7vITERERsZEKKhEREREbqaASERERsZEKKhEREREbqaASERERsZEKKhEREREbqaASERERsZEKKhEREREbqaASERERsZEKKhFxOu3atcNisfDGG29k224YBi1btsRisfDqq6+alE5ECiMVVCLiVAzDYOfOnVSrVo09e/Zke+2zzz7j9OnTADRt2tSMeCJSSKmgEhGncujQIS5dusSgQYOyFVSXLl1i/PjxDBo0CICgoCCTEopIYaSCSkScyrZt2/D09OSRRx7h0KFDJCcnA/DGG2/QuHFjKlWqhK+vL/7+/iYnFZHCRAWViDiV7du307BhQ2rXrk2JEiXYt28fhw4dYtasWUybNo3t27cTFBTE8ePHadasWbafHTRoEL/88gsA7du3Z82aNdlef/rpp/nwww8L7FpExHGooBIRp7Jt2zaCgoKwWCw0bNiQiIgInn32WYYPH07dunXZtm1brsZPPfTQQ3z33XdZz9PT01myZAkPPPBAfsYXEQelgkpEnMqOHTuyCqZGjRrx/vvvs3nzZiZOnEhKSgp79+7NVUHVr18/Fi9eTEZGBgB//vkn9evXp3z58vmaX0QckwoqEXEaR48e5eLFi1kDzhs3bszWrVt58803KV26NHv27CE1NTVXA9L9/PyoXbs2a9euBeC7776jf//++ZpfRByXCioRcRrbtm3D3d2dwMBAAAYOHMj58+cZOnQoYB1fVbZsWWrUqIHFYrnuMa7d3r9/fxYuXEh6ejo///wzffr0yf+LEBGHpIJKRJzG9u3bCQwMxM3NDQA3Nzd8fX2ziqTt27fTpEkTAMqVK8eFCxey/XxcXBy+vr5Zzx944AF++uknVq5cScOGDSlXrlwBXYmIOBqLYRiG2SFERBxRUFAQM2bMoFWrVpw8eZK2bduyZ88evL29s/YJCQnhzJkzPPvsszz55JMmphURM6mgEhG5gYiICEaOHElCQgLFihXjrbfeIiQkJNs+n3zyCU8//TRnz56lbNmyJiUVEbOpoBIRERGxkcZQiYiIiNhIBZWIiIiIjVRQiYiIiNhIBZWIiIiIjVRQiYiIiNhIBZWIiIiIjVRQiYiIiNhIBZWIiIiIjVRQiYiIiNhIBZWIiIiIjVRQiYiIiNhIBZWIiIiIjf4PJI4iOxSx7/0AAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Now we can compute both the Pop III and Pop II components to the UVLF and look at the two contributions separately\n",
+ "LFs = zeus21.LFs.LF_class(UserParams_III, CosmoParams_III, AstroParams_III, HMFinterp_III, LFParams_III)\n",
+ "UVLF_tot = LFs.UVLF_tot\n",
+ "UVLF_pop2 = LFs.UVLF_pop2\n",
+ "UVLF_pop3 = LFs.UVLF_pop3\n",
+ "\n",
+ "# We first plot the SFR per unit halo mass for both components to show what's going into the UVLFs\n",
+ "SFRD = zeus21.sfrd.SFRD_class(UserParams_III, CosmoParams_III, AstroParams_III, HMFinterp_III)\n",
+ "SFE_pop2 = SFRD.SFE(CosmoParams_III, AstroParams_III, HMFinterp_III.Mhtab, z_III, pop=2)\n",
+ "SFE_pop3 = SFRD.SFE(CosmoParams_III, AstroParams_III, HMFinterp_III.Mhtab, z_III, pop=3, vCB=False, J21LW_interp=SFRD.J21LW_interp_conv_avg) # Note that here we need to provide vCB and LW explicitly for this to work, as by default these are put to None, so it doesn't work --> TODO: discuss default init of vcb and J21LW in SFRD for simmetry; also at what z is the conv. avg. computed?\n",
+ "plt.figure()\n",
+ "plt.loglog(HMFinterp_III.Mhtab, SFE_pop2, 'g--', label=\"Pop II\")\n",
+ "plt.loglog(HMFinterp_III.Mhtab, SFE_pop3, 'r-', label=\"Pop III\") # TODO: check slightly higher Pop III SFE than in default by Cruz+25 fig. 2? (this should account correctly for the factor 2 in normalization after replacing the old fstar_III with epsstar_III = fstar_III/2 for symmetry with Pop IIs, perhaps it's something in the LW that is different?)\n",
+ "plt.xlim(1e5, 1e13)\n",
+ "plt.ylim(1e-5, 1e-1)\n",
+ "plt.xlabel(r\"$M_{\\rm h} \\; [\\mathrm{M_\\odot}]$\")\n",
+ "plt.ylabel(r\"$\\dot{M}_\\star / \\dot{M}_\\mathrm{h}$\")\n",
+ "plt.legend()\n",
+ "\n",
+ "# And then the resulting UVLFs\n",
+ "plt.figure()\n",
+ "plt.semilogy(MUV_centers_III, UVLF_pop2, 'g--', label=\"Pop II\")\n",
+ "plt.semilogy(MUV_centers_III, UVLF_pop3, 'r-', label=\"Pop III\")\n",
+ "plt.semilogy(MUV_centers_III, UVLF_tot, 'k:', label=\"Tot.\")\n",
+ "plt.xlim(-22, -6)\n",
+ "plt.ylim(1e-6, 1e2)\n",
+ "plt.xlabel(r'$M_{\\rm UV}$')\n",
+ "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$')\n",
+ "plt.legend()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Then we play around with the physics affecting Pop III star formation at the low-mass end: LW feedback and streaming velocities (see e.g. https://arxiv.org/abs/2407.18294)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Case with no LW feedback\n",
+ "SFE_pop3_noLW = SFRD.SFE(CosmoParams_III, AstroParams_III, HMFinterp_III.Mhtab, z_III, pop=3, J21LW_interp=False, vCB=False)\n",
+ "UVLF_pop3_noLW = zeus21.LFs.LF_class(UserParams_III, CosmoParams_III, AstroParams_III, HMFinterp_III, LFParams_III, J21LW_interp=False).UVLF_pop3\n",
+ "\n",
+ "# Case including feedback from streaming velocities - here we need to redefine the cosmology to include streaming velocities from the start - TODO: discuss possible source of confusion and mistakes, because USE_RELATIVE_VELOCITIES=False by default, but most of the Pop III methods are designed to include streaming velocities by default instead, which may be confusing because the user may expect them to be active, while in reality vcb_avg=0 and the feedback is not taken into account by default; in general, there's a bit of confusion between the defaults, also with the SFRDs (see e.g. previous code block)\n",
+ "CosmoParams_III_vcb = zeus21.Cosmo_Parameters(UserParams=UserParams_III, HMF_CHOICE=\"ST\", USE_RELATIVE_VELOCITIES=True)\n",
+ "HMFinterp_III_vcb = zeus21.HMF_interpolator(UserParams_III, CosmoParams_III_vcb)\n",
+ "AstroParams_III_vcb = zeus21.Astro_Parameters(CosmoParams=CosmoParams_III_vcb, accretion_model=\"exp\", USE_POPIII=True)\n",
+ "SFRD_vcb = zeus21.sfrd.SFRD_class(UserParams_III, CosmoParams_III_vcb, AstroParams_III_vcb, HMFinterp_III_vcb)\n",
+ "SFE_pop3_vcb = SFRD_vcb.SFE(CosmoParams_III_vcb, AstroParams_III_vcb, HMFinterp_III_vcb.Mhtab, z_III, pop=3, J21LW_interp=SFRD.J21LW_interp_conv_avg, vCB=CosmoParams_III_vcb.vcb_avg)\n",
+ "UVLF_pop3_vcb = zeus21.LFs.LF_class(UserParams_III, CosmoParams_III_vcb, AstroParams_III_vcb, HMFinterp_III_vcb, LFParams_III).UVLF_pop3\n",
+ "\n",
+ "plt.figure()\n",
+ "plt.loglog(HMFinterp_III.Mhtab, SFE_pop3, 'r-', label=\"Pop III default\")\n",
+ "plt.loglog(HMFinterp_III.Mhtab, SFE_pop3_noLW, 'b-.', label=\"Pop III w/o LW feedback\")\n",
+ "plt.loglog(HMFinterp_III.Mhtab, SFE_pop3_vcb, 'k:', label=\"Pop III + vCB feedback\")\n",
+ "plt.xlim(1e5, 1e10)\n",
+ "plt.ylim(1e-5, 1e-3)\n",
+ "plt.xlabel(r\"$M_{\\rm h} \\; [\\mathrm{M_\\odot}]$\")\n",
+ "plt.ylabel(r\"$\\dot{M}_\\star / \\dot{M}_\\mathrm{h}$\")\n",
+ "plt.legend()\n",
+ "\n",
+ "plt.figure()\n",
+ "plt.semilogy(MUV_centers_III, UVLF_pop3, 'r-', label=\"Pop III default\")\n",
+ "plt.semilogy(MUV_centers_III, UVLF_pop3_noLW, 'b-.', label=\"Pop III w/o LW feedback\")\n",
+ "plt.semilogy(MUV_centers_III, UVLF_pop3_vcb, 'k:', label=\"Pop III + vCB feedback\")\n",
+ "plt.xlim(-14, -6)\n",
+ "plt.ylim(1e-6, 1e2)\n",
+ "plt.xlabel(r'$M_{\\rm UV}$')\n",
+ "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$')\n",
+ "plt.legend()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Finally, let's see what happens if we extend Pop III formation beyond minihalos and into the atomic-cooling halo regime, as in https://arxiv.org/abs/2505.20263."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlkAAAG/CAYAAABrDcJFAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZzNJREFUeJzt3Xd4VFX+BvD3zkwyaaSTRgqBUBJKGh1EERVRUWyLiAqKrij+UFlxLasiirrY1w12AXvHVayoSC8hEAgkQMCEAGmQ3qbf3x/XTDKkkDIzd8r7eZ48mdx7Z+ab3CTzzjnnniOIoiiCiIiIiKxKIXcBRERERK6IIYuIiIjIBhiyiIiIiGyAIYuIiIjIBhiyiIiIiGyAIYuIiIjIBhiyiIiIiGyAIYuIiIjIBhiyiIiIiGyAIYuIiIjIBhiyiIiIiGzArUNWXV0dRo8ejZSUFIwYMQJvv/223CURERGRixDceYFoo9EIrVYLHx8fNDY2Yvjw4cjMzERISIjcpREREZGTc+uWLKVSCR8fHwCARqOB0WiEG2dOIiIisiKHDlmbNm3CjBkzEBUVBUEQ8M0337Q5ZuXKlYiPj4eXlxfS09OxefPmbj1HdXU1kpOTER0djQcffBChoaFWqp6IiIjcmUruAjrT0NCA5ORk3Hrrrbj22mvb7P/ss89w3333YeXKlZg4cSLefPNNTJ8+Hbm5uYiNjQUApKenQ6vVtrnvL7/8gqioKAQGBmLfvn0oKyvDNddcg+uuuw7h4eHt1qPVai0ey2QyobKyEiEhIRAEwUrfNREREdmSKIqoq6tDVFQUFAobtjeJTgKAuHbtWottY8aMERcsWGCxbejQoeJDDz3Uo+dYsGCB+Pnnn3e4/4knnhAB8IMf/OAHP/jBDxf4OHHiRI/yQlc5dEtWZ3Q6HbKysvDQQw9ZbL/kkkuwbdu2Lj1GWVkZvL294e/vj9raWmzatAl33XVXh8c//PDDWLx4sfnrmpoaxMbG4sSJE/D39+/ZN0JERER2VVtbi5iYGPTp08emz+O0IevMmTMwGo1tuvbCw8NRWlrapcc4efIk5s+fD1EUIYoi7rnnHowcObLD49VqNdRqdZvt/v7+DFlEREROxtZDfZw2ZDU7+wckimKXf2jp6enIzs62QVVERETk7hz66sLOhIaGQqlUtmm1Ki8v73DgOhEREZG9OG3I8vT0RHp6OtavX2+xff369ZgwYYJMVRERERFJHLq7sL6+HkePHjV/XVBQgOzsbAQHByM2NhaLFy/GzTffjFGjRmH8+PF46623UFRUhAULFshYNRERNTMajdDr9XKXQW7Gw8MDSqVS7jIcO2Tt3r0bU6ZMMX/dfGXf3LlzsXr1asyaNQsVFRVYtmwZSkpKMHz4cPzwww+Ii4uTq2QiIoI0Pra0tBTV1dVyl0JuKjAwEBEREbLOY+nWaxf2VEZGBjIyMmA0GnHkyBHU1NTw6kIiolZKSkpQXV2NsLAw+Pj4cMJmshtRFNHY2Ijy8nIEBgYiMjKyzTG1tbUICAiw+es3Q1Yv2OskERE5k+Y3oGFhYQgJCZG7HHJTFRUVKC8vx+DBg9t0Hdrr9dtpB74TEZFjah6D5ePjI3Ml5M6af//kHBPIkEVERDbBLkKSkyP8/jFkEREREdkAQxYREZELmjdvHmbOnNmt+2zduhUjRoyAh4dHt+/bmf79++OVV16x2uM5C4YsIiKiv8ybNw+CIEAQBHh4eGDAgAF44IEH0NDQYNPnPTuEnOtrW1m8eDFSUlJQUFCA1atX2+x5BEHAN998Y7PHdxQOPU8WERGRvV166aVYtWoV9Ho9Nm/ejNtvvx0NDQ14/fXX5S7N5o4dO4YFCxYgOjpa7lJcAluyiIjI9kQRaGiQ56ObMxWp1WpEREQgJiYGN954I+bMmWNuddFqtVi0aBHCwsLg5eWFSZMmITMz03zfP/74A4Ig4Pvvv0dycjK8vLwwduxY5OTkWPOn2YbRaMTixYsRGBiIkJAQPPjggzh7hiZRFLFixQoMGDAA3t7eSE5OxpdffgkAKCwshCAIqKiowG233QZBELB69WoYjUbMnz8f8fHx8Pb2xpAhQ/Dqq69aPO4FF1yA++67z2LbzJkzMW/evHZr7d+/PwDg6quvhiAI5q9dEUMWERHZXmMj4Ocnz0djY69K9/b2Nk8D8OCDD+Krr77CmjVrsGfPHiQkJGDatGmorKy0uM+SJUvwwgsvIDMzE2FhYbjyyittOpXAiy++iPfeew/vvvsutmzZgsrKSqxdu9bimH/9619YtWoVXn/9dRw8eBD3338/brrpJmzcuBExMTEoKSmBv78/XnnlFZSUlGDWrFkwmUyIjo7G559/jtzcXDz++ON45JFH8Pnnn/e41uZQumrVKpSUlFiEVFfD7sIeaD3jOxERua5du3bh448/xtSpU81dhqtXr8b06dMBAG+//TbWr1+Pd999F0uWLDHf74knnsDFF18MAFizZg2io6Oxdu1a/O1vf7NJna+88goefvhhXHvttQCAN954Az///LN5f0NDA1566SX8/vvvGD9+PABgwIAB2LJlC958802cf/755iVoAgICEBERYb7vk08+ab4dHx+Pbdu24fPPP+/x99K3b18ALcveuDKGrB5YuHAhFi5caJ4xloiIzsHHB6ivl++5u2HdunXw8/ODwWCAXq/HVVddhddeew3Hjh2DXq/HxIkTzcd6eHhgzJgxyMvLs3iM5iADAMHBwRgyZEibY6ylpqYGJSUlFs+pUqkwatQoc5dhbm4uNBqNOfg10+l0SE1N7fTx33jjDbzzzjs4fvw4mpqaoNPpkJKSYvXvwxUxZBERke0JAuDrK3cVXTJlyhS8/vrr8PDwQFRUFDw8PABI6zECbSe5FEWxSxNfyjk5pslkAgB8//336Nevn8U+tVrd4f0+//xz3H///XjxxRcxfvx49OnTB88//zx27txpPkahULQZ/yXnLOuOhGOyiIiIWvH19UVCQgLi4uLMAQsAEhIS4OnpiS1btpi36fV67N69G4mJiRaPsWPHDvPtqqoqHDlyBEOHDrVJvQEBAYiMjLR4ToPBgKysLPPXSUlJUKvVKCoqQkJCgsVHTExMh4+9efNmTJgwAXfffTdSU1ORkJCAY8eOWRzTt29fcwAFpEH4Bw4c6LRmDw8Ptxhyw5YsIiKiLvD19cVdd92FJUuWIDg4GLGxsVixYgUaGxsxf/58i2OXLVuGkJAQhIeH49FHH0VoaKhVJ/c827333ovnnnsOgwYNQmJiIl566SVUV1eb9/fp0wcPPPAA7r//fphMJkyaNAm1tbXYtm0b/Pz8MHfu3HYfNyEhAe+//z5+/vlnxMfH44MPPkBmZibi4+PNx1x44YVYvHgxvv/+ewwcOBAvv/yyxXO3p3///vjtt98wceJEqNVqBAUFWePH4HAYsoiIiLroueeeg8lkws0334y6ujqMGjUKP//8c5uQ8Nxzz+Hee+9Ffn4+kpOT8e2338LT09Nmdf3jH/9ASUkJ5s2bB4VCgdtuuw1XX301ampqzMc89dRTCAsLw7PPPos///wTgYGBSEtLwyOPPNLh4y5YsADZ2dmYNWsWBEHA7Nmzcffdd+PHH380H3Pbbbdh3759uOWWW6BSqXD//fdjypQpndb74osvYvHixXj77bfRr18/FBYW9vpn4IgE8eyOVOqy5oHvNTU18Pf3l7scIiKHoNFoUFBQgPj4eHh5ecldjl398ccfmDJlCqqqqhAYGCh3OW6ts99De71+c0wWERERkQ0wZBERERHZAMdkERERWckFF1zQZjoDcl9syeqBjIwMJCUlYfTo0XKXQkRERA6KIasHFi5ciNzcXJdeb4mIiIh6hyGLiIiIyAYYsoiIiIhsgCGLiIiIyAYYsoiIiIhsgCGLiIiI7Gr16tVWmRFfEAR88803vX4cW2HIIiIi+su8efMgCAIEQYCHhwcGDBiABx54AA0NDTZ93v79++OVV17p8tfWVlhYCEEQkJ2dbbPncEecjJSIiKiVSy+9FKtWrYJer8fmzZtx++23o6GhAa+//rrcpZGTYUsWERHZjbHBCGOD0WJWdJPOBGODESatqf1jTa2O1UvHGjXGLh3bE2q1GhEREYiJicGNN96IOXPmmLuktFotFi1ahLCwMHh5eWHSpEkWcyb+8ccfEAQB33//PZKTk+Hl5YWxY8ciJyenR7V0x6pVq5CYmAgvLy8MHToUK1euNO+77bbbMHLkSGi1WgCAXq9Heno65syZAwCIj48HAKSmpkIQBFxwwQVdetzmFrCvv/4aU6ZMgY+PD5KTk7F9+3aL2lavXo3Y2Fj4+Pjg6quvRkVFRZv6v/vuO6Snp8PLywsDBgzAk08+CYPBYN6fn5+PyZMnw8vLC0lJSVi/fn3vf2g2xpBFRER2s9lvMzb7bYb+jN687cTzJ7DZbzPy78m3OHZr2FZs9tsMTZHGvO1Uxils9tuMw/MPWxy7o/8ObPbbjMa8RvO20tWlVqnZ29sber1U74MPPoivvvoKa9aswZ49e5CQkIBp06ahsrLS4j5LlizBCy+8gMzMTISFheHKK680P4YtvP3223j00UexfPly5OXl4ZlnnsFjjz2GNWvWAAD+85//oKGhAQ899BAA4LHHHsOZM2fMgWnXrl0AgF9//RUlJSX4+uuvu/S4zR599FE88MADyM7OxuDBgzF79mxzQNq5cyduu+023H333cjOzsaUKVPw9NNPW9z/559/xk033YRFixYhNzcXb775JlavXo3ly5cDAEwmE6655hoolUrs2LEDb7zxBv75z3/a6KdpRSL1WE1NjQhArKmpkbsUIiKH0dTUJObm5opNTU1t9m3ABnEDNojacq15W+HTheIGbBAP3X7I4tiNPhvFDdggNhY0mrcVvVwkbsAG8eCNBy2O3RK6RdyADWL9gXrztlNvnep27XPnzhWvuuoq89c7d+4UQ0JCxL/97W9ifX296OHhIX700Ufm/TqdToyKihJXrFghfX8bNogAxE8//dR8TEVFhejt7S1+9tlnHT5vXFyc+PLLL3f567PFxMSIH3/8scW2p556Shw/frz5623btokeHh7iY489JqpUKnHjxo3mfQUFBSIAce/evd163Ob7vfPOO+b9Bw8eFAGIeXl5oiiK4uzZs8VLL73U4jFmzZolBgQEmL8+77zzxGeeecbimA8++ECMjIwURVEUf/75Z1GpVIonTpww7//xxx9FAOLatWvb/Zl09ntor9dvjskiIiK7Oa/+PACAwqelIyVmSQyi74uGoBIsjp1YPlE61rvl2H4L+yHqjihAafm44wrHtTk2Yl5Ej2pct24d/Pz8YDAYoNfrcdVVV+G1117DsWPHoNfrMXHiRPOxHh4eGDNmDPLy8iweY/z48ebbwcHBGDJkSJtjrOX06dM4ceIE5s+fjzvuuMO83WAwICAgwKKmBx54AE899RT++c9/YvLkyVZ5XAAYOXKk+XZkZCQAoLy8HEOHDkVeXh6uvvpqi+PHjx+Pn376yfx1VlYWMjMzzS1XAGA0GqHRaNDY2Ii8vDzExsYiOjra4jEcHUNWD2RkZCAjIwNGo/HcBxMRkZnSV9lmm8JTAXh28VgPBeDRjWN7YMqUKXj99dfh4eGBqKgoeHhIT1hSUgJAmjagNVEU22xrT1eO6QmTSRp79vbbb2Ps2LEW+5RKpcVxW7duhVKpRH6+Zddsbx4XgPlnBLR8n833F1uNv+vsuZ588klcc801bfZ5eXm1+xi2+nlaE8dk9QAXiCYicl2+vr5ISEhAXFycRXhISEiAp6cntmzZYt6m1+uxe/duJCYmWjzGjh07zLerqqpw5MgRDB061Cb1hoeHo1+/fvjzzz+RkJBg8dE8oB0Ann/+eeTl5WHjxo34+eefsWrVKvM+T08p5bZuPOjq455LUlKSxc8DQJuv09LScPjw4TbPk5CQAIVCgaSkJBQVFaG4uNh8n7MH1zsitmQRERF1ga+vL+666y4sWbIEwcHBiI2NxYoVK9DY2Ij58+dbHLts2TKEhIQgPDwcjz76KEJDQzFz5kyb1bZ06VIsWrQI/v7+mD59OrRaLXbv3o2qqiosXrwY2dnZePzxx/Hll19i4sSJePXVV3Hvvffi/PPPx4ABAxAWFgZvb2/89NNPiI6OhpeXFwICAs75uF2xaNEiTJgwAStWrMDMmTPxyy+/WHQVAsDjjz+OK664AjExMbj++uuhUCiwf/9+5OTk4Omnn8ZFF12EIUOG4JZbbsGLL76I2tpaPProo7b4UVoVW7KIiIi66LnnnsO1116Lm2++GWlpaTh69Ch+/vlnBAUFtTnu3nvvRXp6OkpKSvDtt9+aW4ts4fbbb8c777yD1atXY8SIETj//POxevVqxMfHQ6PRYM6cOZg3bx5mzJgBAJg/fz4uuugi3HzzzTAajVCpVPjPf/6DN998E1FRUbjqqqvO+bhdNW7cOLzzzjt47bXXkJKSgl9++QX/+te/LI6ZNm0a1q1bh/Xr12P06NEYN24cXnrpJcTFxQEAFAoF1q5dC61WizFjxuD222+3GL/lqASxK52l1K7a2loEBASgpqYG/v7+cpdDROQQNBoNCgoKEB8fDy8vL7nLsas//vgDU6ZMQVVVlVWWjaGe6+z30F6v32zJIiIiIrIBhiwiIiIiG+DAdyIiIiu54IILujRlAbkHtmQRERER2QBDFhER2QRbdEhOjvD7x5BFRERW1TyBZ2Nj4zmOJLKd5t+/1hPK2hvHZBERkVUplUoEBgaivLwcAODj4+MUS6CQaxBFEY2NjSgvL0dgYGCbJYDsiSGLiIisLiJCWpy5OWgR2VtgYKD591AuDFlERGR1giAgMjISYWFh0Ov1cpdDbsbDw0PWFqxmDFk9kJGRgYyMDIuFNImIqC2lUukQL3ZEcuCyOr3AZXWIiIicD5fVISIiInJiDFlERERENsCQRURERGQDDFlERERENsCQRURERGQDDFlERERENsCQRURERGQDDFlERERENsCQRURERGQDDFlERERENsCQRURERGQDDFlERERENsCQRURERGQDDFlERERENsCQRURERGQDDFlERERENsCQ1QMZGRlISkrC6NGj5S6FiIiIHJQgiqIodxHOqra2FgEBAaipqYG/v7/c5RAREVEX2Ov1my1ZRERERDbA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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlQAAAG7CAYAAAAFYgvjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAcipJREFUeJzt3XlcVPX+x/HXsIMIsiiKgOJSiiYqmqmpWTfNW251y+rmkrZYdsto9dq+2c8WqytatlndW9mmt1Wz1LTMXUrFckNxwQVBEJBt5vz+mOsUoQnMDGcG3s/HYx7MnDmc8z6I8OH7/Z7v12IYhoGIiIiI1JqP2QFEREREvJ0KKhEREREnqaASERERcZIKKhEREREnqaASERERcZIKKhEREREnqaASERERcZIKKhEREREnqaASERERcZIKKhEREREnqaASERERcVKDL6j27t3LBRdcQFJSEl26dOHDDz80O5KIiIh4GUtDXxw5OzubQ4cO0bVrVw4fPkz37t359ddfadSokdnRRERExEv4mR3AbC1atKBFixYANGvWjMjISHJzc1VQiYiISLV5fZff8uXLGTp0KLGxsVgsFhYsWFBln1mzZpGYmEhQUBApKSmsWLHilMdat24dNpuN+Ph4N6cWERGR+sTrC6qioiKSk5OZOXPmKd+fN28ekydPZurUqWzcuJF+/foxZMgQsrKyKu139OhRxowZw5w5c+oitoiIiNQj9WoMlcViYf78+YwYMcKxrVevXnTv3p3Zs2c7tnXs2JERI0Ywbdo0AEpLS7n44ou58cYbGT169GmPX1paSmlpqeO1zWYjNzeXqKgoLBaL6y9IREREXM4wDI4fP05sbCw+Pq5pW6rXY6jKyspYv349999/f6XtgwYNYuXKlYD9izpu3DguvPDCPy2mAKZNm8ajjz7qtrwiIiJSd/bu3UtcXJxLjlWvC6qcnBysVisxMTGVtsfExHDw4EEAfvjhB+bNm0eXLl0c46/eeecdzjnnnCrHmzJlCqmpqY7X+fn5JCQksHfvXsLCwtx3ISIiIuIyBQUFxMfH07hxY5cds14XVCf9sTvOMAzHtvPPPx+bzVat4wQGBhIYGEhaWhppaWlYrVYAwsLCVFCJiIh4GVcO1/H6Qel/Jjo6Gl9fX0dr1EmHDx+u0mpVE5MmTSIjI4O1a9c6G1FERETqgXpdUAUEBJCSksLixYsrbV+8eDF9+vSp9XHT0tJISkqiZ8+ezkYUERGResDru/wKCwvZsWOH43VmZibp6elERkaSkJBAamoqo0ePpkePHvTu3Zs5c+aQlZXFxIkTa33OSZMmMWnSJAoKCggPD3fFZYiIiIgX8/qCat26dQwcONDx+uSg8bFjxzJ37lxGjRrF0aNHeeyxx8jOzqZz5858+eWXtGrVqk7yGYZBRUWFY7yVSF3x9fXFz89PU3qIiNSBejUPVV35/aD0bdu2kZ+ff8pB6WVlZWRnZ1NcXGxCShEICQmhRYsWBAQEmB1FRMRjnOxhOt3v79pQQeWEP/sHsdlsbN++HV9fX5o2bUpAQIBaCqTOGIZBWVkZR44cwWq10r59e5dNXici4u3cUVB5fZefpyorK3OsCxgSEmJ2HGmAgoOD8ff3Z8+ePZSVlREUFGR2JBGRekt/stZCTe7yU6uAmEnffyIidUM/bWtB81CJiIjI76mgknpt3LhxlRbLro4ffviBc845B39//xp/7p9p3bo1L7zwgsuOJyIinkMFlVQxbtw4LBYLFosFf39/2rRpw913301RUZFbz/vHguNMr90lNTWVrl27kpmZydy5c912HovF4lg/UkREvJsKqlpoCDOlX3LJJWRnZ7Nr1y6eeOIJZs2axd133212rDqxc+dOLrzwQuLi4mjSpInZcURExAuooKqFhjCGKjAwkObNmxMfH8+1117L3//+d0drSmlpKbfffjvNmjUjKCiI888/v9LXYtmyZVgsFr744guSk5MJCgqiV69ebNq0ya2ZrVYrqampNGnShKioKO69917+OCuIYRhMnz6dNm3aEBwcTHJyMh999BEAu3fvxmKxcPToUcaPH4/FYmHu3LlYrVYmTJhAYmIiwcHBnH322bz44ouVjnvBBRcwefLkSttGjBjBuHHjTpm1devWAIwcORKLxeJ4LSIi3kkFVV0yDCgqMufh5HRjwcHBlJeXA3Dvvffy8ccf89Zbb7FhwwbatWvH4MGDyc3NrfQ599xzD88++yxr166lWbNmDBs2zHEMd3juued44403eP311/n+++/Jzc1l/vz5lfZ54IEHePPNN5k9ezZbtmzhzjvv5LrrruO7774jPj6e7OxswsLCeOGFF8jOzmbUqFHYbDbi4uL44IMPyMjI4KGHHuKf//wnH3zwQa2znixA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dN0NiK67YdF1NywN9bp9fFx3b55H3+X3Z6Kjo/H19a3SGnX48OEqrVYiIiIi7uS1BVVAQAApKSksXry40vbFixfTp08fk1KJiIhIQ+TRXX6FhYXs2LHD8TozM5P09HQiIyNJSEggNTWV0aNH06NHD3r37s2cOXPIyspi4sSJdZIvMDCQhx9+uFazq3szXbeuuyHQdeu6GwJdt+uu22J48CRKy5YtY+DAgVW2jx07lrlz5wL2iT2nT59OdnY2nTt3ZsaMGfTv37+Ok4qIiEhD5tEFlYiIiIg38NoxVCIiIiKeQgWViIiIiJNUUImIiIg4SQVVLT355JP06dOHkJAQmpxhmZGjR48SFxeHxWLh2LFjdZLPXc503UePHuWSSy4hNjaWwMBA4uPjue222xzrJnmrM133Tz/9xDXXXEN8fDzBwcF07NiRF198se6Dulh1vs/vuOMOUlJSCAwMpGvXrnWaz12qc91ZWVkMHTqURo0aER0dze23305ZWVndBq0DGzZs4OKLL6ZJkyZERUVx0003UVhYaHYst9u2bRvDhw8nOjqasLAw+vbty9KlS82O5VbLli3DYrGc8rF27Vqz47ndF198Qa9evQgODiY6OprLL7+8Rp+vgqqWysrKuPLKK7nlllvOuO+ECRPo0qVLHaRyvzNdt4+PD8OHD+fTTz9l27ZtzJ07l2+++abOprJwlzNd9/r162natCn//ve/2bJlC1OnTmXKlCnMnDmzjpO6VnW+zw3DYPz48YwaNaoOk7nXma7barVy6aWXUlRUxPfff8/777/Pxx9/zF133VXHSd3rwIED/OUvf6Fdu3asXr2ahQsXsmXLFsaNG2d2NLe79NJLqaioYMmSJaxfv56uXbty2WWXVXtpM2/Up08fsrOzKz1uuOEGWrduTY8ePcyO51Yff/wxo0eP5vrrr+enn37ihx9+4Nprr63ZQQxxyptvvmmEh4ef9v1Zs2YZAwYMML799lsDMPLy8uosmzud6bp/78UXXzTi4uLcG6iO1OS6b731VmPgwIHuDVRHqnPdDz/8sJGcnFwneerK6a77yy+/NHx8fIz9+/c7tr333ntGYGCgkZ+fX4cJ3euVV14xmjVrZlitVse2jRs3GoCxfft2E5O515EjRwzAWL58uWNbQUGBARjffPONicnqVllZmdGsWTPjscceMzuKW5WXlxstW7Y0XnvtNaeOoxYqN8rIyOCxxx7j7bffdul6Qd7kwIEDfPLJJwwYMMDsKHUuPz/fpQtviuf48ccf6dy5M7GxsY5tgwcPprS0lPXr15uYzLVKS0sJCAio9PMrODgYgO+//96sWG4XFRVFx44defvttykqKqKiooJXXnmFmJgYUlJSzI5XZz799FNycnLqfYvkhg0b2L9/Pz4+PnTr1o0WLVowZMgQtmzZUqPjNMzf8nWgtLSUa665hmeeeYaEhASz49S5a665hpCQEFq2bElYWBivvfaa2ZHq1I8//sgHH3zAzTffbHYUcYODBw9WWTM0IiKCgICAetUldOGFF3Lw4EGeeeYZysrKyMvL45///CcA2dnZJqdzH4vFwuLFi9m4cSONGzcmKCiIGTNmsHDhwjOOma1PXn/9dQYPHkx8fLzZUdxq165dADzyyCM88MADfP7550RERDBgwAByc3OrfRwVVL/zyCOPnHZA3snHunXrqnWsKVOm0LFjR6677jo3p3aeK6/7pBkzZrBhwwYWLFjAzp07SU1NdVP62nPHdQNs2bKF4cOH89BDD3HxxRe7Iblz3HXdns7V122xWKpsMwzjlNs9TXW/Fp06deKtt97iueeeIyQkhObNm9OmTRtiYmLw9fU1+zJqrLrXbRgGt956K82aNWPFihWsWbOG4cOHc9lll3llIVmb7/19+/axaNEiJkyYYFJq51X3um02GwBTp07liiuuICUlhTfffBOLxcKHH35Y7fN59Fp+de22227j6quv/tN9WrduXa1jLVmyhE2bNvHRRx8B9h+0ANHR0UydOpVHH33Uqayu5MrrPql58+Y0b96cDh06EBUVRb9+/XjwwQdp0aKFE0ldyx3XnZGRwYUXXsiNN97IAw884EQ693HHdXsDV1538+bNWb16daVteXl5lJeXV2m58kQ1+Vpce+21XHvttRw6dIhGjRphsVh4/vnnSUxMrIOkrlXd616yZAmff/45eXl5hIWFAfZlzhYvXsxbb73F/fffXxdxXaY23/tvvvkmUVFRDBs2zI3J3Ku61338+HEAkpKSHNsDAwNp06YNWVlZ1T6fCqrfiY6OJjo62iXH+vjjjzlx4oTj9dq1axk/fjwrVqygbdu2LjmHq7jyuk/lZDFZWlrqtnPUhquve8uWLVx44YWMHTuWJ5980mXHdTV3/3t7Klded+/evXnyySfJzs52/JHw9ddfExgY6BVjbGrztThZKL7xxhsEBQV5ZOvrmVT3uouLiwGqjH318fFxtGZ4k5r+exuGwZtvvsmYMWPw9/d3YzL3qu51n5z25ddff+X8888HoLy8nN27d9OqVatqn08FVS1lZWWRm5tLVlYWVquV9PR0ANq1a0doaGiVoiknJweAjh07enUf/Jmu+8svv+TQoUP07NmT0NBQMjIyuPfee+nbt69Xt3qc6bq3bNnCwIEDGTRoEKmpqY5xNL6+vjRt2tTE5M4503UD7Nixg8LCQg4ePMiJEycc+yQlJREQEGBScuec6boHDRpEUlISo0eP5plnniE3N5e7776bG2+80dGiUV/MnDmTPn36EBoayuLFi7nnnnt4+umnvfrn2Jn07t2biIgIxo4dy0MPPURwcDCvvvoqmZmZXHrppWbHc7slS5aQmZnp1d19NREWFsbEiRN5+OGHiY+Pp1WrVjzzzDMAXHnlldU/kPM3HDZMY8eONYAqj6VLl55y/6VLl9aLaRPOdN1LliwxevfubYSHhxtBQUFG+/btjfvuu6/eX/fDDz98yvdbtWplam5nVef7fMCAAafcJzMz07TczqrOde/Zs8e49NJLjeDgYCMyMtK47bbbjJKSEvNCu8no0aONyMhIIyAgwOjSpYvx9ttvmx2pTqxdu9YYNGiQERkZaTRu3Ng477zzjC+//NLsWHXimmuuMfr06WN2jDpVVlZm3HXXXUazZs2Mxo0bG3/5y1+MzZs31+gYFsP4X3+MiIiIiNSK7vITERERcZIKKhEREREnqaASERERcZIKKhEREREnqaASERERcZIKKhEREREnqaASERERcZIKKhEREREnqaASERERcZIKKhFpcPr374/FYuHxxx+vtN0wDHr16oXFYuGhhx4yKZ2IeCMVVCLSoBiGQXp6Oq1atWLTpk2V3nvrrbc4cOAAAN27dzcjnoh4KRVUItKgbN++nePHjzNu3LhKBdXx48eZMmUK48aNAyAlJcWkhCLijVRQiUiDsn79eoKCgrjmmmvYvn07paWlADz++ON07dqVFi1aEB0dTXx8vMlJRcSbqKASkQZlw4YNdOnShbPOOotGjRqxdetWtm/fzqxZs5gxYwYbNmwgJSWF3bt306NHj0qfO27cOD7//HMABgwYwPLlyyu9f8stt/Dyyy/X2bWIiOdQQSUiDcr69etJSUnBYrHQpUsXNm/ezJ133slNN91Ehw4dWL9+fbXGT1111VV88MEHjtdWq5VPP/2UK664wp3xRcRDqaASkQZl48aNjoIpOTmZF198kTVr1vDwww9TVlbGli1bqlVQ/e1vf2PBggXYbDYAvvvuO5KSkmjatKlb84uIZ1JBJSINxq5duzh27JhjwHnXrl1Zt24dTz75JOHh4WzatIny8vJqDUiPiYnhrLPOYsWKFQB88MEHjBo1yq35RcRzqaASkQZj/fr1BAQE0LlzZwDGjh3LkSNHuOGGGwD7+KqIiAgSExOxWCynPMbvt48aNYoPP/wQq9XKZ599xsiRI91/ESLikVRQiUiDsWHDBjp37oy/vz8A/v7+REdHO4qkDRs20K1bNwCioqLIy8ur9Pm5ublER0c7Xl9xxRX897//ZcmSJXTp0oWoqKg6uhIR8TQWwzAMs0OIiHiilJQU/vWvf9GnTx/27dtHv3792LRpE6GhoY59Bg0axMGDB7nzzju5/vrrTUwrImZSQSUichqbN2/m1ltvpaCgAD8/P5566ikGDRpUaZ/XX3+dW265hUOHDhEREWFSUhExmwoqERERESdpDJWIiIiIk1RQiYiIiDhJBZWIiIiIk1RQiYiIiDhJBZWIiIiIk1RQiYiIiDhJBZWIiIiIk1RQiYiIiDhJBZWIiIiIk1RQiYiIiDhJBZWIiIiIk1RQiYiIiDjp/wGPIs0T7whRowAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "AstroParams_III_ACH = copy.deepcopy(AstroParams_III)\n",
+ "AstroParams_III_ACH.Mup_III = 1e10 # We extend the high-mass cut-off (set to the atomic-cooling mass at current z by default) up to a fixed value of 1e10 Msun\n",
+ "AstroParams_III_ACH.betastar_III = -0.5 # Let's also change the slope at the high-mass end, for fun\n",
+ "SFRD_ACH = zeus21.sfrd.SFRD_class(UserParams_III, CosmoParams_III, AstroParams_III_ACH, HMFinterp_III)\n",
+ "SFE_pop3_ACH = SFRD_ACH.SFE(CosmoParams_III, AstroParams_III_ACH, HMFinterp_III.Mhtab, z_III, pop=3, vCB=False, J21LW_interp=SFRD.J21LW_interp_conv_avg)\n",
+ "UVLF_pop3_ACH = zeus21.LFs.LF_class(UserParams_III, CosmoParams_III, AstroParams_III_ACH, HMFinterp_III, LFParams_III).UVLF_pop3\n",
+ "\n",
+ "plt.figure()\n",
+ "plt.loglog(HMFinterp_III.Mhtab, SFE_pop3, 'r-', label=\"Pop III default\")\n",
+ "plt.loglog(HMFinterp_III.Mhtab, SFE_pop3_ACH, 'm:', label=\"Pop III extended\")\n",
+ "plt.xlim(1e5, 1e10)\n",
+ "plt.ylim(1e-5, 1e-3)\n",
+ "plt.xlabel(r\"$M_{\\rm h} \\; [\\mathrm{M_\\odot}]$\")\n",
+ "plt.ylabel(r\"$\\dot{M}_\\star / \\dot{M}_\\mathrm{h}$\")\n",
+ "plt.legend()\n",
+ "\n",
+ "plt.figure()\n",
+ "plt.semilogy(MUV_centers_III, UVLF_pop3, 'r-', label=\"Pop III default\")\n",
+ "plt.semilogy(MUV_centers_III, UVLF_pop3_ACH, 'm:', label=\"Pop III extended\")\n",
+ "plt.xlim(-14, -6)\n",
+ "plt.ylim(1e-6, 1e2)\n",
+ "plt.xlabel(r'$M_{\\rm UV}$')\n",
+ "plt.ylabel(r'$\\Phi_{\\rm UV}\\,\\rm [Mpc^{-3}\\,mag^{-1}]$')\n",
+ "plt.legend()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "TODO: Play around also with a detached ACH component? Although this was not published yet, so probably an overkill for now"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "TODO: Other block playing with Pop III UV boost (potentially including the IMF-dependence as suggested by Sahil) and burstiness? Although I'd say also probably an overkill and maybe better to add after we use this in some published results"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "zeus21_v2test",
+ "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.11.15"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/requirements.txt b/requirements.txt
index bbc242b..c6da339 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,10 +1,9 @@
pytest
-numpy>=2.0
-scipy
-mcfit
-numexpr
-astropy
-powerbox
-pyfftw
sphinx
-myst_parser
\ No newline at end of file
+sphinx-rtd-theme
+sphinx-autoapi
+sphinx-copybutton
+myst-parser
+nbsphinx
+pandoc
+ipykernel
diff --git a/setup.py b/setup.py
index 7a64876..1a74249 100755
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-from setuptools import setup, find_packages
+from setuptools import setup
setup(
@@ -20,5 +20,8 @@
"classy",
"numexpr",
"astropy",
+ "powerbox",
+ "pyfftw",
+ "tqdm"
],
)
diff --git a/tests/test_UVLFs.py b/tests/test_UVLFs.py
index 7c34c47..4458f4f 100644
--- a/tests/test_UVLFs.py
+++ b/tests/test_UVLFs.py
@@ -5,140 +5,193 @@
Author: Claude AI
April 2025
+Edited by Alessandra Venditti
+UT Austin - June 2026
"""
import pytest
import zeus21
import numpy as np
-from zeus21.UVLFs import UVLF_binned, MUV_of_SFR, AUV, beta
+from zeus21.LFs import LF_class
+
+
+def test_luminosity_to_magnitude_conversions():
+ """Test magnitude and luminosity conversions, verifying values and that they are invert of each other"""
+
+ LF = LF_class.__new__(LF_class)
+
+ # Expected Lnu to MUV conversion for a range of Lnu
+ Lnu_test = np.logspace(25., 30., 3) # erg/s/Hz
+ sigma_test = 0.5
+ expected_Lnu_renorm = Lnu_test / np.exp((np.log(10)/2.5 * sigma_test)**2 / 2.0)
+ expected_MUV = 51.63 - 2.5 * np.log10(Lnu_test)
+ expected_MUV_renorm = 51.63 - 2.5 * np.log10(expected_Lnu_renorm)
+
+ # Test from Mag_of_L_ergsHz
+ MUV = LF.Mag_of_L_ergsHz(Lnu_test)
+ np.testing.assert_allclose(MUV, expected_MUV, rtol=1e-12)
+
+ # Test inverse function
+ Lnu_roundtrip = LF.L_ergsHz_of_Mag(MUV)
+ np.testing.assert_allclose(Lnu_roundtrip, Lnu_test, rtol=1e-12)
+
+ # Test from logorMag_of_L
+ MUV = LF.logorMag_of_L(Lnu_test, "UV", renormalize_L=False)
+ MUV_renorm = LF.logorMag_of_L(Lnu_test, "UV", renormalize_L=True, sigma=sigma_test)
+ np.testing.assert_allclose(MUV, expected_MUV, rtol=1e-12)
+ np.testing.assert_allclose(MUV_renorm, expected_MUV_renorm, rtol=1e-12)
-def test_MUV_of_SFR():
- """Test the conversion from SFR to UV magnitudes"""
- # Test a range of SFR values
- SFR_test = np.logspace(-3, 2, 10) # M_sun/yr
- kappaUV_test = 1.15e-28 # Typical value
-
- # Calculate MUV
- MUV_result = MUV_of_SFR(SFR_test, kappaUV_test)
-
- # Check that increasing SFR leads to brighter (more negative) MUV
- assert np.all(np.diff(MUV_result) < 0)
-
- # Check specific value based on the formula M_UV = 51.63 - 2.5*log10(SFR/kappaUV)
- # For SFR = 1 M_sun/yr with kappaUV = 1.15e-28
- expected_MUV = 51.63 - 2.5 * np.log10(1.0/1.15e-28)
- assert MUV_of_SFR(np.array([1.0]), kappaUV_test)[0] == pytest.approx(expected_MUV)
-
- # Test different kappaUV values
- kappaUV_test2 = 2.0e-28
- MUV_result2 = MUV_of_SFR(SFR_test, kappaUV_test2)
-
- # Higher kappaUV should result in fainter magnitudes (more positive)
- assert np.all(MUV_result2 > MUV_result)
-def test_beta_function():
+ # Expected nuLnu to MUV conversion for a range of nuLnu
+ nuLnu_test = np.logspace(40., 45., 3) # erg/s
+ wavelength_test = 1500. # A
+ expected_MUV = 51.63 - 2.5 * np.log10(nuLnu_test / (299792.458 / (wavelength_test/1e13)) )
+
+ # Test from Mag_of_L_ergs
+ MUV = LF.Mag_of_L_ergs(nuLnu_test, wavelength=wavelength_test)
+ np.testing.assert_allclose(MUV, expected_MUV, rtol=1e-12)
+
+ # Test inverse function
+ nuLnu_roundtrip = LF.L_ergs_of_Mag(MUV, wavelength=wavelength_test)
+ np.testing.assert_allclose(nuLnu_roundtrip, nuLnu_test, rtol=1e-12)
+
+
+def test_betaUV_dust():
"""Test the beta (UV slope) calculation"""
+
+ LF = LF_class.__new__(LF_class)
+ LFParams = zeus21.LF_Parameters()
+
# Test a single redshift and magnitude but use arrays as the function expects
z_test = np.array([5.0])
MUV_test = np.array([-20.0])
-
+
# Calculate beta value
- beta_value = beta(z_test, MUV_test)
-
+ beta_value = LF.betaUV_dust(LFParams, z_test, MUV_test)
+
# Check that beta value is reasonable (typical range is -3 to -1)
- assert beta_value > -3.0
- assert beta_value < -1.0
-
+ assert np.all(beta_value > -3.0)
+ assert np.all(beta_value < -1.0)
+
# Test at pivot point
- MUV_pivot = np.array([-19.5]) # The pivot point defined in the code
- beta_at_pivot = beta(z_test, MUV_pivot)
-
+ MUV_pivot = np.array([-19.5])
+ beta_at_pivot = LF.betaUV_dust(LFParams, z_test, MUV_pivot)
+
# Check that a value is returned
assert isinstance(beta_at_pivot, np.ndarray)
-def test_AUV_function():
+
+def test_dust_attenuation():
"""Test the dust attenuation calculation"""
- # Set up parameters
- UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input()
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams)
+
+ LF = LF_class.__new__(LF_class)
+ LFParams = zeus21.LF_Parameters()
+
# Test with arrays as the function expects
z_test = np.array([5.0])
MUV_test = np.array([-20.0])
# Calculate dust attenuation
- A_UV = AUV(AstroParams, z_test, MUV_test)
+ A_UV = LF.dust_attenuation(LFParams, z_test, MUV_test, "UV")
# Check that attenuation is non-negative
assert np.all(A_UV >= 0.0)
+
# Test the HIGH_Z_DUST flag behavior
- z_high = np.array([9.0]) # High redshift above _zmaxdata
- _zmaxdata = 8.0
+ z_high = np.array([9.0, 10.0, 12.0])
+ MUV_test = np.array([-22.0, -20.0, -18.0]) # High redshift above _zmaxdata
# Test with HIGH_Z_DUST=True (dust applied at high z)
- A_UV_high = AUV(AstroParams, z_high, MUV_test, HIGH_Z_DUST=True)
+ LFParams.HIGH_Z_DUST = True
+ A_UV_highz = LF.dust_attenuation(LFParams, z_high, MUV_test, "UV")
+
+ # HIGH_Z_DUST=True should some attenuation for z > _zmaxdata
+ assert np.any(A_UV_highz > 0.0)
+
# Test with HIGH_Z_DUST=False (no dust above _zmaxdata)
- A_UV_no_highz = AUV(AstroParams, z_high, MUV_test, HIGH_Z_DUST=False, _zmaxdata=_zmaxdata)
+ LFParams.HIGH_Z_DUST = False
+ A_UV_no_highz = LF.dust_attenuation(LFParams, z_high, MUV_test, "UV")
# HIGH_Z_DUST=False should give zero attenuation for z > _zmaxdata
assert np.all(A_UV_no_highz == 0.0)
-def test_UVLF_binned():
+
+def test_compute_LFbias_binned_from_SFRlist():
"""Test the binned UV luminosity function calculation"""
+
# Set up parameters
UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS=10., zmax_CLASS=20.)
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams)
- HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)
-
- # Test data
- z_center = 6.0
- z_width = 0.5
- MUV_centers = np.array([-22.0, -20.0, -18.0])
- MUV_widths = np.full_like(MUV_centers, 1.0)
+ CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100., zmax_CLASS=20.)
+ HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
+ AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams, USE_POPIII=False, FLAG_USE_PSD=False)
+
+ LFParams = zeus21.LF_Parameters(FLAG_COMPUTE_UVLF=False, FLAG_COMPUTE_HaLF=False,
+ RETURNBIAS=True,)
+ LF = LF_class(UserParams, CosmoParams, AstroParams, HMFintclass, LFParams)
+
+
+ # Test a range of SFR values
+ SFR_test = np.logspace(-3, 2, HMFintclass.Mhtab.size)
+ kappaUV_test = 1.15e-28 # Typical value
+
+ # Test LF parameters
+ zcenter_test = 6.0
+ zwidth_test = 0.5
+ MUVcenters_test = np.array([-22.0, -20.0, -18.0])
+ MUVwidths_test = np.full_like(MUVcenters_test, 1.0)
+ DUST_FLAG = True
+ sigmaUV_test = 0.5
+
# Calculate UVLF
- uvlf = UVLF_binned(AstroParams, CosmoParams, HMFintclass, z_center, z_width,
- MUV_centers, MUV_widths, DUST_FLAG=True, RETURNBIAS=False)
+ UVLF = LF.compute_LFbias_binned_from_SFRlist(SFR_test, HMFintclass, LFParams,
+ zcenter_test, zwidth_test, MUVcenters_test, MUVwidths_test,
+ kappaUV_test, sigmaUV_test, renormalize_L=True,
+ which_band="UV", include_dust=DUST_FLAG,
+ computeLF=True, computeBias=False).LF
# Check dimensions
- assert uvlf.shape == (3,)
+ assert UVLF.shape == (3,)
# Check that values are positive
- assert np.all(uvlf >= 0.0)
+ assert np.all(UVLF >= 0.0)
# Test that fainter (more positive MUV) bins typically have higher number densities
# This is a general trend for LFs, but not strictly required
# We'll do a weak test that they're not all identical
- assert len(np.unique(uvlf)) > 1
-
+ assert len(np.unique(UVLF)) > 1
+
+
# Test RETURNBIAS flag
- bias_values = UVLF_binned(AstroParams, CosmoParams, HMFintclass, z_center, z_width,
- MUV_centers, MUV_widths, DUST_FLAG=True, RETURNBIAS=True)
+ bias_num = LF.compute_LFbias_binned_from_SFRlist(SFR_test, HMFintclass, LFParams,
+ zcenter_test, zwidth_test, MUVcenters_test, MUVwidths_test,
+ kappaUV_test, sigmaUV_test, renormalize_L=True,
+ which_band="UV", include_dust=DUST_FLAG,
+ computeLF=False, computeBias=True).bias_num
# Check dimensions
- assert bias_values.shape == (3,)
+ assert bias_num.shape == (3,)
# Check that biases are positive
- assert np.all(bias_values >= 0.0)
+ assert np.all(bias_num >= 0.0)
# Test without dust correction
- uvlf_nodust = UVLF_binned(AstroParams, CosmoParams, HMFintclass, z_center, z_width,
- MUV_centers, MUV_widths, DUST_FLAG=False, RETURNBIAS=False)
+ UVLF_nodust = LF.compute_LFbias_binned_from_SFRlist(SFR_test, HMFintclass, LFParams,
+ zcenter_test, zwidth_test, MUVcenters_test, MUVwidths_test,
+ kappaUV_test, sigmaUV_test, renormalize_L=True,
+ which_band="UV", include_dust=False,
+ computeLF=True, computeBias=False).LF
# Check dimensions
- assert uvlf_nodust.shape == (3,)
+ assert UVLF_nodust.shape == (3,)
# Without dust, we expect different values than with dust
- assert not np.array_equal(uvlf, uvlf_nodust)
+ assert not np.array_equal(UVLF, UVLF_nodust)
+
def test_UVLF_binned_with_min_t_formation():
@@ -149,56 +202,11 @@ def test_UVLF_binned_with_min_t_formation():
its maximum stellar mass (all baryons converted to stars) and the minimum formation time.
This should suppress the very bright end of the UVLF without affecting the faint end.
"""
- UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS=10., zmax_CLASS=20.)
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
- HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)
-
- # Use a large sigmaUV to create unphysical scatter into the bright end
- large_sigmaUV = 2.0
- min_t_Myr = 10.0
-
- # AstroParams with the physicality cutoff applied
- AstroParams_cut = zeus21.Astro_Parameters(
- UserParams, CosmoParams,
- sigmaUV=large_sigmaUV,
- min_t_formation_Myr=min_t_Myr
- )
-
- # AstroParams without the cutoff (default None)
- AstroParams_nocut = zeus21.Astro_Parameters(
- UserParams, CosmoParams,
- sigmaUV=large_sigmaUV
- )
-
- z_center = 6.0
- z_width = 0.5
- # Include a very bright bin (-25) where small-halo scatter is cut off,
- # a typical bin (-20), and a faint bin (-15) that should be unaffected
- MUV_centers = np.array([-25.0, -20.0, -15.0])
- MUV_widths = np.full_like(MUV_centers, 1.0)
-
- uvlf_cut = UVLF_binned(
- AstroParams_cut, CosmoParams, HMFintclass,
- z_center, z_width, MUV_centers, MUV_widths,
- DUST_FLAG=False, RETURNBIAS=False
- )
- uvlf_nocut = UVLF_binned(
- AstroParams_nocut, CosmoParams, HMFintclass,
- z_center, z_width, MUV_centers, MUV_widths,
- DUST_FLAG=False, RETURNBIAS=False
- )
-
- # Output must be finite (no NaNs or Infs) with the cutoff applied
- assert np.all(np.isfinite(uvlf_cut)), "UVLF with min_t_formation_Myr cutoff contains NaN or Inf values"
-
- # All values must be non-negative
- assert np.all(uvlf_cut >= 0.0), "UVLF with min_t_formation_Myr cutoff contains negative values"
-
- # The cutoff should suppress the very bright end: small halos that could not
- # physically produce MUV=-25 galaxies (min_MUV~-18.7 for 1e8 Msun with t_min=10 Myr)
- # no longer contribute via scatter, so the bright-end UVLF should be lower
- assert uvlf_cut[0] < uvlf_nocut[0], (
- "min_t_formation_Myr cutoff should suppress the very bright end (MUV=-25) of the UVLF"
- )
\ No newline at end of file
+ pytest.skip("min_t_formation_Myr is not yet a parameter in Astro_Parameters for this branch")
+
+
+# TODO: tests for UVLF with PSD?
+
+# TODO: tests for Halpha LF?
+
+# TODO: tests for Ha/UV ratios?
\ No newline at end of file
diff --git a/tests/test_astrophysics.py b/tests/test_astrophysics.py
index 99e1065..4207a97 100644
--- a/tests/test_astrophysics.py
+++ b/tests/test_astrophysics.py
@@ -16,30 +16,25 @@
from zeus21.sfrd import *
from zeus21.correlations import *
-UserParams = zeus21.User_Parameters()
+ZMIN = 20.0 #down to which z we compute the evolution
+UserParams = zeus21.User_Parameters(zmin=ZMIN)
-CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS = 100.) #to speed up a little
-ClassyCosmo = zeus21.runclass(CosmoParams_input)
-CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
-HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams,ClassyCosmo)
+CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100.) #to speed up a little
+HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
-AstroParams = zeus21.Astro_Parameters(UserParams,CosmoParams)
-AstroParams_popIII = zeus21.Astro_Parameters(UserParams,CosmoParams,USE_POPIII=True)
-ZMIN = 20.0 #down to which z we compute the evolution
-CorrFClass = zeus21.Correlations(UserParams,CosmoParams, ClassyCosmo)
-Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams, HMFintclass, zmin=ZMIN)
-Coeffs_popIII = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams_popIII, HMFintclass, zmin=ZMIN)
+AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams)
+AstroParams_popIII = zeus21.Astro_Parameters(CosmoParams=CosmoParams, USE_POPIII=True)
+Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, AstroParams, HMFintclass)
+Coeffs_popIII = zeus21.get_T21_coefficients(UserParams, CosmoParams, AstroParams_popIII, HMFintclass)
#also for exponential accretion:
-AstroParams_expacc = zeus21.Astro_Parameters(UserParams,CosmoParams, accretion_model=0)
+AstroParams_expacc = zeus21.Astro_Parameters(CosmoParams=CosmoParams, accretion_model="exp")
#and for the 21cmfast mode:
-CosmoParams_input_21cmfast = zeus21.Cosmo_Parameters_Input(Flag_emulate_21cmfast=True)
-ClassyCosmo_21cmfast = zeus21.runclass(CosmoParams_input_21cmfast)
-CosmoParams_21cmfast = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input_21cmfast, ClassyCosmo_21cmfast)
-AstroParams_21cmfast = zeus21.Astro_Parameters(UserParams,CosmoParams_21cmfast, astromodel = 1)
+CosmoParams_21cmfast = zeus21.Cosmo_Parameters(UserParams=UserParams, Flag_emulate_21cmfast=True)
+AstroParams_21cmfast = zeus21.Astro_Parameters(CosmoParams=CosmoParams_21cmfast)
ztest = 20.
@@ -49,45 +44,45 @@
def test_background():
#test SFR first
- sSFR = SFR_II(AstroParams, CosmoParams, HMFintclass, HMFintclass.Mhtab, ztest, ztest)/HMFintclass.Mhtab
+ sSFR = Coeffs.SFRD_Init.SFR(CosmoParams, AstroParams, HMFintclass, HMFintclass.Mhtab, ztest, pop=2)/HMFintclass.Mhtab
assert( (0 <= sSFR).all()) #positive
assert( (sSFR/zeus21.cosmology.Hubinvyr(CosmoParams,ztest) <= 1).all()) #make sure sSFR/H < 1 (not all mass forms stars in a Hubble time)
- sSFR3 = SFR_III(AstroParams, CosmoParams, HMFintclass, HMFintclass.Mhtab, Coeffs_popIII.J21LW_interp_conv_avg, ztest, ztest, ClassyCosmo.pars['v_avg'])/HMFintclass.Mhtab
+ sSFR3 = Coeffs_popIII.SFRD_Init.SFR(CosmoParams, AstroParams_popIII, HMFintclass, HMFintclass.Mhtab, ztest, pop=3, vCB=CosmoParams.vcb_avg, J21LW_interp=Coeffs_popIII.J21LW_interp_conv_avg)/HMFintclass.Mhtab
assert( (0 <= sSFR3).all()) #positive
assert( (sSFR3/zeus21.cosmology.Hubinvyr(CosmoParams,ztest) <= 1).all()) #make sure sSFR3/H < 1 (not all mass forms stars in a Hubble time)
#repeat for Exp Accretion case
- sSFR_exp = SFR_II(AstroParams_expacc, CosmoParams, HMFintclass, HMFintclass.Mhtab, ztest, ztest)/HMFintclass.Mhtab
+ sSFR_exp = Coeffs.SFRD_Init.SFR(CosmoParams, AstroParams_expacc, HMFintclass, HMFintclass.Mhtab, ztest, pop=2)/HMFintclass.Mhtab
assert( (0 <= sSFR_exp).all())
assert( (sSFR_exp/zeus21.cosmology.Hubinvyr(CosmoParams,ztest) <= 1).all())
- sSFR_exp3 = SFR_III(AstroParams_expacc, CosmoParams, HMFintclass, HMFintclass.Mhtab, Coeffs_popIII.J21LW_interp_conv_avg, ztest, ztest, ClassyCosmo.pars['v_avg'])/HMFintclass.Mhtab
+ sSFR_exp3 = Coeffs_popIII.SFRD_Init.SFR(CosmoParams, AstroParams_popIII, HMFintclass, HMFintclass.Mhtab, ztest, pop=3, vCB=CosmoParams.vcb_avg, J21LW_interp=Coeffs_popIII.J21LW_interp_conv_avg)/HMFintclass.Mhtab
assert( (0 <= sSFR_exp3).all())
assert( (sSFR_exp3/zeus21.cosmology.Hubinvyr(CosmoParams,ztest) <= 1).all())
#repeat for 21cmfast emulation case
- sSFR_21cmfast = SFR_II(AstroParams_21cmfast, CosmoParams_21cmfast, HMFintclass, HMFintclass.Mhtab, ztest, ztest)/HMFintclass.Mhtab
+ sSFR_21cmfast = Coeffs.SFRD_Init.SFR(CosmoParams_21cmfast, AstroParams_21cmfast, HMFintclass, HMFintclass.Mhtab, ztest, pop=2)/HMFintclass.Mhtab
assert( (0 <= sSFR_21cmfast).all())
assert( (sSFR_21cmfast/zeus21.cosmology.Hubinvyr(CosmoParams_21cmfast,ztest) <= 1).all())
- sSFR_21cmfast3 = SFR_III(AstroParams_expacc, CosmoParams_21cmfast, HMFintclass, HMFintclass.Mhtab, Coeffs_popIII.J21LW_interp_conv_avg, ztest, ztest, ClassyCosmo.pars['v_avg'])/HMFintclass.Mhtab
+ sSFR_21cmfast3 = Coeffs_popIII.SFRD_Init.SFR(CosmoParams_21cmfast, AstroParams_21cmfast, HMFintclass, HMFintclass.Mhtab, ztest, pop=3, vCB=CosmoParams_21cmfast.vcb_avg, J21LW_interp=Coeffs_popIII.J21LW_interp_conv_avg)/HMFintclass.Mhtab
assert( (0 <= sSFR_21cmfast3).all())
assert( (sSFR_21cmfast3/zeus21.cosmology.Hubinvyr(CosmoParams_21cmfast,ztest) <= 1).all())
#test fesc
- assert( (0 <= fesc_II(AstroParams, HMFintclass.Mhtab)).all())
- assert( (fesc_II(AstroParams, HMFintclass.Mhtab <= 1)).all())
+ assert( (0 <= Coeffs.SFRD_Init.fesc_II(AstroParams, HMFintclass.Mhtab)).all())
+ assert( (Coeffs.SFRD_Init.fesc_II(AstroParams, HMFintclass.Mhtab <= 1)).all())
- assert( (0 <= fesc_III(AstroParams, HMFintclass.Mhtab)).all())
- assert( (fesc_III(AstroParams, HMFintclass.Mhtab <= 1)).all())
+ assert( (0 <= Coeffs.SFRD_Init.fesc_III(AstroParams, HMFintclass.Mhtab)).all())
+ assert( (Coeffs.SFRD_Init.fesc_III(AstroParams, HMFintclass.Mhtab <= 1)).all())
#and sfrd calculation
- assert( (Coeffs.ztabRsmoo[iztest] >= Coeffs.zintegral[iztest]).all())
+ assert( (Coeffs.zGreaterMatrix_nonan[iztest] >= Coeffs.zintegral[iztest]).all())
assert( (Coeffs.sigmaofRtab >= 0.0).all()) #all Ts positive
@@ -115,9 +110,6 @@ def test_background():
assert( (Coeffs.SFRDbar2D_III >= 0.0).all())
assert( (Coeffs.SFRD_III_avg >= 0.0).all())
- assert( (Coeffs.niondot_avg_II >= 0.0).all())
- assert( (Coeffs.niondot_avg_III >= 0.0).all())
-
assert( (Coeffs.xHI_avg >= 0.0).all())
assert( (Coeffs.xHI_avg <= 1.0).all())
@@ -126,19 +118,19 @@ def test_background():
- assert( (Coeffs.gamma_index2D >= 0.0).all()) #effective biases have to be larger than 0 in reasonable models, since galaxies live in haloes that are more clustered than average matter (in other words, SFRD grows monotonically with density)
+ assert( (Coeffs.gamma_II_index2D >= 0.0).all()) #effective biases have to be larger than 0 in reasonable models, since galaxies live in haloes that are more clustered than average matter (in other words, SFRD grows monotonically with density)
#and test the PS too
-PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, ClassyCosmo, CorrFClass, Coeffs)
+PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, Coeffs)
def test_pspec():
- assert((PS21._rs_input_mcfit == CorrFClass.rlist_CF).all())
- assert((PS21.klist_PS == CorrFClass._klistCF).all())
+ assert((PS21._rs_input_mcfit == CosmoParams.rlist_CF).all())
+ assert((PS21.klist_PS == CosmoParams._klistCF).all())
assert((PS21.kwindow == PS21._kwindowX).all())
ztest = 20.
@@ -150,19 +142,15 @@ def test_pspec():
assert((PS21.windowalpha_III[iztest,0] >= PS21.windowalpha_III[iztest,-1]).all()) #at fixed z it should go down with k
assert((PS21.windowxray_III[iztest,0] >= PS21.windowxray_III[iztest,-1]).all())
- #make sure all correlations are sensible
- assert( (PS21.Deltasq_dxa[iztest]**2 <= 1.01* PS21.Deltasq_d[iztest] * PS21.Deltasq_xa[iztest]).all())
- assert( (PS21.Deltasq_dTx[iztest]**2 <= 1.01* PS21.Deltasq_d[iztest] * PS21.Deltasq_Tx[iztest]).all())
- assert( (PS21.Deltasq_xaTx[iztest]**2 <= 1.01* PS21.Deltasq_Tx[iztest] * PS21.Deltasq_xa[iztest]).all())
-
- assert( (PS21.Deltasq_dxa_lin[iztest]**2 <= 1.01* PS21.Deltasq_d_lin[iztest] * PS21.Deltasq_xa_lin[iztest]).all())
- assert( (PS21.Deltasq_dTx_lin[iztest]**2 <= 1.01* PS21.Deltasq_d_lin[iztest] * PS21.Deltasq_Tx_lin[iztest]).all())
- assert( (PS21.Deltasq_xaTx_lin[iztest]**2 <= 1.01* PS21.Deltasq_Tx_lin[iztest] * PS21.Deltasq_xa_lin[iztest]).all())
+ #make sure all density correlations are positive definite
+ assert( (PS21.Deltasq_d[iztest] >= 0.0).all())
- #also make sure all Pk(k) < avg^2 for all quantities at some k~0.1
+ #also make sure all Pk(k) < avg^2 for all quantities at some k~0.1 (well away from zero-crossings)
ktest = 0.1
iktest = min(range(len(PS21.klist_PS)), key=lambda i: np.abs(PS21.klist_PS[i]-ktest))
assert( (PS21.Deltasq_xa[:,iktest] <= 1.01*Coeffs.xa_avg**2 ).all())
assert( (PS21.Deltasq_Tx[:,iktest] <= 1.01*Coeffs.Tk_xray**2).all())
- assert( (PS21.Deltasq_T21[:,iktest] <= 1.01*(Coeffs.T21avg)**2).all()) #can fail near T21~0. If so add an offset outside the **2.
+ # T21 check: use absolute offset for z where T21avg passes through zero with PopIII
+ T21_scale = Coeffs.T21avg**2 + 100. # 100 mK^2 floor to handle zero-crossing
+ assert( (PS21.Deltasq_T21[:,iktest] <= 1.01*T21_scale).all())
diff --git a/tests/test_correlations.py b/tests/test_correlations.py
index f35ce13..6a2ce88 100644
--- a/tests/test_correlations.py
+++ b/tests/test_correlations.py
@@ -13,32 +13,37 @@
import zeus21
import numpy as np
-from zeus21.correlations import *
+from zeus21 import z21_utilities
import warnings
warnings.filterwarnings("ignore", category=UserWarning) #to silence annyoing warning in mcfit
UserParams = zeus21.User_Parameters()
-CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS = 10., zmax_CLASS = 10.) #to speed up
-ClassyCosmo = zeus21.runclass(CosmoParams_input)
-CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
-
-CorrFClass = zeus21.Correlations(UserParams, CosmoParams, ClassyCosmo)
+CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100., zmax_CLASS=10.) #to speed up
def test_corrfuncs():
- assert(CorrFClass.xi_RR_CF[0][0][1] >= CorrFClass.xi_RR_CF[1][1][1]) #make sure smoothing goes the right direction
- assert(CorrFClass.xiEta_RR_CF[0][0][1] >= CorrFClass.xiEta_RR_CF[1][1][1]) #make sure smoothing goes the right direction
+ # Correlation arrays are now stored on CosmoParams (computed in run_correlations())
+ assert len(CosmoParams._klistCF) > 0
+ assert len(CosmoParams._PklinCF) > 0
+ assert len(CosmoParams.rlist_CF) > 0
+ assert np.all(np.isfinite(CosmoParams._PklinCF))
+ assert CosmoParams.xi_RR_CF.shape == (CosmoParams.NRs, CosmoParams.NRs, len(CosmoParams.rlist_CF))
+ assert np.all(np.isfinite(CosmoParams.xi_RR_CF))
+ assert np.all(np.isfinite(CosmoParams.xiEta_RR_CF))
+
+ assert(CosmoParams.xi_RR_CF[0][0][1] >= CosmoParams.xi_RR_CF[1][1][1]) #make sure smoothing goes the right direction
+ assert(CosmoParams.xiEta_RR_CF[0][0][1] >= CosmoParams.xiEta_RR_CF[1][1][1]) #make sure smoothing goes the right direction
- #windows
+ #windows (now in z21_utilities)
ktestwin = 1e-4
Rtestwin = 1.0
- assert(CorrFClass._WinG(ktestwin,Rtestwin) == pytest.approx(1.0, 0.01))
- assert(CorrFClass._WinTH(ktestwin,Rtestwin) == pytest.approx(1.0, 0.01))
- assert(CorrFClass._WinTH1D(ktestwin,Rtestwin) == pytest.approx(1.0, 0.01))
+ assert(z21_utilities._WinG(ktestwin,Rtestwin) == pytest.approx(1.0, 0.01))
+ assert(z21_utilities._WinTH(ktestwin,Rtestwin) == pytest.approx(1.0, 0.01))
+ assert(z21_utilities._WinTH1D(ktestwin,Rtestwin) == pytest.approx(1.0, 0.01))
ktestwin = 3.
- assert(CorrFClass._WinG(ktestwin,Rtestwin) < 1.0)
- assert(CorrFClass._WinTH(ktestwin,Rtestwin) < 1.0)
- assert(CorrFClass._WinTH1D(ktestwin,Rtestwin) < 1.0)
+ assert(z21_utilities._WinG(ktestwin,Rtestwin) < 1.0)
+ assert(z21_utilities._WinTH(ktestwin,Rtestwin) < 1.0)
+ assert(z21_utilities._WinTH1D(ktestwin,Rtestwin) < 1.0)
diff --git a/tests/test_cosmology.py b/tests/test_cosmology.py
index b8b6c17..4bef9e5 100644
--- a/tests/test_cosmology.py
+++ b/tests/test_cosmology.py
@@ -20,13 +20,11 @@ def test_cosmo():
UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS = 10., zmax_CLASS = 10., USE_RELATIVE_VELOCITIES=True) #to speed up
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
+ CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100., zmax_CLASS=10., USE_RELATIVE_VELOCITIES=True) #to speed up
#velocity component testing
- assert(10.0 <= ClassyCosmo.pars['sigma_vcb'] <= 100.0)
- assert(10.0 <= ClassyCosmo.pars['v_avg'] <= 100.0)
+ assert(0.0 <= CosmoParams.sigma_vcb <= 10.0)
+ assert(0.0 <= CosmoParams.vcb_avg <= 10.0)
#useful functions:
@@ -53,9 +51,9 @@ def test_cosmo():
assert(0. <= n_H(CosmoParams,0.0) <= 1e-6) #make sure it's reasonable ~1e-7
- assert(2.5<= Tcmb(ClassyCosmo,0.0) <= 3.0) #make sure it's reasonable 2.725 K
+ assert(2.5<= Tcmb(CosmoParams.ClassCosmo,0.0) <= 3.0) #make sure it's reasonable 2.725 K
- assert(Tcmb(ClassyCosmo,500.) == pytest.approx(Tadiabatic(CosmoParams,500.), 0.1)) #where they are coupled
+ assert(Tcmb(CosmoParams.ClassCosmo,500.) == pytest.approx(Tadiabatic(CosmoParams,500.), 0.1)) #where they are coupled
assert(0. <= xefid(CosmoParams,0) <= 1.0)
assert(0. <= xefid(CosmoParams,10) <= 1.0)
@@ -71,7 +69,7 @@ def test_cosmo():
- HMFintclass = zeus21.HMF_interpolator(UserParams,CosmoParams,ClassyCosmo)
+ HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
MM = HMFintclass.fitMztab[0][1]
zz = HMFintclass.fitMztab[1][1]
assert(HMFintclass.HMF_int(np.exp(MM),zz) == pytest.approx(HMFintclass.HMFtab[1,1],0.01))
diff --git a/tests/test_inputs.py b/tests/test_inputs.py
index 606f143..11c5024 100644
--- a/tests/test_inputs.py
+++ b/tests/test_inputs.py
@@ -16,30 +16,22 @@
def test_inputs():
- #set up the CLASS cosmology
- from classy import Class
- ClassCosmo = Class()
- ClassCosmo.compute()
-
UserParams = zeus21.User_Parameters()
- paramscosmo = [0.022, 0.12, 0.07,2.1e-9, 0.96,0.05, 10., 10.]
+ paramscosmo = [0.022, 0.12, 0.07,2.1e-9, 0.96,0.05, 100., 10.]
# omegab, omegac, h_fid, As, ns, tau_fid, kmax_CLASS, zmax_CLASS
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(omegab= paramscosmo[0], omegac = paramscosmo[1], h_fid = paramscosmo[2], As = paramscosmo[3], ns = paramscosmo[4], tau_fid = paramscosmo[5], kmax_CLASS = paramscosmo[6], zmax_CLASS = paramscosmo[7])
-
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
+ CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, omegab=paramscosmo[0], omegac=paramscosmo[1], h_fid=paramscosmo[2], As=paramscosmo[3], ns=paramscosmo[4], tau_fid=paramscosmo[5], kmax_CLASS=paramscosmo[6], zmax_CLASS=paramscosmo[7])
#make sure all the input parameters are the same as we use throughout
- assert(CosmoParams.omegab == CosmoParams_input.omegab)
- assert(CosmoParams.omegac == CosmoParams_input.omegac)
- assert(CosmoParams.h_fid == CosmoParams_input.h_fid)
- assert(CosmoParams.As == CosmoParams_input.As)
- assert(CosmoParams.ns == CosmoParams_input.ns)
- assert(CosmoParams.tau_fid == CosmoParams_input.tau_fid)
- assert(CosmoParams.kmax_CLASS == CosmoParams_input.kmax_CLASS)
- assert(CosmoParams.zmax_CLASS == CosmoParams_input.zmax_CLASS)
+ assert(CosmoParams.omegab == paramscosmo[0])
+ assert(CosmoParams.omegac == paramscosmo[1])
+ assert(CosmoParams.h_fid == paramscosmo[2])
+ assert(CosmoParams.As == paramscosmo[3])
+ assert(CosmoParams.ns == paramscosmo[4])
+ assert(CosmoParams.tau_fid == paramscosmo[5])
+ assert(CosmoParams.kmax_CLASS == paramscosmo[6])
+ assert(CosmoParams.zmax_CLASS == paramscosmo[7])
assert(CosmoParams.zmax_CLASS >= CosmoParams.zmin_CLASS >= 0.0)
#make sure the Omegas add to 1
@@ -63,7 +55,7 @@ def test_inputs():
assert(zlistchitest == pytest.approx(CosmoParams._ztabinchi[_indextest]) )
- _thermo = ClassCosmo.get_thermodynamics()
+ _thermo = CosmoParams.ClassCosmo.get_thermodynamics()
ztestint_thermo = _thermo['z'][_indextest]
Ttestint_thermo = CosmoParams.Tadiabaticint(ztestint_thermo)
assert(Ttestint_thermo == pytest.approx(_thermo['Tb [K]'][_indextest], 0.01) )
@@ -76,43 +68,41 @@ def test_inputs():
#NOW ASTRO INPUTS
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams, astromodel = 0)
+ AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams)
#also run the 21cmfast-like model
- CosmoParams_input_21cmfast = zeus21.Cosmo_Parameters_Input(Flag_emulate_21cmfast=True)
- ClassyCosmo_21cmfast = zeus21.runclass(CosmoParams_input_21cmfast)
- CosmoParams_21cmfast = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input_21cmfast, ClassyCosmo_21cmfast)
- AstroParams_21cmfast = zeus21.Astro_Parameters(UserParams, CosmoParams_21cmfast, astromodel = 1)
+ CosmoParams_21cmfast = zeus21.Cosmo_Parameters(UserParams=UserParams, Flag_emulate_21cmfast=True)
+ AstroParams_21cmfast = zeus21.Astro_Parameters(CosmoParams=CosmoParams_21cmfast)
assert( 0.0 <= AstroParams_21cmfast.tstar <= 10.0)
assert( 0.0 <= AstroParams_21cmfast.fstarmax <= 10.0)
assert(AstroParams_21cmfast.fstar10 == pytest.approx(AstroParams_21cmfast.epsstar) )
- assert( 0.0 <= AstroParams._clumping <= 10.0 )
- assert( 0.0 <= AstroParams_21cmfast._clumping <= 10.0 )
+ assert( 0.0 <= AstroParams.clumping <= 10.0 )
+ assert( 0.0 <= AstroParams_21cmfast.clumping <= 10.0 )
#test Pop II Xray SED
Energylisttest = np.logspace(2,np.log10(AstroParams.Emax_xray_norm),100)
- SEDXtab_test = AstroParams.SED_XRAY(Energylisttest, 2) #same in both models
- normalization_XraySED = np.trapezoid(Energylisttest * SEDXtab_test,Energylisttest)
- assert( normalization_XraySED == pytest.approx(1.0, 0.05) ) #5% is enough here
+ #SEDXtab_test = zeus21.SED_XRAY(Energylisttest, 2) #same in both models
+ #normalization_XraySED = np.trapezoid(Energylisttest * SEDXtab_test,Energylisttest)
+ #assert( normalization_XraySED == pytest.approx(1.0, 0.05) ) #5% is enough here
#test Pop III Xray SED
- SEDXtab_test = AstroParams.SED_XRAY(Energylisttest, 3) #same in both models
- normalization_XraySED = np.trapezoid(Energylisttest * SEDXtab_test,Energylisttest)
- assert( normalization_XraySED == pytest.approx(1.0, 0.05) ) #5% is enough here
+ #SEDXtab_test = zeus21.SED_XRAY(Energylisttest, 3) #same in both models
+ #normalization_XraySED = np.trapezoid(Energylisttest * SEDXtab_test,Energylisttest)
+ #assert( normalization_XraySED == pytest.approx(1.0, 0.05) ) #5% is enough here
#test Pop II LyA SED
nulisttest = np.linspace(zeus21.constants.freqLyA, zeus21.constants.freqLyCont, 100)
- SEDLtab_test = AstroParams.SED_LyA(nulisttest, 2) #same in both models
- normalization_LyASED = np.trapezoid(SEDLtab_test,nulisttest)
- assert( normalization_LyASED == pytest.approx(1.0, 0.05) ) #5% is enough here
+ #SEDLtab_test = zeus21.SED_LyA(nulisttest, 2) #same in both models
+ #normalization_LyASED = np.trapezoid(SEDLtab_test,nulisttest)
+ #assert( normalization_LyASED == pytest.approx(1.0, 0.05) ) #5% is enough here
#test Pop III LyA SED
nulisttest = np.linspace(zeus21.constants.freqLyA, zeus21.constants.freqLyCont, 100)
- SEDLtab_test = AstroParams.SED_LyA(nulisttest, 3) #same in both models
- normalization_LyASED = np.trapezoid(SEDLtab_test,nulisttest)
- assert( normalization_LyASED == pytest.approx(1.0, 0.05) ) #5% is enough here
+ #SEDLtab_test = zeus21.SED_LyA(nulisttest, 3) #same in both models
+ #normalization_LyASED = np.trapezoid(SEDLtab_test,nulisttest)
+ #assert( normalization_LyASED == pytest.approx(1.0, 0.05) ) #5% is enough here
diff --git a/tests/test_maps.py b/tests/test_maps.py
index 4b37381..046cf3b 100644
--- a/tests/test_maps.py
+++ b/tests/test_maps.py
@@ -11,119 +11,78 @@
import zeus21
import numpy as np
-from zeus21.maps import CoevalMaps, powerboxCtoR
+from zeus21.maps import T21_maps
+from zeus21.z21_utilities import powerboxCtoR
def test_coevalmaps_initialization():
- """Test that CoevalMaps initializes correctly"""
+ """Test that T21_maps initializes correctly"""
# Set up the necessary objects
- UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS=100.) # Use higher kmax_CLASS as in test_astrophysics.py
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
+ UserParams = zeus21.User_Parameters(zmin=5.0)
+ CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100.) # Use higher kmax_CLASS as in test_astrophysics.py
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams)
- HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)
- CorrFClass = zeus21.Correlations(UserParams, CosmoParams, ClassyCosmo)
+ AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams)
+ HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
# Generate T21 coefficients
- ZMIN = 20.0 # Use same ZMIN as in test_astrophysics.py
- Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams, HMFintclass, zmin=ZMIN)
+ Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, AstroParams, HMFintclass)
# Generate power spectra
- PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, ClassyCosmo, CorrFClass, Coeffs)
+ PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, Coeffs)
# Test redshift
- ztest = 25.0 # Use a redshift that's compatible with our ZMIN setting
+ ztest = 8 # Use a redshift that's compatible with our ZMIN setting
# Initialize the map with reduced size for test performance
- map_obj = CoevalMaps(Coeffs, PS21, ztest, Lbox=300, Nbox=50, KIND=0, seed=12345)
+ map_obj = T21_maps(CosmoParams, Coeffs, PS21, [ztest], input_boxlength=300, ncells=50, seed=12345)
# Verify attributes
- assert map_obj.Lbox == 300
- assert map_obj.Nbox == 50
+ assert map_obj.input_boxlength == 300
+ assert map_obj.ncells == 50
assert map_obj.seed == 12345
# Check that z is snapped to closest value in grid
iz_test = min(range(len(Coeffs.zintegral)), key=lambda i: np.abs(Coeffs.zintegral[i]-ztest))
- assert map_obj.z == Coeffs.zintegral[iz_test]
+ #assert map_obj.input_z[0] == pytest.approx(Coeffs.zintegral[iz_test]) # that is not necessarily going to be equal...
# Check T21global is properly set
- assert map_obj.T21global == pytest.approx(Coeffs.T21avg[iz_test])
-
- # Check map dimensions
- assert map_obj.T21map.shape == (50, 50, 50)
-
- # Check that density map is None for KIND=0
- assert map_obj.deltamap is None
-
-def test_coevalmaps_kind1():
- """Test CoevalMaps with KIND=1 (correlated density and T21)"""
- # Set up the necessary objects
- UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS=100.) # Use higher kmax_CLASS as in test_astrophysics.py
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
-
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams)
- HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)
- CorrFClass = zeus21.Correlations(UserParams, CosmoParams, ClassyCosmo)
-
- # Generate T21 coefficients
- ZMIN = 20.0 # Use same ZMIN as in test_astrophysics.py
- Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams, HMFintclass, zmin=ZMIN)
-
- # Generate power spectra
- PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, ClassyCosmo, CorrFClass, Coeffs)
-
- # Test redshift
- ztest = 25.0 # Use a redshift that's compatible with our ZMIN setting
-
- # Initialize the map with reduced size for test performance
- map_obj = CoevalMaps(Coeffs, PS21, ztest, Lbox=300, Nbox=50, KIND=1, seed=12345)
+ assert map_obj.T21avg == pytest.approx(Coeffs.T21avg[iz_test]/(Coeffs.xHI_avg[iz_test] + 1e-15))
# Verify all components exist
- assert map_obj.deltamap is not None
- assert map_obj.T21maplin is not None
- assert map_obj.T21mapNL is not None
- assert map_obj.T21map is not None
+ assert map_obj.density is not None
+ assert map_obj.T21_lin is not None
+ assert map_obj.T21_NL is not None
+ assert map_obj.T21 is not None
# Check that maps have correct dimensions
- assert map_obj.deltamap.shape == (50, 50, 50)
- assert map_obj.T21maplin.shape == (50, 50, 50)
- assert map_obj.T21mapNL.shape == (50, 50, 50)
- assert map_obj.T21map.shape == (50, 50, 50)
-
- # Check that T21map is the sum of linear and non-linear components
- assert np.array_equal(map_obj.T21map, map_obj.T21maplin + map_obj.T21mapNL)
+ assert map_obj.density.shape == (1, 50, 50, 50)
+ assert map_obj.T21_lin.shape == (1, 50, 50, 50)
+ assert map_obj.T21_NL.shape == (1, 50, 50, 50)
+ assert map_obj.T21.shape == (1, 50, 50, 50)
# Check basic statistics of maps
# Density map should have mean ≈ 0
- assert np.mean(map_obj.deltamap) == pytest.approx(0.0, abs=0.1)
+ assert np.mean(map_obj.density) == pytest.approx(0.0, abs=0.1)
- # T21maplin should have mean ≈ T21global
- assert np.mean(map_obj.T21maplin) == pytest.approx(map_obj.T21global, abs=5.0)
+ # T21_lin should have mean ≈ T21global
+ assert np.mean(map_obj.T21_lin) == pytest.approx(map_obj.T21avg, abs=5.0)
# Verify standard deviation is not zero (actual field generated)
- assert np.std(map_obj.deltamap) > 0
- assert np.std(map_obj.T21map) > 0
+ assert np.std(map_obj.density) > 0
+ assert np.std(map_obj.T21) > 0
def test_powerboxCtoR():
"""Test the powerboxCtoR utility function"""
- UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS=100.) # Use higher kmax_CLASS as in test_astrophysics.py
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
+ UserParams = zeus21.User_Parameters(zmin=20.0)
+ CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100.) # Use higher kmax_CLASS as in test_astrophysics.py
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams)
- HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)
- CorrFClass = zeus21.Correlations(UserParams, CosmoParams, ClassyCosmo)
+ AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams)
+ HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
# Generate T21 coefficients
- ZMIN = 20.0 # Use same ZMIN as in test_astrophysics.py
- Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams, HMFintclass, zmin=ZMIN)
+ Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, AstroParams, HMFintclass)
# Generate power spectra
- PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, ClassyCosmo, CorrFClass, Coeffs)
+ PS21 = zeus21.Power_Spectra(UserParams, CosmoParams, AstroParams, Coeffs)
# Test redshift
ztest = 25.0 # Use a redshift that's compatible with our ZMIN setting
diff --git a/tests/test_sfrd.py b/tests/test_sfrd.py
index e66e988..4d8165a 100644
--- a/tests/test_sfrd.py
+++ b/tests/test_sfrd.py
@@ -11,57 +11,41 @@
import zeus21
import numpy as np
-from zeus21.sfrd import get_T21_coefficients, SFR_II, SFR_III, fesc_II, fesc_III
+from zeus21.sfrd import SFRD_class
+from zeus21.T21coefficients import get_T21_coefficients
def test_sfr_functions_relationships():
"""Test relationship between SFR II and SFR III functions"""
# Set up the necessary objects
UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS=100.) # Use higher kmax as in test_astrophysics.py
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
+ CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100.) # Use higher kmax as in test_astrophysics.py
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams, USE_POPIII=True)
- HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)
+ AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams, USE_POPIII=True)
+ HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
+ # Create SFRD instance for method calls
+ sfrd_obj = SFRD_class(UserParams, CosmoParams, AstroParams, HMFintclass)
+
# Generate mock LW parameter for testing
- mock_J21LW = np.ones(100) * 0.01
mock_J21LW_interp = lambda z: 0.01
# Test a range of halo masses and redshifts
z_test = 20.0
- zprime_test = 20.0
# Get SFRs for Pop II and III
- sfr_II = SFR_II(AstroParams, CosmoParams, HMFintclass, HMFintclass.Mhtab, z_test, zprime_test)
-
- # SFR_III takes 9 parameters in the version we're testing
- try:
- # The signature is SFR_III(Astro_Parameters, Cosmo_Parameters, ClassCosmo, HMF_interpolator, massVector, J21LW_interp, z, z2, vCB)
- vCB_value = 30.0 # Default value if not in ClassyCosmo.pars
- if 'v_avg' in ClassyCosmo.pars:
- vCB_value = ClassyCosmo.pars['v_avg']
-
- sfr_III = SFR_III(AstroParams, CosmoParams, ClassyCosmo, HMFintclass, HMFintclass.Mhtab,
- mock_J21LW_interp, z_test, zprime_test, vCB_value)
- except TypeError as e:
- # TODO: check why SFR_III signature is different in different systems
- # Skip this test if there's a mismatch in the CI environment
- pytest.skip(f"Skip due to SFR_III argument mismatch: {e}")
-
- # In low-mass halos, Pop III should dominate; in high-mass halos, Pop II should dominate
- low_mass_idx = np.where(HMFintclass.Mhtab < 1e7)[0]
- high_mass_idx = np.where(HMFintclass.Mhtab > 1e10)[0]
-
- # These are not strict requirements, but should generally be true
- # For some parameter settings, these assertions might need adjustment
+ sfr_II = sfrd_obj.SFR(CosmoParams, AstroParams, HMFintclass, HMFintclass.Mhtab, z_test, pop=2)
+
+ vCB_value = CosmoParams.vcb_avg
+ sfr_III = sfrd_obj.SFR(CosmoParams, AstroParams, HMFintclass, HMFintclass.Mhtab, z_test, pop=3,
+ vCB=vCB_value, J21LW_interp=mock_J21LW_interp)
+
# Test that arrays have non-zero elements to make sure the functions are working
assert np.any(sfr_II > 0)
assert np.any(sfr_III > 0)
# Test the escape fraction functions
- fesc_ii = fesc_II(AstroParams, HMFintclass.Mhtab)
- fesc_iii = fesc_III(AstroParams, HMFintclass.Mhtab)
+ fesc_ii = sfrd_obj.fesc_II(AstroParams, HMFintclass.Mhtab)
+ fesc_iii = sfrd_obj.fesc_III(AstroParams, HMFintclass.Mhtab)
# Check that escape fractions are between 0 and 1
assert np.all(fesc_ii >= 0)
@@ -72,48 +56,37 @@ def test_sfr_functions_relationships():
def test_T21_coefficients_initialization():
"""Test the initialization of T21 coefficients class"""
# Set up the necessary objects
- UserParams = zeus21.User_Parameters()
- CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS=100.) # Use higher kmax as in test_astrophysics.py
- ClassyCosmo = zeus21.runclass(CosmoParams_input)
- CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
-
- AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams)
- HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams, ClassyCosmo)
-
- # Use same zmin as in test_astrophysics.py for consistency
zmin_test = 20.0
+ UserParams = zeus21.User_Parameters(zmin=zmin_test)
+ CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100.) # Use higher kmax as in test_astrophysics.py
+
+ AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams)
+ HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
# Get T21 coefficients
- Coeffs = get_T21_coefficients(UserParams, CosmoParams, ClassyCosmo, AstroParams, HMFintclass, zmin=zmin_test)
+ Coeffs = get_T21_coefficients(UserParams, CosmoParams, AstroParams, HMFintclass)
# Check that redshift grid is set up correctly
- assert Coeffs.zmin == zmin_test
- assert Coeffs.zmax_integral > zmin_test
- assert len(Coeffs.zintegral) == Coeffs.Nzintegral
+ assert len(Coeffs.zintegral) > 0
assert Coeffs.zintegral[0] == pytest.approx(zmin_test)
- assert Coeffs.zintegral[-1] == pytest.approx(Coeffs.zmax_integral)
+ assert Coeffs.zintegral[-1] == pytest.approx(zeus21.constants.ZMAX_INTEGRAL)
# Get index for a slightly larger z to avoid edge effects in interpolation
- # Use zmin_test + 0.1 for testing values
test_z = zmin_test + 0.1
iz_test = min(range(len(Coeffs.zintegral)), key=lambda i: abs(Coeffs.zintegral[i] - test_z))
# Check that arrays are initialized with correct shapes
- assert Coeffs.SFRDbar2D.shape == (Coeffs.Nzintegral, CosmoParams.NRs)
- assert Coeffs.gamma_index2D.shape == (Coeffs.Nzintegral, CosmoParams.NRs)
+ assert Coeffs.SFRDbar2D_II.shape == (len(Coeffs.zintegral), CosmoParams.NRs)
+ assert Coeffs.gamma_II_index2D.shape == (len(Coeffs.zintegral), CosmoParams.NRs)
- # Check that sigmaofRtab is calculated
- assert Coeffs.sigmaofRtab.shape == (Coeffs.Nzintegral, len(Coeffs.Rtabsmoo))
+ # Check that sigmaofRtab is calculated with correct shape
+ assert Coeffs.sigmaofRtab.shape == (len(Coeffs.zintegral), len(CosmoParams._Rtabsmoo))
# Instead of checking all values, check specific values at iz_test to avoid edge effects
assert np.all(np.nan_to_num(Coeffs.sigmaofRtab[iz_test], nan=0.0) >= 0) # Standard deviations should be non-negative
- # Test specific arrays at the non-edge index
- if hasattr(Coeffs, 'SFRDbar2D_II'):
- assert np.all(Coeffs.SFRDbar2D_II[iz_test] >= 0.0)
-
- if hasattr(Coeffs, 'SFRDbar2D_III'):
- assert np.all(Coeffs.SFRDbar2D_III[iz_test] >= 0.0)
+ assert np.all(Coeffs.SFRDbar2D_II[iz_test] >= 0.0)
+ assert np.all(Coeffs.SFRDbar2D_III[iz_test] >= 0.0)
def test_T21_coefficients_components():
"""Test specific components calculated by T21 coefficients"""
diff --git a/tests/test_xrays.py b/tests/test_xrays.py
index c20b558..536e2bd 100644
--- a/tests/test_xrays.py
+++ b/tests/test_xrays.py
@@ -14,32 +14,30 @@
import zeus21
import numpy as np
-from zeus21.xrays import *
+from zeus21.T21coefficients import Xrays_class
-UserParams = zeus21.User_Parameters()
+UserParams = zeus21.User_Parameters(zmin=20.)
-CosmoParams_input = zeus21.Cosmo_Parameters_Input(kmax_CLASS = 10., zmax_CLASS = 10.) #to speed up
-ClassyCosmo = zeus21.runclass(CosmoParams_input)
-CosmoParams = zeus21.Cosmo_Parameters(UserParams, CosmoParams_input, ClassyCosmo)
-AstroParams = zeus21.Astro_Parameters(UserParams, CosmoParams)
+CosmoParams = zeus21.Cosmo_Parameters(UserParams=UserParams, kmax_CLASS=100.) #to speed up
+AstroParams = zeus21.Astro_Parameters(CosmoParams=CosmoParams)
+HMFintclass = zeus21.HMF_interpolator(UserParams, CosmoParams)
-Xray_Class = Xray_class(UserParams, CosmoParams) #initialize Xray class
+Coeffs = zeus21.get_T21_coefficients(UserParams, CosmoParams, AstroParams, HMFintclass)
Energylist = AstroParams.Energylist
def test_xrays():
- z1=10.;
- z2=15.;
- tau1 = Xray_Class.optical_depth(UserParams, CosmoParams, Energylist,z1,z1)
- assert( (tau1 == np.zeros_like(tau1) ).all())
+ #test cross sections are positive
+ assert( (np.zeros_like(Energylist) <= Coeffs.Xrays.sigma_HI(Energylist)).all())
+ assert( (np.zeros_like(Energylist) <= Coeffs.Xrays.sigma_HeI(Energylist)).all())
- tau2 = Xray_Class.optical_depth(UserParams, CosmoParams, Energylist,z1,z2)
- assert( (tau2 >= np.zeros_like(tau2) ).all())
+ #test that X-ray heating is non-negative (allowing for small numerical noise)
+ assert( (Coeffs.Tk_xray >= 0.0).all())
- opacity1 = Xray_Class.opacity_Xray(UserParams, CosmoParams, Energylist,z1,z2)
- assert( (np.zeros_like(opacity1) <= opacity1).all())
- assert( (opacity1<= np.ones_like(opacity1) ).all())
+ #test that ionization from X-rays is non-negative
+ assert( (Coeffs.Gammaion_II >= 0.0).all())
+ assert( (Coeffs.Gammaion_III >= 0.0).all())
-
- assert( (np.zeros_like(Energylist) <= sigma_HI(Energylist)).all())
- assert( (np.zeros_like(Energylist) <= sigma_HeI(Energylist)).all())
+ #test that xe is between adiabatic value and 1
+ assert( (Coeffs.xe_avg >= Coeffs.xe_avg_ad).all())
+ assert( (Coeffs.xe_avg <= 1.0).all())
diff --git a/zeus21/LFs.py b/zeus21/LFs.py
new file mode 100644
index 0000000..ec5630f
--- /dev/null
+++ b/zeus21/LFs.py
@@ -0,0 +1,1369 @@
+"""
+Compute LFs given our SFR and HMF models.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
+
+from . import constants
+from .sfrd import Z_init, SFRD_class
+from .cosmology import bias_Tinker
+
+import numpy as np
+from scipy.special import erf
+from copy import copy
+
+from .SED import Greens_function_LHa, Greens_function_LUV_Short, Greens_function_LUV_Long
+
+from .bursty_sfh import SFH_class
+from .z21_utilities import pdf_fft_convolution, pdf_log_transform, normal_pdf, lognormal_pdf, sigma_log10, mean_log10
+
+
+class LFbias_band_outputs: # AV: new output class grouping population binned outputs for a given band (as well as corresponding x bins), functionally replacing old compute_LFbias_binned method in the LF_class init
+ """
+ Output container for binned luminosity-function and bias results in one band.
+
+ This class groups the luminosity-function outputs for a single observable band, either UV or Halpha.
+ It stores the binning information for the selected band and the requested population components.
+
+ Parameters
+ ----------
+ LF_Init : LF_class
+ Parent LF object used to compute population-level LF and bias outputs.
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ HMFinterp : HMF_interpolator
+ LFParams : LF_Parameters
+ which_band : {"UV", "Ha"}
+ Which LF band to compute.
+ "UV" uses ``LFParams.MUVcenters`` and ``LFParams.MUVwidths``;
+ "Ha" uses ``LFParams.log10LHacenters`` and ``LFParams.log10LHawidths``.
+ vCB : float, None or False, optional
+ Baryon-CDM relative streaming velocity used for Pop III SFR feedback.
+ Only relevant for Pop III calculations.
+ J21LW_interp : interpolator, None or False, optional
+ LW background interpolator used for Pop III SFR feedback.
+ Only relevant for Pop III calculations.
+
+ Attributes
+ ----------
+ bin_centers : array
+ Centers of the LF bins for the selected band.
+ bin_widths : array
+ Widths of the LF bins for the selected band.
+ pop2 : LFbias_core_output or None
+ Pop II LF/bias output, if requested.
+ pop3 : LFbias_core_output or None
+ Pop III LF/bias output, if requested.
+ tot : LFbias_core_output or None
+ Total LF/bias output, if requested.
+ """
+
+ def __init__(self, LF_Init, CosmoParams, AstroParams, HMFinterp, LFParams, which_band, vCB=None, J21LW_interp=None):
+
+ if which_band == "UV":
+ self.bin_centers = LFParams.MUVcenters
+ self.bin_widths = LFParams.MUVwidths
+ elif which_band == "Ha":
+ self.bin_centers = LFParams.log10LHacenters
+ self.bin_widths = LFParams.log10LHawidths
+ else:
+ raise ValueError("Only UV and Ha LF can be computed.")
+
+
+ self.pop2 = None
+ self.pop3 = None
+ self.tot = None
+
+ if not LFParams.SKIP_POPII:
+ self.pop2 = LF_Init.compute_pop_LFbias_binned(CosmoParams, AstroParams, HMFinterp, LFParams, which_band, 2)
+
+ if not LFParams.SKIP_POPIII:
+ if not AstroParams.USE_POPIII:
+ raise ValueError("Attempting to compute Pop III LF/bias with AstroParams.USE_POPIII=False.")
+ self.pop3 = LF_Init.compute_pop_LFbias_binned(CosmoParams, AstroParams, HMFinterp, LFParams, which_band, 3, vCB, J21LW_interp) # Note that vCB and LW are only needed for Pop III
+
+ if not LFParams.SKIP_TOT:
+ available_pops = [
+ pop for pop in (self.pop2, self.pop3)
+ if pop is not None
+ ]
+ if len(available_pops) == 0:
+ raise ValueError("Cannot compute total LF/bias because no population output has been computed.")
+ elif len(available_pops) == 1:
+ self.tot = available_pops[0] # Note that this should avoid duplication, as when only one of the populations is computed this is just an alias to that population, avoiding memory wastes
+ else:
+ self.tot = available_pops[0] + available_pops[1]
+
+
+class LFbias_core_output: # AV: new output class grouping LF and bias output, functionally replacing the old dictionary logic resulting from the core computation in compute_LFbias_binned_from_avgsigma
+ """
+ Output container for a single LF/bias component.
+
+ This class stores the luminosity-function output and the corresponding bias numerator for a single component.
+
+ Parameters
+ ----------
+ LF : array or None, optional
+ Binned luminosity function, when computed.
+ bias_num : array or None, optional
+ Numerator of the LF-weighted halo bias, when computed.
+
+ Attributes
+ ----------
+ LF : array or None
+ Binned luminosity function.
+ bias_num : array or None
+ Numerator of the LF-weighted halo bias.
+
+ Properties
+ ----------
+ bias : array
+ LF-normalized average bias, computed as ``bias_num / LF``.
+ This property requires both ``LF`` and ``bias_num`` to be available.
+
+ Notes
+ -----
+ Adding two ``LFbias_outputs`` objects returns a new ``LFbias_outputs``
+ object whose available fields are the sum of the corresponding fields.
+ This is used to build total outputs from population-level outputs.
+ """
+
+
+ def __init__(self, LF=None, bias_num=None):
+
+ self.LF = LF
+ self.bias_num = bias_num
+
+
+ @property
+ def bias(self): # AV: this now also allows to return the normalized bias directly; previous "bias" quantity renamed to "bias_num" for clarity
+ """
+ Bias normalized by the LF.
+ The raw 'bias' returned by the LF machinery is bias_num = b * LF.
+ """
+ if self.LF is None:
+ raise ValueError("Cannot compute normalized bias, because corresponding LF is not computed.")
+
+ if self.bias_num is None:
+ raise ValueError("Cannot compute normalized bias, because bias_num is not computed.")
+
+ return self.bias_num/self.LF
+
+
+ def __add__(self, other):
+ """
+ Returns a new ``LFbias_outputs`` object whose available fields are the sum of the corresponding fields.
+ """
+
+ LF = None
+ bias_num = None
+
+ if self.LF is not None and other.LF is not None:
+ LF = self.LF + other.LF
+ elif self.LF is None and other.LF is None:
+ LF = None
+ else:
+ raise ValueError("Cannot sum population outputs: LF is present only in one population.")
+
+ if self.bias_num is not None and other.bias_num is not None:
+ bias_num = self.bias_num + other.bias_num
+ elif self.bias_num is None and other.bias_num is None:
+ bias_num = None
+ else:
+ raise ValueError("Cannot sum population outputs: bias_num is present only in one population.")
+
+ return LFbias_core_output(LF, bias_num)
+
+
+
+class LF_class:
+ """
+ Compute all quantities and methods associated with luminosity functions
+
+ Parameters
+ ----------
+ UserParams : User_Parameters
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ HMFinterp : HMF_interpolator
+ LFParams : LF_Parameters
+ z_Init : Z_init or None, optional
+ Initial redshift matrices to be used in full-SFRD and PSD calculations.
+ Only instantiated when a full SFRD object is required. If None (default), initialized internally.
+ SFRD_Init : SFRD_class or None, optional
+ Precomputed SFRD object.
+ Only instantiated when a full SFRD object is required i.e. for PSD calculations, and for Pop III non-PSD calculations when LW is not provided explicitly. If None (default), initialized internally.
+ SFH_Init : SFH_class or None, optional
+ Precomputed SFH object to be used in PSD calculations.
+ Only instantiated for PSD calculations. If None (default), initialized internally.
+ vCB : float, None or False, optional
+ Baryon-CDM relative streaming velocity used for Pop III non-PSD SFR feedback.
+ If None (default), cosmological mean from ``CosmoParams`` is used.
+ False to fully disable streaming velocity feedback.
+ J21LW_interp : interpolator, None or False, optional
+ LW background interpolator as a function of redshift used for Pop III SFR feedback.
+ If None (default), the converged background from ``SFRD_Init`` is used.
+ False to fully disable LW feedback.
+
+ Attributes
+ ----------
+ z_Init : Z_init class
+ Initial redshift matrices used by full-SFRD and PSD calculations, when initialized.
+ SFRD_Init : SFRD_class
+ Full or lightweight SFRD object used to evaluate SFRs and, when available, self-consistent LW backgrounds.
+ SFH_Init : SFH_class
+ SFH object used for PSD-based observables.
+ DZ_TOINT : array
+ Redshift offsets, in units of ``LFParams.zwidth``, used to average the HMF over the redshift bin.
+ WEIGHTS_TOINT : array
+ Gaussian weights associated with ``DZ_TOINT``.
+ biasM : array
+ Tinker halo bias evaluated at the redshift samples used for the LF bin.
+ Only defined when bias is requested as an output in ``LFParams``.
+ UV : LFbias_band_outputs
+ UV luminosity-function and bias output containter object, when requested by ``LFParams.FLAG_COMPUTE_UVLF``.
+ Ha : LFbias_band_outputs
+ Halpha luminosity-function and bias output container object, when requested by ``LFParams.FLAG_COMPUTE_HaLF``.
+ """
+
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, LFParams, z_Init=None, SFRD_Init=None, SFH_Init=None, vCB=None, J21LW_interp=None):
+
+ # Evaluate whether or not a full SFRD init is needed or light init is enough
+ need_full_SFRD = (
+ AstroParams.FLAG_USE_PSD # TODO: here for safety as PSD branch has not been tested, check if actually needed
+ or (AstroParams.USE_POPIII and not LFParams.SKIP_POPIII and J21LW_interp is None) # In standard computation, full init is only needed if we want self-consistent LW background for Pop IIIs; if no Pop IIIs, or LW given as input, light init is enough
+ )
+
+ # SFRD instantiation
+ if z_Init is not None:
+ self.z_Init = z_Init
+ elif need_full_SFRD:
+ self.z_Init = Z_init(UserParams, CosmoParams)
+
+ if SFRD_Init is not None:
+ self.SFRD_Init = SFRD_Init
+ elif need_full_SFRD:
+ self.SFRD_Init = SFRD_class(UserParams, CosmoParams, AstroParams, HMFinterp, self.z_Init)
+ else:
+ # Lightweight SFRD object, enabling to import relevant methods for SFR calculation without computing global SFRD, LW background, reionization, gamma coefficients, etc...
+ self.SFRD_Init = SFRD_class.light_init()
+
+
+ # SFH instantiation
+ if AstroParams.FLAG_USE_PSD:
+ if SFH_Init is not None:
+ self.SFH_Init = SFH_Init
+ else:
+ self.SFH_Init = SFH_class(UserParams, CosmoParams, AstroParams, HMFinterp, AstroParams._tagesMyr, LFParams.zcenter, self.z_Init, self.SFRD_Init)
+
+
+ # Set redshift offsets and weights
+ if(constants.NZ_TOINT>1):
+ self.DZ_TOINT = np.linspace(-np.sqrt(constants.NZ_TOINT/3.), np.sqrt(constants.NZ_TOINT/3.),constants.NZ_TOINT) # in sigmas around zcenter
+ else:
+ self.DZ_TOINT = np.array([0.0])
+
+ self.WEIGHTS_TOINT = np.exp(-self.DZ_TOINT**2/2.)/np.sum(np.exp(-self.DZ_TOINT**2/2.)) # Assumed Gaussian in z, fair
+
+
+ # Save Tinker halo bias only when bias requested as output
+ if LFParams.RETURNBIAS:
+ self.biasM = np.array([bias_Tinker(CosmoParams, HMFinterp.sigma_int(HMFinterp.Mhtab,LFParams.zcenter+dz*LFParams.zwidth)) for dz in self.DZ_TOINT])
+
+ # Compute UVLF/bias if requested and save outputs
+ if LFParams.FLAG_COMPUTE_UVLF:
+ self.UV = LFbias_band_outputs(self, CosmoParams, AstroParams, HMFinterp, LFParams, "UV", vCB, J21LW_interp) # AV: changed delegating to new outputs classes instead of the old compute_LFbias_binned method, same for HaLF outputs
+
+ # Compute LF/bias if requested and save outputs
+ if LFParams.FLAG_COMPUTE_HaLF:
+ self.Ha = LFbias_band_outputs(self, CosmoParams, AstroParams, HMFinterp, LFParams, "Ha", vCB, J21LW_interp)
+
+
+ def __getattr__(self, name):
+ """
+ Provide optional flat aliases for LF and bias outputs, without having to specify which output class they come from.
+ Supported aliases delegated to _parse_flat_LFbias_name.
+
+ Parameters
+ ----------
+ name : str
+ Name of the attribute to get
+
+ Returns
+ -------
+ array
+ Requested LF or normalized bias array, if field present, or raises an AttributeError.
+ """
+ # This method is called by Python only when normal attribute lookup fails. Added by AV, mimickingIt mimics the user-facing behavior of ``get_T21_coefficients.__getattr__``, where selected quantities stored in internal objects can be accessed from the main output object. However, here the delegation is intentionally more limited: only explicitly supported LF/bias aliases are parsed
+
+ # Try to interpret the missing attribute name as one of the supported flat LF/bias aliases, and convert into corresponding nested path, e.g. "UVLF_tot" -> ("UV", "tot", "LF")
+ parsed = self._parse_flat_LFbias_name(name)
+ if parsed is None:
+ raise AttributeError(f"{type(self).__name__} has no attribute {name!r}")
+ band_attr, component_attr, quantity_attr = parsed
+
+ # Retrieve the band output object, e.g. self.UV or self.Ha if found
+ # NOTE: We use self.__dict__.get(...) rather than getattr(self, band_attr), because getattr could call __getattr__ again if the band was not created, leading to unnecessary recursion.
+ band_output = self.__dict__.get(band_attr, None)
+ if band_output is None:
+ raise AttributeError(f"{type(self).__name__} has no attribute {name!r}")
+
+ # Retrieve the population component from the band output, e.g. self.UV.pop2, self.UV.pop3, self.UV.tot, if found
+ component_output = getattr(band_output, component_attr, None)
+ if component_output is None:
+ raise AttributeError(f"{type(self).__name__} has no attribute {name!r}")
+
+ # Retrieve the requested quantity from the component, e.g. .LF, .bias_num or .bias, if found
+ return getattr(component_output, quantity_attr)
+
+ @staticmethod
+ def _parse_flat_LFbias_name(name):
+ """
+ Parse flat LF/bias aliases into nested output paths.
+
+ Parameters
+ ----------
+ name : str
+ Attribute name requested on the ``LF_class`` instance
+
+ Returns
+ -------
+ tuple or None
+ ``(band_attr, component_attr, quantity_attr)`` if ``name`` matches a supported alias.
+
+ Examples:
+ ``"UVLF_tot"`` returns ``("UV", "tot", "LF")``.
+ ``"UVbias_pop2"`` returns ``("UV", "pop2", "bias")``.
+ ``"HaLF_pop3"`` returns ``("Ha", "pop3", "LF")``.
+ """
+ # AV: New helper translating user-facing flat names into the corresponding internal attribute path used by ``LF_class``. It is intentionally strict: only known prefixes and known component names are accepted. This keeps the ``__getattr__`` behavior close in spirit to ``get_T21_coefficients``, but avoids making arbitrary ambiguous quantities available at the top level.
+
+ # Map of supported aliases
+ FLAT_LFBIAS_ALIASES = {
+ "UVLF_pop2": ("UV", "pop2", "LF"),
+ "UVLF_pop3": ("UV", "pop3", "LF"),
+ "UVLF_tot": ("UV", "tot", "LF"),
+
+ "UVbias_num_pop2": ("UV", "pop2", "bias_num"),
+ "UVbias_num_pop3": ("UV", "pop3", "bias_num"),
+ "UVbias_num_tot": ("UV", "tot", "bias_num"),
+
+ "UVbias_pop2": ("UV", "pop2", "bias"),
+ "UVbias_pop3": ("UV", "pop3", "bias"),
+ "UVbias_tot": ("UV", "tot", "bias"),
+
+ "HaLF_pop2": ("Ha", "pop2", "LF"),
+ "HaLF_pop3": ("Ha", "pop3", "LF"),
+ "HaLF_tot": ("Ha", "tot", "LF"),
+
+ "Habias_num_pop2": ("Ha", "pop2", "bias_num"),
+ "Habias_num_pop3": ("Ha", "pop3", "bias_num"),
+ "Habias_num_tot": ("Ha", "tot", "bias_num"),
+
+ "Habias_pop2": ("Ha", "pop2", "bias"),
+ "Habias_pop3": ("Ha", "pop3", "bias"),
+ "Habias_tot": ("Ha", "tot", "bias"),
+ }
+
+ return FLAT_LFBIAS_ALIASES.get(name, None)
+
+
+ ### Luminosity to log-luminosity/magnitude convert functions and vice versa
+ # TODO: unify in two simple Mag_of_L and L_of_Mag functions giving the type of input (Lnu or nuLnu) and units as input to the function to avoid duplication?
+
+ def Hz_from_angstrom(self, wavelength=1500.):
+ """
+ Convert rest-frame wavelength in Angstrom to frequency in Hz.
+
+ Parameters
+ ----------
+ wavelength : float, optional
+ Rest-frame wavelength in Angstrom. Default is 1500.
+
+ Returns
+ -------
+ nu : float
+ Frequency in Hz.
+ """
+
+ return constants.c_kms / (wavelength/1e13)
+
+
+ def Mag_of_L_ergsHz(self, L):
+ """
+ Convert specific luminosity in erg/s/Hz to AB absolute magnitude (from 1703.02913).
+
+ Parameters
+ ----------
+ L : float or array
+ Specific luminosity (L_nu) in erg/s/Hz.
+
+ Returns
+ -------
+ Mag : float or array
+ AB absolute magnitude.
+ """
+
+ return constants.zeropoint_ABmag_ergsHz - 2.5 * np.log10(L) # AB magnitude
+
+ def Mag_of_L_ergs(self, L, wavelength=1500.):
+ """
+ Convert specific luminosity in erg/s to AB absolute magnitude (from 1703.02913).
+
+ Parameters
+ ----------
+ L : float or array
+ Specific luminosity (nuL_nu) in erg/s.
+ wavelength : float, optional
+ Rest-frame wavelength in Angstrom used to convert nuL_nu to L_nu. Default is 1500.
+
+ Returns
+ -------
+ Mag : float or array
+ AB absolute magnitude.
+ """
+
+ return self.Mag_of_L_ergsHz(L/self.Hz_from_angstrom(wavelength))
+
+
+ def L_ergsHz_of_Mag(self, Mag):
+ """
+ Convert AB absolute magnitude to specific luminosity in erg/s/Hz (from 1703.02913).
+
+ Parameters
+ ----------
+ Mag : float or array
+ AB absolute magnitude.
+
+ Returns
+ -------
+ L : float or array
+ Specific luminosity (L_nu) in erg/s/Hz.
+ """
+
+ return 10**(0.4 * (constants.zeropoint_ABmag_ergsHz - Mag))
+
+ def L_ergs_of_Mag(self, Mag, wavelength=1500.):
+ """
+ Convert AB absolute magnitude to specific luminosity in erg/s (from 1703.02913).
+
+ Parameters
+ ----------
+ Mag : float or array
+ AB absolute magnitude.
+ wavelength : float, optional
+ Rest-frame wavelength in Angstrom. Default is 1500.
+
+ Returns
+ -------
+ L : float or array
+ specific luminosity (nuL_nu) in erg/s.
+ """
+
+ return self.L_ergsHz_of_Mag(Mag) * self.Hz_from_angstrom(wavelength)
+
+
+ def logorMag_of_L(self, L, which_band, renormalize_L, sigma=None):
+ """
+ Convert luminosity to the LF observable coordinate (log-luminosity/magnitude).
+ Mean luminosity can be shifted so that a lognormal scatter preserves the linear mean.
+
+ Parameters
+ ----------
+ L : float or array
+ Average luminosity.
+ For ``which_band`` = "UV", it is interpreted as specific luminosity in erg/s/Hz (L_nu).
+ For ``which_band`` = "Ha", it is intepreted as integrated line luminosity (L_Halpha) in erg/s.
+ which_band : {"UV", "Ha"}
+ Observable band to compute.
+ renormalize_L : bool
+ Whether to renormalize the linear luminosity before converting to the LF coordinate.
+ sigma : float or array, optional
+ Scatter used for the renormalization. Required when ``renormalize_L`` is True.
+
+ Returns
+ -------
+ logL_or_mag : float or array
+ UV magnitude for ``which_band`` = "UV" or log10(L_Halpha) for ``which_band`` = "Ha". Non-finite values are
+ replaced by arbitrarily faint values.
+ """
+
+ # Select desired band
+ if which_band not in ["UV", "Ha"]:
+ raise ValueError("Conversion from luminosity to log-luminosity/magnitude only implemented for 'UV' and 'Ha'.")
+
+ # Lower the avg luminosity to recover the true avg, instead of log-avg, when applying lognormal scatter sigma
+ # TODO: Note that in-place modification of L if np.ndarray here! If this is not what we want, we should have a local copy of L in the function instead
+ if renormalize_L:
+ if sigma is None:
+ raise ValueError("Requested luminosity renormalization after converting to log-luminosity/magnitude when applying lognormal scatter, but no provided value for the scatter.")
+
+ if which_band == "UV":
+ L /= np.exp((np.log(10)/2.5 * sigma)**2 / 2.0)
+
+ elif which_band == "Ha":
+ L /= np.exp((np.log(10) * sigma)**2 / 2.0)
+
+
+ # Convert luminosity to log-luminosity/magnitude
+ if which_band == "UV":
+ logLormag = self.Mag_of_L_ergsHz(L) # TODO: also implement nuFnu conversion for UV, as right now this assumes specific luminosity in erg/s/Hz --> note that for Halpha and other emission lines this is not needed, as line luminosities are always an integrated flux measure emerging from continuum, not continuum per unit frequency/wavelength
+ bad_value_fix = 100.0 # TODO: adjustable parameter in LFParameters, or constants?
+
+ elif which_band == "Ha":
+ logLormag = np.log10(L) # Note that this a safe fallback for emission lines in general, not only Halpha
+ bad_value_fix = -100.0 # TODO: adjustable parameter in LFParameters, or constants?
+
+
+ # Replace "bad values" in return
+ return np.where(np.isfinite(logLormag), logLormag, bad_value_fix)
+
+
+
+ def compute_pop_LFbias_binned(self, CosmoParams, AstroParams, HMFinterp, LFParams, which_band, pop, vCB=None, J21LW_interp=None):
+ """
+ Compute a single population (Pop III or Pop II) contribution to a binned luminosity function.
+
+ Parameters
+ ----------
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ HMFinterp : HMF_interpolator
+ LFParams : LF_Parameters
+ which_band : {"UV", "Ha"}
+ Which LF band to compute.
+ pop : int
+ Stellar population, 2 for Pop II or 3 for Pop III.
+ vCB : float, None or False, optional
+ Baryon-CDM relative streaming velocity used for Pop III non-PSD SFR feedback.
+ If None (default), cosmological mean from ``CosmoParams`` is used.
+ False to fully disable streaming velocity feedback.
+ J21LW_interp : interpolator, None or False, optional
+ LW background interpolator as a function of redshift used for Pop III SFR feedback.
+ If None (default), the converged background from ``SFRD_Init`` is used.
+ False to fully disable LW feedback.
+
+ Returns
+ -------
+ outputs : Same output type as returned by the core method ``compute_LFbias_binned_from_avgsigma``
+ """
+
+ # Error if not using Pop III stars in the AstroParams but Pop III LF calculation requested
+ if pop == 3 and not AstroParams.USE_POPIII:
+ raise ValueError('Attempting to compute Pop III LFs with USE_POPIII = False')
+
+ # Error for Halpha calculation requested for Pop III
+ if which_band == "Ha" and pop == 3:
+ raise ValueError('PopIII are not implemented for Ha')
+
+
+ # PSD calculation, in which MUV and sigmaUV derived from integrating SFH
+ # TODO: check, simply refactored from previous version with no functional change
+ if AstroParams.FLAG_USE_PSD:
+
+ if pop == 3 and AstroParams.DETACH_III_ACH:
+ raise ValueError("LF calculation from PSD not implemented for Pop IIIs with a detached atomic-cooling component")
+
+ if which_band == "UV":
+ return self.compute_LFbias_binned_from_PSD(CosmoParams, AstroParams, HMFinterp, LFParams,
+ LFParams.zcenter, LFParams.zwidth, LFParams.MUVcenters, LFParams.MUVwidths,
+ which_band, pop, LFParams.DUST_FLAG,
+ LFParams.RETURNLF, LFParams.RETURNBIAS)
+
+ elif which_band == "Ha":
+ return self.compute_LFbias_binned_from_PSD(CosmoParams, AstroParams, HMFinterp, LFParams,
+ LFParams.zcenter, LFParams.zwidth, LFParams.log10LHacenters, LFParams.log10LHawidths,
+ which_band, pop, LFParams.DUST_FLAG,
+ LFParams.RETURNLF, LFParams.RETURNBIAS)
+
+ else:
+ raise ValueError('Only UV and Ha LF can be computed.')
+
+
+ # Standard Munoz+23 model: mean LUV \propto SFR \propto Mhdot*fstar + lognormal/gaussian scatter set by sigma
+ else:
+
+ if which_band == "UV":
+
+ # For Pop III case, read vCB from CosmoParams and LW background from SFRD init if not explicitly provided
+ # TODO: implement vCB and LW feedback in PSD case too?
+ if pop == 3:
+
+ # TODO: None option with defaults can be implemented directly in sfrd.Mmol
+ if vCB is None:
+ vCB = CosmoParams.vcb_avg
+
+ if J21LW_interp is None:
+ # Safety check: if LW not explicitly provided, we raise an error if it's not available in SFRD_Init (this should not happen: if USE_POPIII = True and LW not explicitly provided, SFRD should be fully instantiated in the LF init)
+ if hasattr(self.SFRD_Init, "J21LW_interp_conv_avg"):
+ J21LW_interp = self.SFRD_Init.J21LW_interp_conv_avg
+ else:
+ raise ValueError("Pop III LF without full SFRD initialization requires an external J21LW_interp passed to the LF_class")
+
+
+ # Case of Pop IIIs with a detached ACH component: here we explicitly compute SFRs for the two components separately so that we can apply different LFParams to them and compute separate LFs to be summed at the end
+ # TODO: for now, the case with detached Pop III ACH component is isolated here, but we could integrate it in the general case below by implementing a separate poulation type, e.g. 3.II? This could be extended to other population types e.g. different morphological types etc... (to be consistently modified in sfrd.py)
+ if pop == 3 and AstroParams.DETACH_III_ACH:
+
+ # To detach ACH component, we use a separate set of AstroParams for the main component (minihalo-only component, extended up to Mup_III="Matom") and the additional ACH component (with the main Pop III component put to 0 through its epsstar value)
+ AstroParams_main = copy(AstroParams)
+ AstroParams_main.DETACH_III_ACH = False
+ AstroParams_main.Mup_III = "Matom"
+
+ AstroParams_ACH = copy(AstroParams)
+ AstroParams_ACH.DETACH_III_ACH = True
+ AstroParams_ACH.epsstar_III = 0.0
+
+ SFRlist_main = self.SFRD_Init.SFR(CosmoParams, AstroParams_main, HMFinterp, HMFinterp.Mhtab, LFParams.zcenter, pop, vCB, J21LW_interp)
+ SFRlist_ACH = self.SFRD_Init.SFR(CosmoParams, AstroParams_ACH, HMFinterp, HMFinterp.Mhtab,LFParams.zcenter, pop, vCB, J21LW_interp)
+
+ outputs_main = self.compute_LFbias_binned_from_SFRlist(SFRlist_main, HMFinterp, LFParams,
+ LFParams.zcenter, LFParams.zwidth, LFParams.MUVcenters, LFParams.MUVwidths,
+ LFParams._kappaUV_III, LFParams.sigmaUV_III, LFParams.FLAG_RENORMALIZE_LUV, which_band, LFParams.DUST_FLAG_III,
+ LFParams.RETURNLF, LFParams.RETURNBIAS)
+ outputs_ACH = self.compute_LFbias_binned_from_SFRlist(SFRlist_ACH, HMFinterp, LFParams,
+ LFParams.zcenter, LFParams.zwidth, LFParams.MUVcenters, LFParams.MUVwidths,
+ LFParams._kappaUV_III_ACH, LFParams.sigmaUV_III_ACH, LFParams.FLAG_RENORMALIZE_LUV, which_band, LFParams.DUST_FLAG_III_ACH,
+ LFParams.RETURNLF, LFParams.RETURNBIAS)
+
+ return outputs_main + outputs_ACH # AV: updated to reflect changes in the return output of compute_LFbias_binned_from_avgsigma using the new LFbias_core_output class; now simpler, and the logic for the sum is in the output class instead, so even more independent!
+
+
+ # General case, applying population-specific LFParams
+ else:
+
+ SFRlist = self.SFRD_Init.SFR(CosmoParams, AstroParams, HMFinterp, HMFinterp.Mhtab, LFParams.zcenter, pop, vCB, J21LW_interp)
+
+ if pop == 3:
+ sigmaUV = LFParams.sigmaUV_III
+ kappaUV = LFParams._kappaUV_III
+ include_dust = LFParams.DUST_FLAG_III # TODO: custom dust model for Pop IIIs + enforce separate population dust flags also in the PSD case?
+ elif pop == 2:
+ sigmaUV = LFParams.sigmaUV
+ kappaUV = LFParams._kappaUV
+ include_dust = LFParams.DUST_FLAG
+
+ return self.compute_LFbias_binned_from_SFRlist(SFRlist, HMFinterp, LFParams,
+ LFParams.zcenter, LFParams.zwidth, LFParams.MUVcenters, LFParams.MUVwidths,
+ kappaUV, sigmaUV, LFParams.FLAG_RENORMALIZE_LUV, which_band, include_dust,
+ LFParams.RETURNLF, LFParams.RETURNBIAS)
+
+
+ elif which_band == "Ha":
+ raise ValueError('FLAG_USE_PSD=False not implemented for Halpha LF.')
+
+ else:
+ raise ValueError('Only UV and Ha LF can be computed.')
+
+
+ def compute_LFbias_binned_from_SFRlist(self, SFRlist, HMFinterp, LFParams, zcenter, zwidth, logLcenters, logLwidths, kappa, sigma, renormalize_L, which_band, include_dust, computeLF, computeBias):
+ """
+ Compute binned LF outputs from a precomputed SFR list.
+
+ Parameters
+ ----------
+ SFRlist : array
+ Star formation rate evaluated on ``HMFinterp.Mhtab``.
+ HMFinterp : HMF_interpolator
+ LFParams : LF_Parameters
+ zcenter, zwidth : float
+ Redshift bin center and width.
+ logLcenters, logLwidths : array
+ LF bin centers and widths. These are UV magnitudes bins for ``which_band`` = "UV" and log10(L_Ha) bins for ``which_band`` = "Halpha".
+ kappa : float
+ SFR-to-luminosity conversion factor.
+ sigma : float or array
+ Scatter in the LF observable coordinate.
+ renormalize_L : bool
+ Whether to renormalize the luminosity before adding lognormal scatter to preserve the linear mean.
+ which_band : {"UV", "Ha"}
+ Which LF band to compute.
+ include_dust : bool
+ Whether to apply dust corrections.
+ computeLF, computeBias : bool
+ Select which output entries to compute.
+
+ Returns
+ -------
+ outputs : Same output type as returned by the core method ``compute_LFbias_binned_from_avgsigma``.
+ """
+
+ if not computeLF and not computeBias:
+ raise ValueError("No return options for LF computation from SFRlist.")
+
+
+ # Average luminosity
+ L_avglist = SFRlist / kappa # SFR to luminosity conversion for each Mh
+
+ # Luminosity to log-luminosity/magnitude conversion
+ logL_avglist = self.logorMag_of_L(L_avglist, which_band, renormalize_L, sigma)
+
+ # Avoid numerical issues with zero sigma --> TODO: min. safe sigma in LFParams? Note that potential inconsistency with PSD calculation, in which the min. is set to 0.1
+ sigma = np.fmax(sigma, 0.2)
+
+
+ # Dust correction applied to log-luminosity/magnitude list and sigma if necessary
+ if include_dust:
+ logL_avglist, sigma = self.apply_dust_correction(LFParams, zcenter, logL_avglist, sigma, which_band) # TODO: note that all of the core parameters of the LF calculation here are given explicitely for a single population types, so LFParams is only used for the dust properties, see comment in apply_dust_correction
+
+
+ # LF core computation
+ return self.compute_LFbias_binned_from_avgsigma(logL_avglist, sigma, HMFinterp, zcenter, zwidth, logLcenters, logLwidths, computeLF, computeBias)
+
+
+ def compute_LFbias_binned_from_PSD(self, CosmoParams, AstroParams, HMFinterp, LFParams, zcenter, zwidth, logLcenters, logLwidths, which_band, pop, include_dust, computeLF, computeBias):
+ """
+ Compute binned LF outputs from PSD-derived observable statistics.
+
+ Parameters
+ ----------
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ HMFinterp : HMF_interpolator
+ LFParams : LF_Parameters
+ zcenter, zwidth : float
+ Redshift bin center and width.
+ logLcenters, logLwidths : array
+ LF bin centers and widths.
+ which_band : {"UV", "Ha"}
+ Which LF band to compute.
+ pop : int
+ Stellar population, 2 for Pop II or 3 for Pop III.
+ include_dust : bool
+ Whether to apply dust corrections.
+ computeLF, computeBias : bool
+ Select which output entries to compute.
+
+ Returns
+ -------
+ outputs : Same output type as returned by the core method ``compute_LFbias_binned_from_avgsigma``.
+ """
+ # TODO: check, simply refactored from previous version with no functional change
+
+ if which_band == "UV":
+ LUV_short, sigmaLUV_short = self.meanandsigma_observable_PSD(CosmoParams, AstroParams, HMFinterp, LFParams, Greens_function_LUV_Short, pop)
+
+ LUV_long, sigmaLUV_long = self.meanandsigma_observable_PSD(CosmoParams, AstroParams, HMFinterp, LFParams, Greens_function_LUV_Long, pop)
+
+ logL_avglist, sigma = self.sigma_MUV_from_meansandsigmas(LUV_short, LUV_long, sigmaLUV_short, sigmaLUV_long)
+
+ logL_avglist = np.fmin(logL_avglist, constants._MAGMAX_UV)
+
+
+ elif which_band == "Ha":
+
+ L_avglist, sigma_ln = self.meanandsigma_observable_PSD(CosmoParams, AstroParams, HMFinterp, LFParams, Greens_function_LHa, pop)
+
+ logL_avglist = mean_log10(L_avglist, sigma_ln)
+ sigma = sigma_log10(L_avglist, sigma_ln)
+
+ logL_avglist = np.fmax(logL_avglist,constants._MAGMIN_Ha) # Cut to avoid -inf
+
+ sigma = np.fmax(sigma, 0.1) # Avoid numerical issues with zero sigma --> TODO: min. safe sigma in LFParams? Note that potential inconsistency with standard calculation, in which the min. is set to 0.2
+
+ else:
+ raise ValueError('Only UV and Ha LF can be computed.')
+
+
+ # Dust correction applied to log-luminosity/magnitude list and sigma if necessary
+ if include_dust:
+ logL_avglist, sigma = self.apply_dust_correction(LFParams, zcenter, logL_avglist, sigma, which_band)
+
+
+ # LF core computation
+ return self.compute_LFbias_binned_from_avgsigma(logL_avglist, sigma, HMFinterp, zcenter, zwidth, logLcenters, logLwidths, computeLF, computeBias)
+
+
+ def compute_LFbias_binned_from_avgsigma(self, logL_avglist, sigma, HMFinterp, zcenter, zwidth, logLcenters, logLwidths, computeLF, computeBias):
+ """
+ Compute LF and/or bias given the average log-luminosity/magnitude associated with each halo mass and its lognormal scatter.
+ This is the common numerical core for LF computation, shared by the SFR-list and PSD branches: it convolves the mean LF coordinate at each halo mass with a Gaussian scatter and integrates over the HMF.
+
+ Parameters
+ ----------
+ logL_avglist : array
+ Mean LF coordinate (UV magnitude or log10(L_Halpha)) at each halo mass.
+ sigma : float or array
+ Scatter in the same coordinate.
+ HMFinterp : HMF_interpolator
+ zcenter, zwidth : float
+ Redshift bin center and width.
+ logLcenters, logLwidths : array
+ LF bin centers and widths.
+ computeLF, computeBias : bool
+ Select which output entries to compute.
+
+ Returns
+ -------
+ output : LFbias_outputs
+ Output object containing LF and/or bias_num.
+ """
+
+ cuthi = logLcenters + logLwidths/2.
+ cutlo = logLcenters - logLwidths/2.
+
+ xhi = np.subtract.outer(cuthi, logL_avglist)/(np.sqrt(2) * sigma)
+ xlo = np.subtract.outer(cutlo, logL_avglist)/(np.sqrt(2) * sigma)
+ weights = (erf(xhi) - erf(xlo)).T/(2.0 * logLwidths)
+
+ HMFtab = np.array([HMFinterp.HMF_int(HMFinterp.Mhtab, zcenter + dz*zwidth) for dz in self.DZ_TOINT])
+
+ # AV: below changed to use the LFbias_output class instead of dictionaries, all the rest should stay consistent
+ LF = None
+ bias_num = None
+ if computeLF:
+ HMFcurr = np.sum(self.WEIGHTS_TOINT * HMFtab.T, axis=1)
+ LF = np.trapezoid(weights.T * HMFcurr, HMFinterp.Mhtab, axis=-1) # TODO: check consistency without fduty
+ if computeBias: # TODO: compute actual average bias, already dividing by LF here?
+ halobiascurr = np.sum(self.WEIGHTS_TOINT * HMFtab.T * self.biasM.T, axis=1)
+ bias_num = np.trapezoid(weights.T * halobiascurr, HMFinterp.Mhtab, axis=-1) # TODO: check consistency without fduty
+
+ return LFbias_core_output(LF, bias_num)
+
+
+
+ #####Here the dust attenuation
+ def apply_dust_correction(self, LFParams, z, logL_or_mag, sigma, which_band):
+ """
+ Apply dust attenuation to intrinsic LF coordinate(s) and scatter.
+
+ Parameters
+ ----------
+ LFParams : LF_Parameters
+ z : float
+ Redshift.
+ logL_or_mag : array
+ Intrinsic LF coordinate.
+ sigma : float or array
+ Intrinsic scatter.
+ which_band : {"UV", "Ha"}
+ Observable band.
+
+ Returns
+ -------
+ logL_or_mag_dust : array
+ Dust-corrected observed coordinate(s).
+ sigma_dust : float or array
+ Scatter after optional dust contribution.
+ """
+
+ # TODO: right now global dust correction parameters, we cannot chose different parameters for different components, we may want to isolate the dust model parameters in a separate class (also these may be useful for other observables other than LFs)
+
+ # Cannot directly 'dust' the theoretical intrinsic magnitudes, since the properties of the IRX-beta relation are calibrated on observed MUV. Recursion instead, solving MUV_obs = MUV_intrinsic + A_UV(MUV_obs) iteratively
+ curr_logLormag = logL_or_mag
+
+ curr2 = np.ones_like(curr_logLormag)
+ while(np.sum(np.abs((curr2-curr_logLormag)/curr_logLormag)) > 0.02):
+ curr2 = curr_logLormag
+ curr_logLormag = logL_or_mag + self.dust_attenuation(LFParams, z, curr_logLormag, which_band)
+
+ if LFParams.sigma_times_AUV_dust != 0.:
+ sigma_dust = np.fmax(0.0, LFParams.sigma_times_AUV_dust) * self.dust_attenuation(LFParams, z, curr_logLormag, which_band)
+ sigma = np.sqrt(sigma**2 + sigma_dust**2) # Add dust sigma, if any, to the UV sigma
+
+ return curr_logLormag, sigma
+
+
+ def dust_attenuation(self, LFParams, z, logL_or_mag, which_band):
+ """
+ Return the mean attenuation for the requested observable.
+ For UV, this is given as a function of OBSERVED z and magnitude. If using on theoretical intrinsice magnitudes, iterate until convergence.
+ The ``LFParams.HIGH_Z_DUST`` flag controls whether to apply dust attenuation at higher z than 0 or set attenuation to 0. If true, fix betaUV for attenuation calculation at ``LFParams._zmaxdata`` redshift value.
+ Halpha dust attenuation not currently implemented.
+
+ Parameters
+ ----------
+ LFParams : LF_Parameters
+ z : float
+ Redshift.
+ logL_or_mag : array
+ Observed LF coordinate to be dust attenuated.
+ which_band : {"UV", "Ha"}
+ Observable band.
+
+ Returns
+ -------
+ Adust : array
+ Attenuation in magnitudes for UV. Halpha currently raises a
+ ``ValueError`` because no calibrated model is implemented.
+ """
+
+ if which_band == "UV":
+
+ MUV = logL_or_mag
+ betacurr = self.betaUV_dust(LFParams, z, MUV)
+
+ sigmabeta = 0.34 #from Bouwens 2014
+
+ Auv = LFParams.C0dust + 0.2*np.log(10)*sigmabeta**2 * LFParams.C1dust**2 + LFParams.C1dust * betacurr # TODO: ref?
+ Auv=Auv.T
+ if not (LFParams.HIGH_Z_DUST):
+ Auv*=np.heaviside(LFParams._zmaxdata - z, 0.5)
+
+ Adust = np.fmax(Auv.T, 0.0)
+
+ elif which_band == "Ha":
+
+ raise ValueError("Halpha dust attenuation not implemented. Set DUST_FLAG=False when computing Halpha LF, or implement a calibrated A_Ha model.")
+
+ 'Average attenuation A as a function of z and log10LHa.'
+ # TODO: made-up to see how to calibrate it. Unused in current implementation (set Ha DUST = False)
+ # Conjured approximation - lower at high z and fainter
+
+ log10LHa = logL_or_mag
+ AHa = 0.5 * (1 + 0.3 * (log10LHa - 42.0))
+ Adust = -0.4 * np.fmax(AHa, 0.0) # no negative dust attenuation
+ #-0.4* instead of +1* here since its log10L not mag
+
+ return Adust
+
+
+ def betaUV_dust(self, LFParams, z, MUV):
+ """
+ Compute the UV continuum slope used by the dust model, currently implementing Bowens+13,14 or Zhao+24 model.
+
+ Parameters
+ ----------
+ LFParams : LF_Parameters
+ z : float or array
+ Redshift.
+ MUV : float or array
+ UV absolute magnitude.
+
+ Returns
+ -------
+ beta : array
+ UV slope from the selected dust model.
+ """
+
+ if LFParams.DUST_model == "Bouwens13":
+
+ 'Color as a function of redshift and mag, interpolated from Bouwens 2013-14 data.'
+
+ zdatbeta = [2.5,3.8,5.0,5.9,7.0,8.0]
+ betaMUVatM0 = [-1.7,-1.85,-1.91,-2.00,-2.05,-2.13]
+ dbeta_dMUV = [-0.20,-0.11,-0.14,-0.20,-0.20,-0.15]
+
+ _MUV0 = -19.5
+ _c = -2.33
+
+ betaM0 = np.interp(z, zdatbeta, betaMUVatM0, left=betaMUVatM0[0], right=betaMUVatM0[-1])
+ dbetaM0 = (MUV - _MUV0).T * np.interp(z, zdatbeta, dbeta_dMUV, left=dbeta_dMUV[0], right=dbeta_dMUV[-1])
+
+ sol1 = (betaM0-_c) * np.exp(dbetaM0/(betaM0-_c))+_c #for MUV > MUV0
+ sol2 = dbetaM0 + betaM0 #for MUV < MUV0
+
+ return sol1.T * np.heaviside(MUV - _MUV0, 0.5) + sol2.T * np.heaviside(_MUV0 - MUV, 0.5)
+
+ elif LFParams.DUST_model == "Zhao24":
+
+ 'from https://arxiv.org/pdf/2401.07893.pdf, table 1'
+
+ betaM0z0 = -1.58
+ dbetaM0dz = -0.081
+
+ dbetaM0dMUVz0 = -0.216
+ ddbetaM0dMUVdz = 0.012
+
+ MUV0 = -19.5
+ betaM0 = betaM0z0 + z * dbetaM0dz
+ dbetaM0 = (MUV - MUV0).T * (dbetaM0dMUVz0 + ddbetaM0dMUVdz * z)
+
+ sol2 = dbetaM0 + betaM0 #beta_M0 + db/dMUV|M0 (DeltaMUV)at M0=-19.5
+
+ return np.fmax(-3.0, sol2) #cap at -3 just in case
+
+
+ def correct_AP_LF(self, z, Deltaz, CosmoParams_data, CosmoParams, logLormag_data, Phi_data, errPhi_data, errPhi_asy_data = None, which_band = "UV"):
+ "Corrects the observed LF from the assumed cosmology CosmoParams to another with CosmoParams_out. Note: no dust correction since it's applied directly to theory->model"
+ # TODO: check if needed, function never used in LFs.py
+
+ r_data = CosmoParams_data.chiofzint(z) #comoving distance
+ Vol_data = CosmoParams_data.chiofzint(z+Deltaz/2.0)**3 - CosmoParams_data.chiofzint(z-Deltaz/2.0)**3 #no need for 4pi/3 since it'll be a ratio
+
+ r_out = CosmoParams.chiofzint(z)
+ Vol_out = CosmoParams.chiofzint(z+Deltaz/2.0)**3 - CosmoParams.chiofzint(z-Deltaz/2.0)**3
+
+ Phi_out = Phi_data * Vol_data/Vol_out
+ errPhi_out = errPhi_data * Vol_data/Vol_out
+ val = -5. if which_band == "UV" else 2.
+ logLormag_out = logLormag_data + val * np.log10(r_out/r_data) #linear change so it doesn't affect bin sizes
+
+ if (errPhi_asy_data is not None): #for asymmetric errorbars, optional arg
+ errPhi_asy_out = errPhi_asy_data * Vol_data/Vol_out
+ return logLormag_out, Phi_out, errPhi_out, errPhi_asy_out
+ else:
+ return logLormag_out, Phi_out, errPhi_out
+
+
+ def meanandsigma_observable_PSD(self, CosmoParams, AstroParams, HMFinterp, LFParams, GreensFunction, pop):
+ """
+ Compute PSD-derived mean and scatter for a given observable (e.g. LUV, Ha, etc...) from the power spectrum of the SFRD.
+
+ Parameters
+ ----------
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ HMFinterp : HMF_interpolator
+ LFParams : LF_Parameters
+ GreensFunction : callable
+ Time-domain response function G(t) for the observable of interest.
+ pop : int
+ Stellar population, 2 for Pop II or 3 for Pop III.
+
+ Returns
+ -------
+ avgobs : array
+ Mean observable at each halo mass.
+ sigmaobs : array
+ Scatter of the observable at each halo mass.
+ """
+ # TODO: check, simply refactored from previous version with no functional change
+
+ #First get the mean observable at the given redshift and halo mass
+ _windowintages = GreensFunction(AstroParams, AstroParams._tagesMyr, HMFinterp.Mhtab)
+
+ if pop == 2:
+ _SFHinages = self.SFH_Init.SFH_II
+ elif pop == 3:
+ _SFHinages = self.SFH_Init.SFH_III
+
+ avgobs = np.trapezoid(_SFHinages*_windowintages, AstroParams._tagesMyr*1e6, axis=1)
+
+ #Now get the sigma, first compute the power spectrum of the SFR from that of lnSFR:
+ #use the omegalist from the FFT, which is the same for all observables
+ #use the power spectrum from the FFT, which is the same for all observables
+
+ omegalist, powerNL = self.SFH_Init._get_PowerSFR_NL_FFT_vectorized(AstroParams, HMFinterp.Mhtab) #freq in 1/Myr and power of SFR=e^x (x=lnSFR). First array is Nfft, second is Nm x Nfft
+
+ #And FFT the window function for the integral:
+ _, windowfourier = self.SFH_Init.WindowFourier(CosmoParams, AstroParams, HMFinterp, self.SFRD_Init, GreensFunction, LFParams.zcenter, AstroParams._tagesMyr, pop)
+
+ _whichomegakeep = np.logical_and(omegalist > AstroParams._omegamin, omegalist < AstroParams._omegamax)
+
+ sigmaobs = np.sqrt(np.trapezoid(powerNL * np.abs(windowfourier)**2*_whichomegakeep, omegalist, axis=1)*2/(2*np.pi)) #times 2 because + and - freqs
+
+ return avgobs, sigmaobs
+
+
+ def sigma_MUV_from_meansandsigmas(self, LUV1mean, LUV2mean, sigmaLUV1, sigmaLUV2):
+ """
+ Combine short- and long-timescale UV statistics into mean UV magnitudes and scatter. These components are considered mostly uncorrelated.
+
+ Parameters
+ ----------
+ LUV1mean, LUV2mean : array
+ Mean UV luminosity components.
+ sigmaLUV1, sigmaLUV2 : array
+ Scatter of the UV luminosity components.
+
+ Returns
+ -------
+ MUV_avg : array
+ Mean UV magnitude.
+ sigma_MUV : array
+ UV-magnitude scatter.
+ """
+ # TODO: check, simply refactored from previous version with no functional change
+
+ #vectorize the inputs so it can read either scalar or array inputs
+ LUV1mean = np.asarray(LUV1mean)
+ LUV2mean = np.asarray(LUV2mean)
+ sigmaLUV1 = np.asarray(sigmaLUV1)
+ sigmaLUV2 = np.asarray(sigmaLUV2)
+
+ _numberofMhs = len(LUV1mean)
+ if len(LUV2mean) != _numberofMhs or len(sigmaLUV1) != _numberofMhs or len(sigmaLUV2) != _numberofMhs:
+ raise ValueError("All input arrays must have the same length.")
+ # Initialize arrays to hold the results
+ MUVbar = np.zeros(_numberofMhs)
+ sigmaMUV = np.zeros(_numberofMhs)
+ for imh in range(_numberofMhs):
+ sigmaUV1 = sigma_log10(sigmaLUV1[imh],LUV1mean[imh])*np.log(10)
+ mu1 = mean_log10(sigmaLUV1[imh],LUV1mean[imh])*np.log(10)
+ sigmaUV2= sigma_log10(sigmaLUV2[imh],LUV2mean[imh])*np.log(10)
+ mu2 = mean_log10(sigmaLUV2[imh],LUV2mean[imh])*np.log(10)
+
+ yvalues, PDF_y = pdf_fft_convolution(mu1, sigmaUV1, mu2, sigmaUV2)
+ lnyvalues, PDF_lny = pdf_log_transform(yvalues, PDF_y)
+ MUVvalues, PDF_MUV = self.Mag_of_L_ergs(np.exp(lnyvalues)), -2.5*np.log(10)*PDF_lny
+ _norm = np.trapezoid(PDF_MUV, MUVvalues) #normalization, should always be 1 but just in case
+ MUVbar[imh] = np.trapezoid(MUVvalues * PDF_MUV, MUVvalues)/_norm
+ sigmaMUV[imh] = np.sqrt(np.trapezoid((MUVvalues - MUVbar[imh])**2 * PDF_MUV, MUVvalues)/_norm)
+
+ return MUVbar, sigmaMUV #NOTE: can be enhanced to return full PDF, but needs to know the size of the MUVvalues array. We dont need it yet so just return the mean and sigma
+
+
+
+
+
+class Ha_UV_ratio: # TODO: different file e.g. line_ratios.py?
+ """
+ Compute the Halpha-to-UV luminosity ratio distribution.
+
+ This helper combines the UV luminosity function, Halpha luminosities and PSD-derived covariance terms to evaluate the probability distribution of ``log10(L_Ha / L_UV)`` or the equivalent ``xi_ion`` quantity.
+
+ Parameters
+ ----------
+ UserParams : User_Parameters
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ HMFinterp : HMF_interpolator
+ LFParams : LF_Parameters
+ z_Init : Z_init, optional
+ Precomputed redshift matrices.
+ SFRD_Init : SFRD_class, optional
+ Precomputed SFRD object.
+ SFH_Init : SFH_class, optional
+ Precomputed SFH object.
+ LF_Init : LF_class, optional
+ Precomputed LF object. If None, initialized internally.
+ """
+ # TODO: check class and documentation
+
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, LFParams, z_Init = None, SFRD_Init = None, SFH_Init = None, LF_Init = None):
+
+ if not AstroParams.FLAG_USE_PSD:
+ raise ValueError('FLAG_USE_PSD=False not implemented in PDF_HaUV_ratio()')
+
+ if AstroParams.USE_POPIII:
+ raise ValueError('USE_POPIII=True not implemented in PDF_HaUV_ratio()')
+
+
+ if z_Init is None:
+ self.z_Init = Z_init(UserParams=UserParams, CosmoParams=CosmoParams)
+ else:
+ self.z_Init = z_Init
+
+ if SFRD_Init is None:
+ self.SFRD_Init = SFRD_class(UserParams, CosmoParams, AstroParams, HMFinterp, self.z_Init)
+ else:
+ self.SFRD_Init = SFRD_Init
+
+ if LF_Init is None:
+ self.LF_Init = LF_class(UserParams, CosmoParams, AstroParams, HMFinterp, LFParams, z_Init=self.z_Init, SFRD_Init=self.SFRD_Init, vCB_input=False, J21LW_interp_input=False)
+ else:
+ self.LF_Init = LF_Init
+
+ if SFH_Init is None:
+ self.SFH_Init = SFH_class(UserParams, CosmoParams, AstroParams, HMFinterp, AstroParams._tagesMyr, LFParams.zcenter, self.z_Init, self.SFRD_Init, )
+ else:
+ self.SFH_Init = SFH_Init
+
+
+ def PDF_log10HaUVratio(self, LUV_mean, LHa_mean, sigmaLHa, sigmasquaredcross, log10etavalues):
+ """
+ Returns the PDF of log10(LHa/LUV) at fixed Mh (NOTE: integrated over all MUVs). Assumed dust corrected!
+
+ Parameters:
+ -----------
+ LUVmean : array_like
+ The mean LUV value
+ LHa_mean : array_like
+ The mean LHa value
+ sigmaLHa : array_like
+ The sigma of LHa value
+ sigmasquaredcross : array_like
+ The cross sigma squared (sigma^2) of LHa and LUV
+ This is the covariance between LHa and LUV, computed from their window functions. From cross_sigma_squared_PSD.
+
+ Returns:
+ --------
+ log10etavalues : ndarray
+ The log10eta values (same for all input array elements)
+ PDFlog10eta : ndarray
+ Array of shape (len(LUVmean), len(log10etavalues)) with PDFs
+ """
+
+ AconstantLUVLHa = sigmasquaredcross/sigmaLHa**2
+ BconstantLUVLHa = LUV_mean - AconstantLUVLHa * LHa_mean
+ _A, _B = AconstantLUVLHa, BconstantLUVLHa
+
+ mean_of_log10LHa = np.log10(LHa_mean)- 1/2 * np.log10(1 + sigmaLHa**2/LHa_mean**2)
+ sigma_of_log10LHa = sigma_log10(sigmaLHa, LHa_mean)
+
+ if log10etavalues is None: # If not provided, create a default range
+ log10etavalues = np.linspace(-3.5,-1.3,55)
+
+ etavalues = 10**log10etavalues
+ _LHavalues = np.outer(etavalues,_B)/(1-np.outer(etavalues,_A)) #recalculate the LHa values from eta values
+
+ muHa, sigmaHa = mean_of_log10LHa*np.log(10), sigma_of_log10LHa*np.log(10) #mean and std of ln(Ha), a gaussian varible
+ PDFLHalognormal = lognormal_pdf(_LHavalues, muHa, sigmaHa)
+ dydx = _B/(_B+_A*_LHavalues) * 1/(_LHavalues * np.log(10))
+
+ log10etavalues = log10etavalues
+ PDFlog10eta = PDFLHalognormal/np.abs(dydx)
+
+ return log10etavalues, PDFlog10eta
+
+
+ def PDF_HaUV_ratio(self, CosmoParams, AstroParams, HMFinterp, LFParams, log10etavalues, FLAG_supersample_MUV = False):
+ '''
+ Returns Ha/UV ratio PDF, binned in MUV_bin_edges and log10eta bins, if provided.
+
+ Parameters:
+ -----------
+ AstroParams : Astro Parameters
+ CosmoParams : Cosmo Parameters
+ HMFinterp : HMFinterp
+ zcenter, zwidth: the z where it is calculated (no width for now, ignored)
+ log10etavalues: the log10(Ha/UV) ratios where the PDF is computed. Assigned by function if None
+ FLAG_supersample_MUV : Whether to super-sample to integrate within MUV_bin_edges better. If =False then just computes at the center of each bin
+
+ Returns:
+ --------
+
+ log10etavalues: bins of log10Ha/UV
+ pdf_binned: the PDF(log10etavalues) in those log10etavalues bins, and the MUV bins chosen
+ UVLFvalues: the UVLF at the MUV binned, so the user can sum stuff easily
+
+ '''
+
+ if log10etavalues is None: # If not provided, create a default range
+ log10etavalues = np.linspace(-3.5,-1.0,20)
+
+ HMFtab = HMFinterp.HMF_int(HMFinterp.Mhtab,LFParams.zcenter)
+
+ meanLUVshort, meanLHa, sigmaLUVshort, sigmaLHa, sigmasqcross = self.cross_sigma_squared_PSD(AstroParams, CosmoParams, HMFinterp, Greens_function_LUV_Short,Greens_function_LHa, LFParams.zcenter)
+
+ _Acoeff = sigmasqcross/sigmaLHa**2
+
+ meanLUVlong, sigmaLUVlong = self.LF_Init.meanandsigma_observable_PSD(CosmoParams, AstroParams, HMFinterp, LFParams, Greens_function_LUV_Long, pop=2)
+
+ #get the UV-A*Ha "excess" UV luminosity, not exactly lognormal so use the same trick as for MUV:
+ meanLUV_excess_short = meanLUVshort - _Acoeff * meanLHa
+ sigmaLUV_excess_short = np.sqrt(sigmaLUVshort**2 + _Acoeff**2 * sigmaLHa**2 - 2.0 * _Acoeff * sigmasqcross)
+ MUVbar_excess, sigmaMUV_excess = self.LF_Init.sigma_MUV_from_meansandsigmas(meanLUV_excess_short, meanLUVlong, sigmaLUV_excess_short, sigmaLUVlong)
+
+
+ MUVavglist, sigmaMUV = self.LF_Init.sigma_MUV_from_meansandsigmas(meanLUVshort, meanLUVlong, sigmaLUVshort, sigmaLUVlong)
+ MUVavglist = np.fmin(MUVavglist,constants._MAGMAX_UV)
+ sigma_times_AUV_dust = np.fmax(0.0, LFParams.sigma_times_AUV_dust) #assumed constant, not derived from SFH
+
+ #these are the parameters of the closest lognormal to each Ha, UV, and UVx
+ muHa, sigmaHa = mean_log10(sigmaLHa, meanLHa)*np.log(10), sigma_log10(sigmaLHa, meanLHa)*np.log(10) #mean and std of ln(LUVx), a gaussian varible
+
+ muUV, sigmaUV = np.log(self.LF_Init.L_ergsHz_of_Mag(MUVavglist)), sigmaMUV*np.log(10)/2.5
+ muUVx, sigmaUVx = np.log(self.LF_Init.L_ergsHz_of_Mag(MUVbar_excess)), sigmaMUV_excess*np.log(10)/2.5
+
+ if (FLAG_supersample_MUV==True):
+ _NLuvsupersample = 99 #number of LUV values to supersample
+ _LUVlist = np.logspace(35,46,_NLuvsupersample) #in case you want to integrate and then bin
+ else:
+ _LUVlist = self.LF_Init.L_ergsHz_of_Mag(LFParams.MUVcenters) #this will give mean of for each MUV bin
+
+
+ #This is used for assigning galaxies to MUV bins, so we add dust correction since the Ha/UV ratios are dust corrected but they're binned in MUVobs
+ currMUV = MUVavglist
+ currMUV2 = np.ones_like(currMUV)
+ while(np.sum(np.abs((currMUV2-currMUV)/currMUV)) > 0.02):
+ currMUV2 = currMUV
+ currMUV = MUVavglist + self.LF_Init.dust_attenuation(LFParams,LFParams.zcenter,currMUV,"UV")
+
+ sigmaUV_dust = sigma_times_AUV_dust * self.LF_Init.dust_attenuation(LFParams,LFParams.zcenter,currMUV,"UV")
+
+ sigmaMUV_obs = np.sqrt(sigmaMUV**2 + sigmaUV_dust**2) #add dust sigma, if any, to the UV sigma
+ sigmaMUV_obs = np.fmax(sigmaMUV_obs, 0.2) #avoid numerical issues with zero sigma
+
+ muUV_obs, sigmaUV_obs = np.log(self.LF_Init.L_ergsHz_of_Mag(currMUV)), sigmaMUV_obs*np.log(10)/2.5
+ PlnLUV = normal_pdf(np.log(_LUVlist), muUV_obs, sigmaUV_obs, dimy=1)+1e-99 #to avoid Nans
+ UVLFvalues = np.trapezoid(HMFtab[:,None] * PlnLUV, HMFinterp.Mhtab, axis=0)
+
+
+ #we exploit the fact that P(log10LHa - log10LHabar | LUV) doesnt change for LUV > LUVbar(Mh)
+ #so we set LUV = LUVbar(Mh) for each Mh. (we dont modify P(LUV) since that is the UVLF, not the Ha/UV ratio)
+ _meanLUV_ofMh = np.exp(muUV[:, None])
+ _LUVforcalculation = np.minimum(_LUVlist[None,:], _meanLUV_ofMh) #Mh x LUVs, so that for LUV>LUVbar we recover the LUVbar result
+ PlnLUVforcalculation = normal_pdf(np.log(_LUVforcalculation), muUV, sigmaUV, dimy=1)+1e-99 #to avoid Nans
+
+ _LHacalc = _LUVforcalculation[:,:,None] * 10**log10etavalues[None,None,:]
+ PlnLHa = normal_pdf(np.log(_LHacalc), muHa, sigmaHa, dimy=2)
+
+ _LUVx = np.fmax(1.0, _LUVforcalculation[:,:,None] - _LHacalc [:,:,:] * _Acoeff[:, None,None]) #LUVx = _LUVforcalculation - A * LHa, where A is the coefficient for each MUV
+ PlnLUVx_fixedHa = normal_pdf(np.log(_LUVx), muUVx, sigmaUVx,dimy=2)
+ dlnLUV_dlnLUVx = _LUVx/_LUVforcalculation[:,:,None]
+
+ PDF_lnLUV_fixedHa = PlnLUVx_fixedHa/np.abs(dlnLUV_dlnLUVx)
+
+ Plog10eta_fixedLUV = PDF_lnLUV_fixedHa * PlnLHa/PlnLUVforcalculation[:,:,None] * np.log(10) #Plog10eta_fixedLUV = Plog10LHa_fixedLUV. Note PlnLUVforcalculation, since it is the PDF of LUV that we use in Bayes rule. Below its P(LUV) since we sum over the Prob that that Mh is in the MUV bin
+
+ pdf_binned = np.trapezoid(HMFtab[:,None,None] * Plog10eta_fixedLUV * PlnLUV[:,:,None], HMFinterp.Mhtab, axis=0)/UVLFvalues[:,None]
+
+ #if supersampling, re-bin in MUVs:
+ if (FLAG_supersample_MUV==True):
+ #weights is NMUVcenters x _NLuvsupersample, multiply pdf_binned which is _NLuvsupersample x Nlog10etavalues
+
+ MUVleft_edges = LFParams.MUVcenters - LFParams.MUVwidths / 2
+ MUVright_edges = LFParams.MUVcenters + LFParams.MUVwidths / 2
+
+ # full edges (length N+1)
+ MUV_bin_edges = np.concatenate([MUVleft_edges, [MUVright_edges[-1]]])
+
+ MUVcuthi = MUV_bin_edges[1:]
+ MUVcutlo = MUV_bin_edges[:-1]
+ MUVs = self.LF_Init.Mag_of_L_ergs(_LUVlist) #here we use _LUVlist since its for the P(LUV) not the Ha/UV ratio
+ xhi = np.heaviside(np.subtract.outer(MUVcuthi, MUVs),0.5)
+ xlo = np.heaviside(np.subtract.outer(MUVcutlo, MUVs),0.5)
+ MUVwidths = MUV_bin_edges[1:] - MUV_bin_edges[:-1]
+ weights = (xhi - xlo).T/(MUVwidths)
+
+ UVLFvalues_binned = np.einsum('ij,i->j', weights, UVLFvalues)
+ pdf_binned = np.einsum('ji,jk->ik', weights, pdf_binned*UVLFvalues[:,None]) / UVLFvalues_binned[:,None]
+
+
+ return log10etavalues, pdf_binned, UVLFvalues
+
+
+ def log10eta_fromlog10xiion(self, log10xiion):
+ 'Returns log10(LHa/LUV) [both in erg/s] given xiion'
+
+ _constxiionHaUV = 7.28e11 #erg/s/Hz
+ HatoUV = 1.0/self.LF_Init.L_ergs_of_Mag(self.LF_Init.Mag_of_L_ergsHz(1.))*10**log10xiion/_constxiionHaUV
+
+ return np.log10(HatoUV)
+
+
+ def log10xiion_fromlog10eta(self, log10eta):
+ 'Returns log10(xiion) [in Hz/erg] given log10(LHa/LUV) [both in erg/s]'
+
+ _constxiionHaUV = 7.28e11 #erg/s/Hz
+ xiion = self.LF_Init.L_ergs_of_Mag(self.LF_Init.Mag_of_L_ergsHz(1.))*10**log10eta*_constxiionHaUV
+
+ return np.log10(xiion)
+
+
+ def cross_sigma_squared_PSD(self, GreensFunction1, GreensFunction2, CosmoParams, AstroParams, HMFinterp, LFParams):
+ "Returns the cross sigma squared of two observables, given their window functions and SFH"
+
+
+ _, windowfourier1= self.SFH_Init.WindowFourier(CosmoParams, AstroParams, HMFinterp, self.SFRD_Init, GreensFunction1, LFParams.zcenter, AstroParams._tagesMyr, pop = 2)
+
+ _, windowfourier2= self.SFH_Init.WindowFourier(CosmoParams, AstroParams, HMFinterp, self.SFRD_Init, GreensFunction2, LFParams.zcenter, AstroParams._tagesMyr, pop = 2)
+
+ omegalist = AstroParams.omega_PSFR #use the omegalist from the FFT, which is the same for all observables
+ powerNL = AstroParams.PSFR_table #use the power spectrum from the FFT, which is the same for all observables
+
+ _whichomegakeep = np.logical_and(omegalist > AstroParams._omegamin, omegalist < AstroParams._omegamax)
+
+ sigmasqcross = np.trapezoid(powerNL * np.real(windowfourier1*np.conjugate(windowfourier2) )*_whichomegakeep, omegalist,axis=1)*2/(2*np.pi) #times 2 because + and - freqs
+
+ #Also return the sigmas for each observable, which are needed for the PDF
+ sigma1 = np.sqrt(np.trapezoid(powerNL * np.abs(windowfourier1)**2*_whichomegakeep, omegalist,axis=1)*2/(2*np.pi) )
+ sigma2 = np.sqrt(np.trapezoid(powerNL * np.abs(windowfourier2)**2*_whichomegakeep, omegalist,axis=1)*2/(2*np.pi) )
+ #And the means of the observables
+
+ mean1 = np.trapezoid(GreensFunction1(AstroParams, AstroParams._tagesMyr, HMFinterp.Mhtab) * self.SFH_Init.SFH_II, AstroParams._tagesMyr*1e6, axis=1)
+ mean2 = np.trapezoid(GreensFunction2(AstroParams, AstroParams._tagesMyr, HMFinterp.Mhtab) * self.SFH_Init.SFH_II, AstroParams._tagesMyr*1e6, axis=1)
+
+ return mean1, mean2, sigma1, sigma2, sigmasqcross
+
+
diff --git a/zeus21/SED.py b/zeus21/SED.py
new file mode 100644
index 0000000..529e878
--- /dev/null
+++ b/zeus21/SED.py
@@ -0,0 +1,242 @@
+"""
+SEDs and Green's functions for first-galaxy emission models.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
+
+
+import numpy as np
+from . import constants
+
+
+def SED_XRAY(AstroParams, En, pop = 0): #pop set to zero as default, but it must be set to either 2 or 3
+ """
+ X-ray SED for Pop II or Pop III sources.
+
+ Normalized so that ∫_{E0}^{Emax} E · SED(E) dE = 1, i.e. E·SED is a
+ power law with index alpha_xray. The function returns the *photon number*
+ spectrum (divided by E at the end).
+
+ The high-energy cutoff is intentionally omitted because photons redshift
+ down into the <2 keV observing band.
+
+ Parameters
+ ----------
+ AstroParams : object
+ Must expose: alpha_xray, alpha_xray_III, E0_xray, Emax_xray_norm.
+ En : float or array-like
+ Photon energy in eV.
+ pop : {2, 3}
+ Stellar population. 2 = Pop II, 3 = Pop III.
+
+ Returns
+ -------
+ ndarray
+ SED in units of eV⁻¹, same shape as En.
+ Zero below E0_xray.
+ """
+ if pop == 2:
+ alphaX = AstroParams.alpha_xray
+ elif pop == 3:
+ alphaX = AstroParams.alpha_xray_III
+ else:
+ print("Must set pop to either 2 or 3!")
+
+ if np.abs(alphaX + 1.0) < 0.01: #log
+ norm = 1.0/np.log(AstroParams.Emax_xray_norm/AstroParams.E0_xray) / AstroParams.E0_xray
+ else:
+ norm = (1.0 + alphaX)/((AstroParams.Emax_xray_norm/AstroParams.E0_xray)**(1 + alphaX) - 1.0) / AstroParams.E0_xray
+
+ return np.power(En/AstroParams.E0_xray, alphaX)/En * norm * np.heaviside(En - AstroParams.E0_xray, 0.5)
+ #do not cut at higher energies since they redshift into <2 keV band
+
+
+
+def SED_LyA(nu_in, pop = 0): #default pop set to zero so python doesn't complain, but must be 2 or 3 for this to work
+ """
+ Lyman-alpha continuum SED for Pop II or Pop III sources.
+
+ A two-segment power law in frequency, joined at ν_LyB:
+ • νLyA ≤ ν < νLyB : index indexbelow (flatter)
+ • νLyB ≤ ν < νLyCont: index indexabove (steeper)
+
+ Normalized so that ∫_{νLyA}^{νLyCont} SED(ν) dν = 1 (photon number
+ per unit frequency). Contrast with SED_XRAY, which normalizes E·SED.
+
+ Parameters
+ ----------
+ nu_in : float or array-like
+ Frequency in the same units as constants.freqLyA / freqLyCont.
+ pop : {2, 3}
+ Stellar population. Uses BL05 stellar spectra as reference.
+ Pop II: amps = [0.68, 0.32], Pop III: amps = [0.56, 0.44].
+
+ Returns
+ -------
+ ndarray
+ SED value(s), same shape as nu_in. Zero outside [νLyA, νLyCont).
+ """
+
+ nucut = constants.freqLyB #above and below this freq different power laws
+ if pop == 2:
+ amps = np.array([0.68,0.32]) #Approx following the stellar spectra of BL05. Normalized to unity
+ indexbelow = 0.14 #if one of them zero worry about normalization
+ normbelow = (1.0 + indexbelow)/(1.0 - (constants.freqLyA/nucut)**(1 + indexbelow)) * amps[0]
+ indexabove = -8.0
+ normabove = (1.0 + indexabove)/((constants.freqLyCont/nucut)**(1 + indexabove) - 1.0) * amps[1]
+ elif pop == 3:
+ amps = np.array([0.56,0.44]) #Approx following the stellar spectra of BL05. Normalized to unity
+ indexbelow = 1.29 #if one of them zero worry about normalization
+ normbelow = (1.0 + indexbelow)/(1.0 - (constants.freqLyA/nucut)**(1 + indexbelow)) * amps[0]
+ indexabove = 0.2
+ normabove = (1.0 + indexabove)/((constants.freqLyCont/nucut)**(1 + indexabove) - 1.0) * amps[1]
+ else:
+ print("Must set pop to 2 or 3!")
+
+ nulist = np.asarray([nu_in]) if np.isscalar(nu_in) else np.asarray(nu_in)
+
+ result = np.zeros_like(nulist)
+ for inu, currnu in enumerate(nulist):
+ if (currnu=constants.freqLyCont):
+ result[inu] = 0.0
+ elif (currnu < nucut): #between LyA and LyB
+ result[inu] = normbelow * (currnu/nucut)**indexbelow
+ elif (currnu >= nucut): #between LyB and Continuum
+ result[inu] = normabove * (currnu/nucut)**indexabove
+ else:
+ print("Error in SED_LyA, whats the frequency Kenneth?")
+
+
+ return result/nucut #extra 1/nucut because dnu, normalizes the integral
+
+
+
+
+def Greens_function_LUV(AstroParams, ageMyrin, Mhalos):
+ """
+ UV luminosity Green's function for a 1 M☉/yr instantaneous burst at some time t.
+
+ Convolve with SFR(t) to get L_UV(t):
+ L_UV(t) = ∫ G_UV(t - t') · SFR(t') dt'
+
+ The shape is a double-power-law in age (fast rise, slow decline) with a
+ Gaussian bump at very young ages (~2–4 Myr) capturing the brief Wolf-Rayet
+ and OB-supergiant phase. A Gaussian exponential cutoff suppresses
+ contributions beyond ~650–1100 Myr depending on the SED model.
+
+ Parameters
+ ----------
+ AstroParams : object
+ Must choose SEDMODEL ∈ {'bagpipes', 'BPASS', 'BPASS_binaries'}.
+ ageMyrin : float or array-like, shape (Nt,)
+ Stellar population age in Myr. A small offset (1e-4 Myr) is added
+ internally to avoid division by zero at age = 0.
+ Mhalos : array-like, shape (NMh,)
+ Halo masses in M☉. Currently enter only through IMFZcorrection,
+ which is unity for UV (correction absorbed into ε*).
+
+ Returns
+ -------
+ ndarray, shape (NMh, Nt)
+ Green's function in erg s⁻¹ M☉⁻¹.
+ """
+
+ if AstroParams.SEDMODEL == 'bagpipes':
+ _amp = 3.1e36
+ _agepivot = 4 #Myr
+ _agepivot2 = 650 #Myr
+ _agebump, _widthbump, Ampbump = 3.4, 0.1, 0.33 #Myr, log10width, relative amplitude
+ _alpha, _beta = 1.4, -0.3
+ elif AstroParams.SEDMODEL == 'BPASS': #BPASS single stars
+ _agepivot = 4.2 #Myr
+ _agepivot2 = 1100 #Myr
+ _agebump, _widthbump, Ampbump = 2.2, 0.2, 0.7 #Myr, log10width, relative amplitude
+ _alpha, _beta = 1.2, 0.0
+ _amp = 1.8e36
+ elif AstroParams.SEDMODEL =='BPASS_binaries': #BPASS with binarity fraction built in (default). Pretty similar in UV
+ _agepivot = 4.0 #Myr
+ _agepivot2 = 1100 #Myr
+ _agebump, _widthbump, Ampbump = 2.2, 0.2, 0.6 #Myr, log10width, relative amplitude
+ _alpha, _beta = 1.2, -0.2
+ _amp = 2.2e36
+
+ ageMyr = ageMyrin+1e-4 #to avoid complaints about division by zero
+ IMFZcorrection = np.ones_like(Mhalos) #no correction on UV, absorbed by eps*
+ massindepresult = _amp*( Ampbump*np.exp(-(np.log10(ageMyr)-np.log10(_agebump))**2/2/_widthbump**2) + 1/((ageMyr/_agepivot)**_alpha+(ageMyr/_agepivot)**(_beta))* np.exp(-(ageMyr/_agepivot2)**2) ) #erg/s/Msun
+ return np.outer(IMFZcorrection,massindepresult) #erg/s/Msun, Nt x NMh
+
+def Selection_Timescales_LUV(times, time1, time2):
+ "Returns the selection function from t1 to t2, to keep t1 < t < t2 smoothly"
+ _tanhwidth = 0.2
+ return (1 + np.tanh( np.log(times/time1)/_tanhwidth))/2. * (1 + np.tanh( np.log(time2/times)/_tanhwidth))/2.
+
+def Greens_function_LUV_Short(AstroParams,time, mass):
+ "Age in Myr, window in erg/s/Msun for the short timescale LUV window"
+ return Greens_function_LUV(AstroParams, time, mass) * Selection_Timescales_LUV(time+1e-10, 0.0, AstroParams._tcut_LUV_short)[None,:] #+1e-10 to avoid division by zero in selectionLUV
+
+def Greens_function_LUV_Long(AstroParams,time, mass):
+ "Age in Myr, window in erg/s/Msun for the long timescale LUV window"
+ return Greens_function_LUV(AstroParams, time, mass) * Selection_Timescales_LUV(time+1e-10, AstroParams._tcut_LUV_short, 3000)[None,:]
+
+
+def Greens_function_LHa(AstroParams, ageMyrin, Mhalos):
+ """
+ Hα luminosity Green's function for a 1 M☉/yr instantaneous burst at some past time t.
+
+ Analogous to Greens_function_LUV but for the Hα recombination line.
+ Hα traces ionizing photons and therefore falls off much faster with age
+ (~few Myr vs. ~Gyr for UV). For BPASS_binaries there is a second component at ~20 Myr to account
+ for delayed ionizing flux.
+
+ The IMF/metallicity correction scales with halo mass as a power law,
+ clamped to [0.1, 10] to prevent runaway corrections.
+
+
+ Parameters
+ ----------
+ AstroParams : object
+ Must expose: SEDMODEL, normLHa_ZIMF, alphanormLHa_ZIMF.
+ ageMyrin : float or array-like, shape (Nt,)
+ Stellar population age in Myr.
+ Mhalos : array-like, shape (NMh,)
+ Halo masses in M☉. Used in the IMF/Z mass-dependent correction.
+
+ Returns
+ -------
+ ndarray, shape (NMh, Nt)
+ Green's function in erg s⁻¹ M☉⁻¹.
+ """
+ if AstroParams.SEDMODEL == 'bagpipes':
+ _amp = 1.2e35
+ _exp = 2.0
+ _agepivot = 4.4 #Myr
+ _alpha = 0.33
+ elif AstroParams.SEDMODEL == 'BPASS':
+ _amp = 3.4e35
+ _exp = 0.9
+ _agepivot = 1.2 #Myr
+ _alpha = 0.5
+ elif AstroParams.SEDMODEL == 'BPASS_binaries':
+ _amp = 3.4e35
+ _exp = 0.78
+ _agepivot = 1.2 #Myr
+ _alpha = 0.5
+ else:
+ raise ValueError("SEDMODEL must be 'bagpipes', 'BPASS' or 'BPASS_binaries'")
+ ageMyr = ageMyrin+1e-4 #to avoid complaints about division by zero
+ IMFZcorrection = AstroParams.normLHa_ZIMF * (Mhalos/1e10)**AstroParams.alphanormLHa_ZIMF
+ IMFZcorrection = np.fmin(np.fmax(IMFZcorrection, 0.1),10.) #make sure it's not too low or high
+ massindepresult = _amp * np.exp(-(ageMyr/_agepivot)**_exp)*(ageMyr/_agepivot)**_alpha #erg/s/Msun
+ if AstroParams.SEDMODEL == 'BPASS_binaries':
+ _amp2 = 8e32
+ _agepivot2 = 20 #Myr
+ massindepresult += _amp2 * np.exp(-(ageMyr/_agepivot2)) #extra component due to binaries
+ return np.outer(IMFZcorrection,massindepresult) #erg/s/Msun, Nt x NMh, so we can multiply by SFR to get LHa
diff --git a/zeus21/T21coefficients.py b/zeus21/T21coefficients.py
new file mode 100644
index 0000000..619c38d
--- /dev/null
+++ b/zeus21/T21coefficients.py
@@ -0,0 +1,637 @@
+"""
+Bulk of the Zeus21 calculation:
+ - Determines Lyman-alpha and X-ray fluxes,
+ - Evolves the cosmic-dawn IGM state (WF coupling and heating),
+ - Computes the 21-cm global signal and the effective biases gammaR to determine the 21-cm power spectrum.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
+
+from . import cosmology
+from . import constants
+
+import numpy as np
+
+from scipy import interpolate
+
+
+from .sfrd import Z_init, SFRD_class, PopIII_relvel
+from .reionization import reionization_global
+
+from .SED import SED_LyA, SED_XRAY
+
+
+class LyAlpha_class:
+ """
+ Determines Lyman-alpha properties and fluxes.
+
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ z_Init : Z_init class, optional
+ Initial redshift matrices for the calculation (see sfrd.py for details).
+ Default is None.
+ SFRD_Init : SFRD_class class, optional
+ Initial star formation rate density for the calculation (see sfrd.py for details).
+ Default is None.
+
+ Attributes
+ ----------
+ coeff1LyAzp : array
+ Redshift-dependent coefficient in the J_alpha flux computation, see Eq. 29 in arXiv:2302.08506.
+ coeff2LyAzpRR_II : array
+ Coefficient that multiplies the SFRD in the integral for J_alpha for Pop II stars, see Eq. 30 of arXiv:2302.08506.
+ coeff2LyAzpRR_III : array
+ Coefficient that multiplies the SFRD in the integral for J_alpha for Pop III stars.
+
+ """
+
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, z_Init = None, SFRD_Init = None):
+
+ # if z_Init and SFRD_Init are not provided, we initialize them here. This allows us to avoid redundant computations if they were already initialized in the parent class and passed as arguments.
+ if z_Init is None:
+ z_Init = Z_init(UserParams=UserParams, CosmoParams=CosmoParams)
+
+ if SFRD_Init is None:
+ SFRD_Init = SFRD_class(UserParams, CosmoParams, AstroParams, HMFinterp, z_Init)
+
+ self.coeff1LyAzp = (1+z_Init.zintegral)**2/(4*np.pi) # redshift-dependent coefficient in the J_alpha flux computation, see Eq. 29 in arXiv:2302.08506
+
+ nuLYA = np.geomspace(constants.freqLyA, constants.freqLyCont, 128) # frequencies to compute the SED at, between LyA and the Lyman limit. We only consider these photons since above they are absorbed by the IGM through photoionization, and below they do not redshift into LyA.
+ sedLYAII_interp = interpolate.interp1d(nuLYA, SED_LyA(nuLYA, pop = 2), kind = 'linear', bounds_error = False, fill_value = 0) # interpolate LyA SED to compute the contribution of higher Lyman series photons that redshift into LyA after being emitted at higher frequencies.
+
+ n_recArray = np.arange(0,constants.n_max_recycle-1 ) # array of n levels from which photons are emitted after recombinations
+ zpCube, rCube, n_recCube = np.meshgrid(z_Init.zintegral, CosmoParams._Rtabsmoo, n_recArray, indexing='ij', sparse=True) # 3D cube for the recombination contribution to LyA. Dimensions are (z,R,n), where n is the Lyman series level from which photons are emitted after recombinations
+ n_lineCube = n_recCube + 2
+ zmax_lineCube = (1+zpCube) * (1 - pow(1+n_lineCube,-2.0))/(1-pow(n_lineCube,-2.0) ) - 1.0 # maximum redshift Lyman series photons can redshift before falling into a Ly-n resonance
+
+ nu_linezpCube = constants.freqLyCont * (1 - (1.0/n_lineCube)**2)
+ zGreaterCube = z_Init.zGreaterMatrix_nonan.reshape(len(z_Init.zintegral), len(CosmoParams._Rtabsmoo), 1) # redefine this just for LyA routine, to have the right dimensions for the recombination contribution. Dimensions are (z,R,1), where z is the redshift at which we want to compute the flux, and R is the smoothing scale at which we want to compute the SFRD. We will be summing over n_recCube, so we need to have the same zGreater for all n's.
+ nu_lineRRCube = nu_linezpCube * (1.+zGreaterCube)/(1+zpCube) # frequency at which photons emitted at the Lyman series lines are observed at redshift zGreaterCube
+
+ eps_alphaRR_II_Cube = AstroParams.N_alpha_perbaryon_II/CosmoParams.mu_baryon_Msun * sedLYAII_interp(nu_lineRRCube) # emissivity of Lyman-alpha photons from recombinations, converted from per SFR to per baryon by dividing by the mean mass per baryon in Msun, and multiplying by the number of LyA photons emitted per baryon in stars. We then multiply by the SED at the frequency at which these photons are observed at redshift zGreaterCube, to account for the fact that not all photons emitted at the Lyman series lines will redshift into LyA, but some will redshift into lower frequencies and be absorbed by dust or redshift out of the band.
+
+ #the last nonzero index of the array is overestimated since only part of the spherical shell is within zmax_line. Correct by by dz/Delta z
+ weights_recCube = np.heaviside(zmax_lineCube - zGreaterCube, 0.0)
+ index_first0_weightsCube = np.where(np.diff(weights_recCube, axis = 1) == -1) #find index of last nonzero value. equals zero if two consecutive elements are 1 or 0, and -1 if two consecutive elements are [1,0]
+ i0Z, i0R, i0N = index_first0_weightsCube
+ weights_recCube[i0Z, i0R, i0N] *= (zmax_lineCube[i0Z, 0, i0N] - zGreaterCube[i0Z, i0R, 0])/ (zGreaterCube[i0Z, i0R+1, 0] - zGreaterCube[i0Z, i0R, 0])
+
+ Jalpha_II = np.array(constants.fractions_recycle)[:len(n_recArray)].reshape(1,1,len(n_recArray)) * weights_recCube * eps_alphaRR_II_Cube # just resizing f_recycle; it is length 29,we only consider up to n=22
+
+ LyAintegral_II = np.sum(Jalpha_II,axis=2) #sum over axis 2, over all possible n transitions, see Eq. 25 of arXiv:2302.08506
+ self.coeff2LyAzpRR_II = CosmoParams._Rtabsmoo * CosmoParams._dlogRR * SFRD_Init.SFRDbar2D_II * LyAintegral_II/ constants.yrTos/constants.Mpctocm**2 # This is the coefficient that multiplies the SFRD in the integral for J_alpha, see Eq. 30 of arXiv:2302.08506. It has dimensions of s^-1 cm^-3, so when multiplied by the SFRD in Msun/year/Mpc^3 and integrated over R, it gives the correct units of s^-1 cm^-3 for J_alpha.
+
+ if AstroParams.USE_POPIII:
+ # if required, we repeat the same for Pop III stars, where we change the SED and number of LyA photons per baryon in stars. We use the same weights_recCube since they only depend on the redshift at which photons are emitted and observed
+ sedLYAIII_interp = interpolate.interp1d(nuLYA, SED_LyA(nuLYA, pop = 3), kind = 'linear', bounds_error = False, fill_value = 0)
+ eps_alphaRR_III_Cube = AstroParams.N_alpha_perbaryon_III/CosmoParams.mu_baryon_Msun * sedLYAIII_interp(nu_lineRRCube)
+
+ Jalpha_III = np.array(constants.fractions_recycle)[:len(n_recArray)].reshape(1,1,len(n_recArray)) * weights_recCube * eps_alphaRR_III_Cube
+ LyAintegral_III = np.sum(Jalpha_III,axis=2)
+ self.coeff2LyAzpRR_III = CosmoParams._Rtabsmoo * CosmoParams._dlogRR * SFRD_Init.SFRDbar2D_III * LyAintegral_III/ constants.yrTos/constants.Mpctocm**2
+ else:
+ self.coeff2LyAzpRR_III = np.zeros_like(self.coeff2LyAzpRR_II)
+
+ if UserParams.C2_RENORMALIZATION_FLAG:
+ # If required, correct for nonlinearities in <(1+d)SFRD>
+ # We're assuming that (1+d)SFRD ~ exp(gamma*d), so the "Lagrangian" gamma was gamma-1.
+ # We're using the fact that for a lognormal variable X = log(Z), with Z=\gamma \delta, = exp(\gamma^2 \sigma^2/2).
+ self.coeff2LyAzpRR_II = self.coeff2LyAzpRR_II * SFRD_Init._corrfactorEulerian_II.T
+ if AstroParams.USE_POPIII:
+ self.coeff2LyAzpRR_III = self.coeff2LyAzpRR_III * SFRD_Init._corrfactorEulerian_III.T
+
+
+class Xrays_class:
+ """
+ Determines X-ray properties and fluxes.
+
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ z_Init : Z_init class, optional
+ Initial redshift matrices for the calculation (see sfrd.py for details).
+ Default is None.
+ SFRD_Init : SFRD_class class, optional
+ Initial star formation rate density for the calculation (see sfrd.py for details).
+ Default is None.
+
+ Attributes
+ ----------
+ atomfractions : array
+ Fraction of baryons in HI and HeI, assumed to just be the avg cosmic. Used to compute X-ray absorption.
+ atomEnIon : array
+ Threshold energies for HI and HeI, in eV.
+ TAUMAX : float
+ Maximum optical depth, cut to 0 after to avoid overflows.
+ coeff1Xzp : array
+ Redshift-dependent coefficient in the X-ray flux computation, with extra factors to account for adiabatic cooling and the fact that we compute the integral in redshift instead of time.
+ coeff2XzpRR_II : array
+ Coefficient that multiplies the SFRD in the integral for the X-ray flux for Pop II stars
+ coeff2XzpRR_III : array
+ Coefficient that multiplies the SFRD in the integral for the X-ray flux for Pop III stars
+ _GammaXray_II : array
+ X-ray ionization rate for Pop II stars, in s^-1, see Eq. 37 in arXiv:2302.08506
+ _GammaXray_III : array
+ X-ray ionization rate for Pop III stars, in s^-1
+ coeff_Gammah_Tx_II : array
+ Coefficient that multiplies the X-ray ionization rate to get the X-ray heating rate for Pop II stars, in K/s, see Eq. 41 in arXiv:2302.08506.
+ coeff_Gammah_Tx_III : array
+ Coefficient that multiplies the X-ray ionization rate to get the X-ray heating rate for Pop III stars, in K/s
+ Gammaion_II : array
+ X-ray ionization rate for Pop II stars, in s^-1
+ Gammaion_III : array
+ X-ray ionization rate for Pop III stars, in s^-1
+ _xe_avg_ad : array
+ Average ionization fraction of the IGM from adiabatic cooling and recombinations
+ _xe_avg: array
+ Average ionization fraction of the IGM, including both the contribution from UV photons and the partial ionization from X-rays
+ _fheat : array
+ Fraction of X-ray energy that goes into heating, as opposed to ionization
+ Gammaheat_II : array
+ X-ray heating rate for Pop II stars, in K/s
+ Gammaheat_III : array
+ X-ray heating rate for Pop III stars, in K/s
+ Tk_xray : array
+ Average kinetic temperature of the IGM from X-ray heating, in K
+ Tk_ad : array
+ Average kinetic temperature of the IGM from adiabatic cooling only, in K
+ Tk_avg : array
+ Average kinetic temperature of the IGM, including both adiabatic cooling and X-ray heating, in K
+ sigma_HI : function
+ Cross section for X-ray absorption by HI, as a function of energy in eV, in cm^2
+ sigma_HeI : function
+ Cross section for X-ray absorption by HeI, as a function of energy in eV, in cm^2
+ """
+
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, z_Init = None, SFRD_Init = None):
+
+ # if z_Init and SFRD_Init are not provided, we initialize them here. This allows us to avoid redundant computations if they were already initialized in the parent class and passed as arguments.
+ if z_Init is None:
+ z_Init = Z_init(UserParams=UserParams, CosmoParams=CosmoParams)
+
+ if SFRD_Init is None:
+ SFRD_Init = SFRD_class(UserParams, CosmoParams, AstroParams, HMFinterp, z_Init)
+
+ self.atomfractions = np.array([1,CosmoParams.x_He]) #fraction of baryons in HI and HeI, assumed to just be the avg cosmic
+ self.atomEnIon = np.array([constants.EN_ION_HI, constants.EN_ION_HeI]) #threshold energies for each, in eV
+ self.TAUMAX=100. #max optical depth, cut to 0 after to avoid overflows
+
+ _Energylist = AstroParams.Energylist # list of energies at which we compute the SED and optical depth. We use a fixed list of energies instead of integrating over energy, to speed up the computation
+ Nzinttau = np.floor(10*UserParams.precisionboost).astype(int) # number of redshift points to compute the optical depth integral. We use a fixed number of points instead of integrating over redshift, to speed up the computation
+
+ zGreaterCube = z_Init.zGreaterMatrix_nonan.reshape(len(z_Init.zintegral), len(CosmoParams._Rtabsmoo), 1, 1) #redefine this just for x-ray routine
+
+ self.coeff1Xzp = -2/3 * z_Init.zintegral * z_Init.dlogzint / cosmology.Hubinvyr(CosmoParams,z_Init.zintegral) / (1+z_Init.zintegral) * (1+z_Init.zintegral)**2
+ self.coeff1Xzp = self.coeff1Xzp / (1+z_Init.zintegral)**2 * constants.yrTos # this accounts for adiabatic cooling. compensated by the inverse at the end
+
+ zpCube, rCube, eCube, zPPCube = np.meshgrid(z_Init.zintegral, CosmoParams._Rtabsmoo, _Energylist, np.arange(Nzinttau), indexing='ij', sparse=True) # 4D cube for the X-ray contribution. Dimensions are (z,R,E,z'), where z is the redshift at which we want to compute the flux, R is the smoothing scale at which we want to compute the SFRD, E is the energy at which we want to compute the SED and optical depth, and z' is the redshift at which we want to compute the optical depth integral
+ currentEnergyTable = eCube * (1+zGreaterCube) / (1+zpCube) # Energy at which photons observed at redshift zGreaterCube were emitted at redshift zpCube, since E' = E(1+z')/(1+z).
+ SEDCube = SED_XRAY(AstroParams, currentEnergyTable, pop = 2) # SED of our X-ray sources for popII
+ SEDCube_III = SED_XRAY(AstroParams, currentEnergyTable, pop = 3) # SED of our X-ray sources for popIII, we compute it even if we don't use it, to speed up the computation in case we do use it later.
+
+ ######## Broadcasted routine to find X-ray optical depths, modeled after but does not use xrays.optical_depth
+
+ zPPCube = np.array([np.linspace(np.transpose([z_Init.zintegral]), z_Init.zGreaterMatrix, Nzinttau, axis = 2)])
+ zPPCube = zPPCube.reshape(len(z_Init.zintegral), len(CosmoParams._Rtabsmoo), 1, Nzinttau) # to have 4D dimensions, default shape = (64, 45, 1, 10)
+
+ ePPCube = eCube * (1+ zPPCube) / (1+zpCube) # E'' = E(1+z'')/(1+z)
+ sigmatot = self.atomfractions[0] * self.sigma_HI(ePPCube) # cross section for X-ray absorption. determined by the energy at which they are absorbed. We multiply by the atom fractions to get the total cross section per baryon
+ sigmatot += self.atomfractions[1] * self.sigma_HeI(ePPCube) # we only consider HeI since HeII is negligible at the redshifts we're interested in, and it has a much higher ionization energy so it does not contribute much to the absorption of X-rays
+
+ opticalDepthIntegrand = 1 / cosmology.HubinvMpc(CosmoParams, zPPCube) / (1+zPPCube) * sigmatot * cosmology.n_H(CosmoParams, zPPCube) * constants.Mpctocm # this uses atom fractions of 1 for HI and x_He for HeI
+ tauCube = np.trapezoid(opticalDepthIntegrand, zPPCube, axis = 3) # integrate over z' to get the optical depth. This gives us a 3D cube with dimensions (z, R, E), where z is the redshift at which we want to compute the flux, R is the smoothing scale at which we want to compute the SFRD, and E is the energy at which we want to compute the SED and optical depth.
+
+ # cap tau to avoid overflows in the exponential
+ indextautoolarge = np.array(tauCube>=self.TAUMAX)
+ tauCube[indextautoolarge] = self.TAUMAX
+
+ if CosmoParams.Flag_emulate_21cmfast:
+ # if we're emulating 21cmfast, we use a step function for the absorption
+ weights_X_zCube = np.heaviside(1.0 - tauCube, 0.5)
+ else:
+ weights_X_zCube = np.exp(-tauCube)
+
+ SEDCube = SEDCube[:,:,:,0] # rescale dimensions of energy and SED cubes back to 3D, so we can integrate over energy
+ SEDCube_III = SEDCube_III[:,:,:,0] # same for popIII
+
+ eCube = eCube[:,:,:,0]
+ ######## end of optical depth routine
+
+ JX_coeffsCube = SEDCube * weights_X_zCube # this is the coefficient that multiplies the SFRD in the integral for the X-ray flux, before integrating over energy. It has dimensions of number of photons per energy per baryon, multiplied by the absorption factor, so when multiplied by the SFRD in Msun/year/Mpc^3 and integrated over R and E, it gives the correct units of number of photons per second per baryon for the X-ray flux. We keep it as a cube for now to integrate over energy later.
+ JX_coeffsCube_III = SEDCube_III * weights_X_zCube # same for popIII
+
+ sigma_times_en = self.atomfractions[0] * self.sigma_HI(eCube) * (eCube - self.atomEnIon[0]) # we multiply the cross section by (E - E_ion) to account for the fact that only the energy above the ionization threshold goes into heating and ionization, while the rest is lost to secondary electrons. We also multiply by the atom fractions to get the total contribution per baryon, instead of per Hydrogen nucleus.
+ sigma_times_en += self.atomfractions[1] * self.sigma_HeI(eCube) * (eCube - self.atomEnIon[1]) # same for HeI
+ sigma_times_en /= np.sum(self.atomfractions) # to normalize per baryon, instead of per Hydrogen nucleus HI and HeII separate. Notice Energy (and not Energy'), since they get absorbed at the zp frame
+
+ xrayEnergyTable = np.sum(JX_coeffsCube * sigma_times_en * eCube * AstroParams.dlogEnergy,axis=2) # integrate over energy to get the coefficient that multiplies the SFRD in the integral for the X-ray flux
+ self.coeff2XzpRR_II = np.nan_to_num(CosmoParams._Rtabsmoo * CosmoParams._dlogRR * SFRD_Init.SFRDbar2D_II * xrayEnergyTable * (1.0/constants.Mpctocm**2.0) * constants.normLX_CONST, nan = 0) # see Eq. 39 in arXiv:2302.08506. We multiply by normLX_CONST to convert from number of photons to energy, and by 1/Mpc^2 to convert from per area to per volume, since the SFRD is in Msun/year/Mpc^3 and we want the X-ray flux in energy per second per baryon
+
+ if AstroParams.USE_POPIII:
+ # same for popIII
+ xrayEnergyTable_III = np.sum(JX_coeffsCube_III * sigma_times_en * eCube * AstroParams.dlogEnergy,axis=2)
+ self.coeff2XzpRR_III = np.nan_to_num(CosmoParams._Rtabsmoo * CosmoParams._dlogRR * SFRD_Init.SFRDbar2D_III * xrayEnergyTable_III * (1.0/constants.Mpctocm**2.0) * constants.normLX_CONST, nan = 0)
+ else:
+ self.coeff2XzpRR_III = np.zeros_like(self.coeff2XzpRR_II)
+
+ if UserParams.C2_RENORMALIZATION_FLAG:
+ # if required, correct for nonlinearities in <(1+d)SFRD>, only if doing nonlinear stuff.
+ # We're assuming that (1+d)SFRD ~ exp(gamma*d), so the "Lagrangian" gamma was gamma-1.
+ # We're using the fact that for a lognormal variable X = log(Z), with Z=\gamma \delta, = exp(\gamma^2 \sigma^2/2).
+ self.coeff2XzpRR_II = self.coeff2XzpRR_II* SFRD_Init._corrfactorEulerian_II.T
+ if AstroParams.USE_POPIII:
+ self.coeff2XzpRR_III = self.coeff2XzpRR_III * SFRD_Init._corrfactorEulerian_III.T
+
+ self._GammaXray_II = self.coeff1Xzp * np.sum( self.coeff2XzpRR_II ,axis=1) # eq. 37 in 2302.08506; notice units are modified (eg 1/H) so it's simplest to sum
+ self._GammaXray_III = self.coeff1Xzp * np.sum( self.coeff2XzpRR_III ,axis=1) # same for popIII
+
+ fion = 0.4 * np.exp(-cosmology.xefid(CosmoParams, z_Init.zintegral)/0.2) # partial ionization from Xrays. Fit to Furlanetto&Stoever
+ atomEnIonavg = (self.atomfractions[0] * self.atomEnIon[0] + self.atomfractions[1] * self.atomEnIon[1]) / (self.atomfractions[0] + self.atomfractions[1] ) # convert from 1/n_H to 1 / n_b
+
+ self.coeff_Gammah_Tx_II = -AstroParams.L40_xray * constants.ergToK * (1.0+z_Init.zintegral)**2 # coefficient to convert from Gamma_X to T_X, last factors accounts for adiabatic cooling. compensated by the inverse at zp in coeff1Xzp. Minus because integral goes from low to high z, but we'll be summing from high to low everywhere.
+ self.coeff_Gammah_Tx_III = -AstroParams.L40_xray_III * constants.ergToK * (1.0+z_Init.zintegral)**2 # same for popIII
+
+ self.Gammaion_II = self.coeff_Gammah_Tx_II *constants.KtoeV * self._GammaXray_II * fion/atomEnIonavg * 3/2 # ionization rate from X-rays for Pop II stars, in s^-1. We multiply by fion to account for the fact that only a fraction of the energy goes into ionization, and divide by the average ionization energy per baryon to convert from energy to number of ionizations ; atomEnIonavg makes it approximate. No adiabatic cooling (or recombinations) so no 1+z factors. Extra 3/2 bc temperature has a 2/3
+ self.Gammaion_III = self.coeff_Gammah_Tx_III *constants.KtoeV * self._GammaXray_III * fion/atomEnIonavg * 3/2 # same for popIII
+
+ # TODO: Improve model for xe
+
+ self.xe_avg_ad = cosmology.xefid(CosmoParams, z_Init.zintegral) # average ionization fraction from adiabatic cooling and recombinations, without X-ray ionization.
+ self.xe_avg = self.xe_avg_ad + np.cumsum((self.Gammaion_II+self.Gammaion_III)[::-1])[::-1] # average ionization fraction including X-ray ionization
+ if CosmoParams.Flag_emulate_21cmfast:
+ # if we're emulating 21cmfast, we use a fixed ionization fraction
+ self.xe_avg = 2e-4 * np.ones_like(self.Gammaion_II)
+
+ self.xe_avg = np.fmin(self.xe_avg, 1.0-1e-9)
+
+ # heat from Xrays
+ self._fheat = pow(self.xe_avg,0.225)
+ self.coeff1Xzp *= self._fheat # since this is what we use for the power spectrum, we need to upate it
+ self.Gammaheat_II = self._GammaXray_II * self._fheat
+ self.Gammaheat_III = self._GammaXray_III * self._fheat
+
+ # Computing avg kinetic temperature as sum of adiabatic & xray temperature
+ self.Tk_xray = self.coeff_Gammah_Tx_II * np.cumsum(self.Gammaheat_II[::-1])[::-1] + self.coeff_Gammah_Tx_III * np.cumsum(self.Gammaheat_III[::-1])[::-1] # in K, cumsum reversed because integral goes from high to low z. Only heating part
+ self.Tk_ad = cosmology.Tadiabatic(CosmoParams, z_Init.zintegral)
+ if CosmoParams.Flag_emulate_21cmfast:
+ # if we're emulating 21cmfast, we use a fixed kinetic temperature, since they use recfast, so their 'cosmo' temperature is slightly off
+ self.Tk_ad*=0.95
+
+ self.Tk_avg = self.Tk_ad + self.Tk_xray
+
+
+ def sigma_HI(self, Energyin):
+ """
+ Cross section for Xray absorption for neutral HI, from astro-ph/9601009
+
+ Parameters
+ ----------
+ Energyin: float
+ Energy in eV
+
+ Returns
+ -------
+ float
+ Cross section in cm^2.
+ """
+
+ E0 = 4.298e-1
+ sigma0 = 5.475e4
+ ya = 3.288e1
+ P = 2.963
+ yw = 0.0
+ y0 = 0.0
+ y1 = 0.0
+
+ Energy = Energyin
+
+ warning_lowE_HIXray = np.heaviside(13.6 - Energy, 0.5)
+ if(np.sum(warning_lowE_HIXray) > 0):
+ print('ERROR! Some energies for Xrays below HI threshold in sigma_HI. Too low!')
+
+ x = Energy/E0 - y0
+ y = np.sqrt(x**2 + y1**2)
+ Fy = ((x-1.0)**2 + yw**2) * y**(0.5*P - 5.5) * (1.0+np.sqrt(y/ya))**(-P)
+
+ return sigma0 * constants.sigma0norm * Fy
+
+
+ def sigma_HeI(self, Energyin):
+ """
+ Cross section for Xray absorption for neutral HI
+
+ Parameters
+ ----------
+ Energyin: float
+ Energy in eV
+
+ Returns
+ -------
+ float
+ Cross section in cm^2.
+ """
+
+ E0 = 13.61
+ sigma0 = 9.492e2
+ ya = 1.469
+ P = 3.188
+ yw = 2.039
+ y0 = 4.434e-1
+ y1 = 2.136
+
+ Energy = Energyin
+ warning_lowE_HeIXray = np.heaviside(25. - Energy, 0.5)
+ if(np.sum(warning_lowE_HeIXray) > 0):
+ print('ERROR! Some energies for Xrays below HeI threshold in sigma_HeI. Too low!')
+
+ x = Energy/E0 - y0
+ y = np.sqrt(x**2 + y1**2)
+ Fy = ((x-1.0)**2 + yw**2) * y**(0.5*P - 5.5) * (1.0+np.sqrt(y/ya))**(-P)
+
+ return sigma0 * constants.sigma0norm * Fy
+
+
+
+
+class get_T21_coefficients:
+ """
+ Loops through SFRD integrals and accounts for LyA coupling and Xray heating to obtain the average T21 and the coefficients for its power spectrum
+
+ Parameters
+ ----------
+ UserParams : object
+ User-defined parameters
+ CosmoParams : object
+ Cosmological parameters
+ AstroParams : object
+ Astrophysical parameters
+ HMFinterp : object
+ Halo mass function interpolator
+
+ Attributes
+ ----------
+ z_Init : object
+ Redshift tables for the calculation (see sfrd.py for details)
+ SFRD_Init : object
+ Initial star formation rate density for the calculation (see sfrd.py for details)
+ USE_POPIII : bool
+ Whether to include Pop III stars in the calculation or not, determined by AstroParams
+ relvel : object or None
+ Relative velocity between baryons and dark matter, which affects the SFRD and therefore the LyA and X-ray fluxes. Only computed if USE_POPIII is True
+ LyA : object
+ Lyman-alpha anisotropies, which depend on the SFRD and the redshift tables; see LyAlpha_class for details
+ Xrays : object
+ X-ray anisotropies, which depend on the SFRD and the redshift tables; see Xrays_class for details
+ ReioGlobal : object
+ Global reionization history, which depends on the SFRD and the redshift tables; see reionization.py for details
+ xHI_avg : array
+ Average neutral hydrogen fraction volume-weighted, computed from the global reionization history
+ T21avg : array
+ Average 21cm brightness temperature
+ tau_reio_val : float
+ Optical depth to reionization, computed from the global reionization history and the average neutral hydrogen fraction
+ __ getattr__ : method
+ This method allows us to access the attributes of the classes that we initialized directly from the get_T21_coefficients class, without having to specify which class they come from
+ evolve_T21_fields : method
+ Compute evolution of the LyA flux, LyA coupling coefficient, color temperature and spin temperature
+ Jalpha_avg : array
+ Average LyA flux at all redshifts and radii
+ _coeff_Ja_xa_0 : array
+ Normalization of the LyA flux at all redshifts
+ coeff_Ja_xa : array
+ LyA flux corrected with Hirata2006 prescription
+ xa_avg : array
+ LyA coupling coefficient
+ TCMB : array
+ CMB temperature at all redshifts
+ invTcol_avg : array
+ Inverse of the color temperature (equal 1/Tk)
+ _invTs_avg : array
+ Inverse of the spin temperature
+ tau_reio : method
+ Compute the optical depth to reionization
+ Salpha_exp : method
+ Hirata2006 correction to the LyA flux (Eq 55 in astro-ph/0608032)
+ """
+
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, z_Init =None, SFRD_Init=None):
+
+ # if z_Init and SFRD_Init are not provided, we initialize them here. This allows us to avoid redundant computations if they were already initialized in the parent class and passed as arguments.
+ if z_Init is None:
+ # to perform cross-correlation studies, the redshift array has to be the same as in zeus21
+ self.z_Init = Z_init(UserParams=UserParams, CosmoParams=CosmoParams)
+ else:
+ self.z_Init = z_Init
+
+ if SFRD_Init is None:
+ self.SFRD_Init = SFRD_class(UserParams, CosmoParams, AstroParams, HMFinterp, self.z_Init)
+ else:
+ self.SFRD_Init = SFRD_Init
+
+ # Computing lambdas in velocity anisotropies
+ # The SFRD vcb dependence is delta independent, therefore we compute quantities below for a variety of R's and delta_R = 0
+ self.USE_POPIII = AstroParams.USE_POPIII
+ if self.USE_POPIII:
+ self.relvel = PopIII_relvel(UserParams, CosmoParams, AstroParams, HMFinterp, self.z_Init, self.SFRD_Init)
+ else:
+ self.relvel = None
+
+ # Lyman-Alpha Anisotropies
+ self.LyA = LyAlpha_class(UserParams, CosmoParams, AstroParams, HMFinterp, self.z_Init, self.SFRD_Init)
+
+ ### X-ray Anisotropies
+ self.Xrays = Xrays_class(UserParams, CosmoParams, AstroParams, HMFinterp, self.z_Init, self.SFRD_Init)
+
+ # Computing free-electron fraction and Salpha correction factors in the Bulk IGM
+ self.evolve_T21_fields(UserParams, CosmoParams)
+
+ # Reionization
+ self.ReioGlobal = reionization_global(CosmoParams, AstroParams, HMFinterp, self.z_Init, self.SFRD_Init, PRINT_SUCCESS=False)
+ self.xHI_avg = 1. - self.ReioGlobal.ion_frac ### TODO this one is volume weighted for now
+
+ # Compute the 21cm Global Signal
+ self.T21avg = cosmology.T021(CosmoParams,self.z_Init.zintegral) * self.xa_avg/(1.0 + self.xa_avg) * (1.0 - self.T_CMB * self.invTcol_avg) * self.xHI_avg #TODO
+
+ self.tau_reio_val = self.tau_reio(CosmoParams, self.z_Init.zintegral, self.xHI_avg)
+
+
+ def __getattr__(self, name):
+ """
+ Access the attributes of the classes that we initialized directly from the get_T21_coefficients class, without having to specify which class they come from
+
+ Parameters
+ ----
+ name: str
+ Name of the attribute to get
+
+ Returns
+ -------
+ attribute
+ The attribute with the given name, if it exists in any of the classes that we initialized. If it does not exist in any of them, raises an AttributeError.
+ """
+
+ list_of_cls = [self.z_Init, self.SFRD_Init, self.LyA, self.Xrays, self.ReioGlobal]
+
+ if self.USE_POPIII:
+ list_of_cls += [self.relvel]
+ for cls in list_of_cls:
+ try:
+ return getattr(cls, name)
+ except AttributeError:
+ pass
+
+ raise AttributeError(f"{type(self).__name__} has no attribute {name!r}")
+
+
+ def evolve_T21_fields(self, UserParams, CosmoParams):
+ """
+ Compute evolution of the LyA flux, LyA coupling coefficient, color temperature and spin temperature
+
+ Parameters
+ ----------
+ UserParams : object
+ User-defined parameters
+ CosmoParams : object
+ Cosmological parameters
+
+ Returns
+ -------
+ None
+ """
+
+ # LyA stuff to find components of Salpha correction factor
+ self.Jalpha_avg = self.LyA.coeff1LyAzp*np.sum(self.LyA.coeff2LyAzpRR_II + self.LyA.coeff2LyAzpRR_III,axis=1) #units of 1/(cm^2 s Hz sr)
+
+ # CMB temperature
+ self.T_CMB = cosmology.Tcmb(CosmoParams.ClassCosmo, self.z_Init.zintegral)
+
+ _tau_GP = 3./2. * cosmology.n_H(CosmoParams,self.z_Init.zintegral) * constants.Mpctocm / cosmology.HubinvMpc(CosmoParams,self.z_Init.zintegral) * (constants.wavelengthLyA/1e7)**3 * constants.widthLyAcm * (1.0 - self.Xrays.xe_avg) #~3e5 at z=6
+
+ if CosmoParams.Flag_emulate_21cmfast:
+ # 21cmFAST multiplies by N0 (all baryons) instead of NH0
+ _tau_GP/=CosmoParams.f_H
+
+ # compute correction coefficients from Hirata2006
+ _xiHirata = pow(_tau_GP*1e-7,1/3.)*pow(self.Xrays.Tk_avg,-2./3)
+ _factorxi = (1.0 + constants.a_Hirata*_xiHirata + constants.b_Hirata * _xiHirata**2 + constants.c_Hirata * _xiHirata**3)
+
+
+ #prefactor without the Salpha correction from Hirata2006
+ if CosmoParams.Flag_emulate_21cmfast:
+ # 21cmFAST uses a fixed (and slightly ~10% off) value.
+ self._coeff_Ja_xa_0 = 1.66e11/(1+self.z_Init.zintegral)
+ else:
+ self._coeff_Ja_xa_0 = 8.0*np.pi*(constants.wavelengthLyA/1e7)**2 * constants.widthLyA * constants.Tstar_21/(9.0*constants.A10_21*self.T_CMB) #units of (cm^2 s Hz sr), convert from Ja to xa. should give 1.81e11/(1+z_Init.zintegral) for Tcmb_0=2.725 K
+
+ self.coeff_Ja_xa = self._coeff_Ja_xa_0 * self.Salpha_exp(self.z_Init.zintegral, self.Xrays.Tk_avg, self.Xrays.xe_avg)
+
+ # LyA flux, see Eq. 27 in 2302.08506
+ self.xa_avg = self.coeff_Ja_xa * self.Jalpha_avg
+
+ # color temperature
+ self.invTcol_avg = 1.0 / self.Xrays.Tk_avg
+
+ # spin temperature
+ self._invTs_avg = (1.0/self.T_CMB+self.xa_avg*self.invTcol_avg)/(1+self.xa_avg)
+
+ if UserParams.FLAG_WF_ITERATIVE:
+ # iteration routine to find Tcolor and Ts
+ _invTs_tryfirst = 1.0/self.T_CMB
+
+ while(np.sum(np.fabs(_invTs_tryfirst/self._invTs_avg - 1.0))>0.01): #no more than 1% error total
+ _invTs_tryfirst = self._invTs_avg
+
+ #update xalpha
+ _Salphatilde = (1.0 - 0.0632/self.Xrays.Tk_avg + 0.116/self.Xrays.Tk_avg**2 - 0.401/self.Xrays.Tk_avg*self._invTs_avg + 0.336*self._invTs_avg/self.Xrays.Tk_avg**2)/_factorxi
+ self.coeff_Ja_xa = self._coeff_Ja_xa_0 * _Salphatilde
+ self.xa_avg = self.coeff_Ja_xa * self.Jalpha_avg
+
+ #and Tcolor^-1
+ self.invTcol_avg = 1.0/self.Xrays.Tk_avg + constants.gcolorfactorHirata * 1.0/self.Xrays.Tk_avg * (_invTs_tryfirst - 1.0/self.Xrays.Tk_avg)
+
+ # finally Ts^-1
+ self._invTs_avg = (1.0/self.T_CMB+self.xa_avg * self.invTcol_avg)/(1+self.xa_avg)
+
+
+ def tau_reio(self, CosmoParams, zlist, xHI):
+ """
+ Compute the optical depth to reionization
+
+ Parameters
+ ----------
+ CosmoParams : object
+ Cosmological parameters
+ zlist : list
+ Redshifts
+ xHI : array
+ Neutral fraction as function of redshift
+
+ Returns
+ -------
+ tau_reio : list
+ """
+
+ # set EoR end
+ _lowestz = np.min(zlist)
+ _zlistlowz = np.linspace(0,_lowestz,100)
+
+ _nelistlowz = cosmology.n_H(CosmoParams,_zlistlowz)*(1 + CosmoParams.x_He + CosmoParams.x_He * np.heaviside(constants.zHeIIreio - _zlistlowz,0.5)) # free electrons in post-EoR, assume HeII at z=4, can be varied with zHeIIreio
+
+ _distlistlowz = 1.0/cosmology.HubinvMpc(CosmoParams,_zlistlowz)/(1+_zlistlowz) # comoving distances
+
+ # integrate z < zmin (post-reio), assuming xHI=0
+ _lowzint = constants.sigmaT * np.trapezoid(_nelistlowz*_distlistlowz,_zlistlowz) * constants.Mpctocm
+
+ xHIint = np.fmin(np.fmax(xHI,0.0),1.0) # cap neutral fraction, at min 0%, at max 100%
+ _zlisthiz = zlist
+ _nelistlhiz = cosmology.n_H(CosmoParams,_zlisthiz) * (1 + CosmoParams.x_He) * (1.0 - xHIint) # free electrons in EoR
+ _distlisthiz = 1.0/cosmology.HubinvMpc(CosmoParams,_zlisthiz)/(1+_zlisthiz) # comoving distances
+
+ # integrate z > zmin
+ _hizint = constants.sigmaT * np.trapezoid(_nelistlhiz*_distlisthiz,_zlisthiz) * constants.Mpctocm
+
+ tau_reio = (_lowzint + _hizint)
+
+ return tau_reio
+
+
+ def Salpha_exp(self, z, T, xe):
+ """
+ Hirata2006 correction to the LyA flux (Eq 55 in astro-ph/0608032). This function is used to initialize the xalpha computation, but then overwritten. Only used if FLAG_WF_ITERATIVE == False
+
+ Parameters
+ ----------
+ z : float
+ Redshifts
+ T : float
+ Temperature in K
+ xe : float
+ Free electron fraction with small reionization (xe << 1)
+
+ Returns
+ -------
+ Salpha : float
+ Correction to the LyA flux
+ """
+
+ tau_GP_noreio = 3e5*pow((1+z)/7,3./2.)*(1-xe)
+ gamma_Sobolev = 1.0/tau_GP_noreio
+
+ Salpha = np.exp( - 0.803 * pow(T,-2./3.) * pow(1e-6/gamma_Sobolev,-1.0/3.0))
+
+ return Salpha
diff --git a/zeus21/UVLFs.py b/zeus21/UVLFs.py
deleted file mode 100644
index 7fd1d22..0000000
--- a/zeus21/UVLFs.py
+++ /dev/null
@@ -1,159 +0,0 @@
-"""
-
-Compute UVLFs given our SFR and HMF models.
-
-Author: Julian B. Muñoz
-UT Austin - June 2023
-
-Edited by Hector Afonso G. Cruz
-JHU - July 2024
-
-Bug fix by Emily Bregou
-UT Austin - June 2025
-"""
-
-from . import cosmology
-from . import constants
-from .sfrd import SFR_II, SFR_III
-from .cosmology import bias_Tinker
-
-import numpy as np
-from scipy.special import erf
-from scipy.interpolate import interp1d
-
-
-
-
-
-
-def MUV_of_SFR(SFRtab, kappaUV):
- 'returns MUV, uses SFR. Dust added later in loglike.'
- #convert SFR to MUVs
- LUVtab = SFRtab/kappaUV
- MUVtab = 51.63 - 2.5 * np.log10(LUVtab) #AB magnitude
- return MUVtab
-
-
-#and combine to get UVLF:
-def UVLF_binned(Astro_Parameters,Cosmo_Parameters,HMF_interpolator, zcenter, zwidth, MUVcenters, MUVwidths, DUST_FLAG=True, RETURNBIAS = False):
- 'Binned UVLF in units of 1/Mpc^3/mag, for bins at with a Gaussian width zwidth, centered at MUV centers with tophat width MUVwidths. z width only in HMF since that varies the most rapidly. If flag RETURNBIAS set to true it returns number-avgd bias instead of UVLF, still have to divide by UVLF'
-
- if(constants.NZ_TOINT>1):
- DZ_TOINT = np.linspace(-np.sqrt(constants.NZ_TOINT/3.),np.sqrt(constants.NZ_TOINT/3.),constants.NZ_TOINT) #in sigmas around zcenter
- else:
- DZ_TOINT = np.array([0.0])
- WEIGHTS_TOINT = np.exp(-DZ_TOINT**2/2.)/np.sum(np.exp(-DZ_TOINT**2/2.)) #assumed Gaussian in z, fair
-
-
-
-
- SFRlist = SFR_II(Astro_Parameters,Cosmo_Parameters,HMF_interpolator, HMF_interpolator.Mhtab, zcenter, zcenter)
- sigmaUV = Astro_Parameters.sigmaUV
-
- if (constants.FLAG_RENORMALIZE_LUV == True): #lower the LUV (or SFR) to recover the true avg, not log-avg
- SFRlist/= np.exp((np.log(10)/2.5*sigmaUV)**2/2.0)
-
- MUVbarlist = MUV_of_SFR(SFRlist, Astro_Parameters._kappaUV) #avg for each Mh
- MUVbarlist = np.fmin(MUVbarlist,constants._MAGMAX)
-
-
- if(RETURNBIAS==True): # weight by bias
- biasM = np.array([bias_Tinker(Cosmo_Parameters, HMF_interpolator.sigma_int(HMF_interpolator.Mhtab,zcenter+dz*zwidth)) for dz in DZ_TOINT])
- else: # do not weight by bias
- biasM = np.ones_like(WEIGHTS_TOINT)
-
-
- HMFtab = np.array([HMF_interpolator.HMF_int(HMF_interpolator.Mhtab,zcenter+dz*zwidth) for dz in DZ_TOINT])
- HMFcurr = np.sum(WEIGHTS_TOINT * HMFtab.T * biasM.T,axis=1)
-
- #cannot directly 'dust' the theory since the properties of the IRX-beta relation are calibrated on observed MUV. Recursion instead:
- currMUV = MUVbarlist
- if(DUST_FLAG==True):
- currMUV2 = np.ones_like(currMUV)
- while(np.sum(np.abs((currMUV2-currMUV)/currMUV)) > 0.02):
- currMUV2 = currMUV
- currMUV = MUVbarlist + AUV(Astro_Parameters,zcenter,currMUV)
-
-
- MUVcuthi = MUVcenters + MUVwidths/2.
- MUVcutlo = MUVcenters - MUVwidths/2.
-
- xhi = np.subtract.outer(MUVcuthi, currMUV)/(np.sqrt(2) * sigmaUV)
- xlo = np.subtract.outer(MUVcutlo, currMUV )/(np.sqrt(2) * sigmaUV)
-
- if (Astro_Parameters.min_t_formation_Myr == None):
- min_MUV = -100.0 # essentially no cutoff, since the scatter is large at low masses and can cause numerical issues if we try to integrate over unphysically bright galaxies there. This is just a numerical cutoff, not a physical one, and the exact value doesn't matter much since the scatter is large there anyway.
- else:
- Mstarmax = HMF_interpolator.Mhtab * Cosmo_Parameters.OmegaB /Cosmo_Parameters.OmegaM #max stellar mass in each halo, if all baryons turned to stars
- _tmaxSFR = Astro_Parameters.min_t_formation_Myr * 1e6 #arbitrary timescale to determine max SFR in yrs
- SFRmax = Mstarmax / (_tmaxSFR)
- min_MUV = MUV_of_SFR(SFRmax, Astro_Parameters._kappaUV) #min MUV in each halo, if all baryons turned to stars at max SFR for 10 Myr. This is a very rough cutoff to avoid unphysically small MUVs (bright galaxies) at low masses, which can cause numerical issues since the scatter is large there. It's not a physical cutoff, just a numerical one. The exact value doesn't matter much since the scatter is large there anyway, but it prevents the code from trying to integrate over unphysically bright galaxies in low-mass halos.
- x_min = (min_MUV - currMUV)/(np.sqrt(2) * sigmaUV)
- xhi_cut = np.fmax(xhi, x_min)
- xlo_cut = np.fmax(xlo, x_min)
-
- weights_unnormalized = (erf(xhi_cut) - erf(xlo_cut)).T/(2.0 * MUVwidths)
- weights = weights_unnormalized/ (0.5*(1-erf(x_min)+1e-6))[:,None] # Renormalize distributions based on the portion cut off by min_MUV
-
- ### Standard as usual, no cuts:
- # weights = (erf(xhi) - erf(xlo)).T/(2.0 * MUVwidths) #comment to myself, this 2 in denominator is correct here, nothing to do with the MUVwidths/2 a few lines above
-
- UVLF_filtered = np.trapezoid(weights.T * HMFcurr, HMF_interpolator.Mhtab, axis=-1)
-
-
- if(Astro_Parameters.USE_POPIII==False):
- return UVLF_filtered
- else:
- _J21interptemp = interp1d(np.linspace(0,100,3), np.zeros(3), kind = 'linear', bounds_error = False, fill_value = 0,) #TODO: how to deal with J21, requires running get_21_coefficients
- SFRlist_III = SFR_III(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, HMF_interpolator.Mhtab, _J21interptemp, zcenter, zcenter, Cosmo_Parameters.vcb_avg)
-
- MUVbarlist_III = MUV_of_SFR(SFRlist_III, Astro_Parameters._kappaUV_III) #avg for each Mh
- MUVbarlist_III = np.fmin(MUVbarlist_III,constants._MAGMAX)
-
- #and the same for popIII, TODO: ignore dust for pop3 for now
- xhi = np.subtract.outer(MUVcuthi, MUVbarlist_III)/(np.sqrt(2) * sigmaUV)
- xlo = np.subtract.outer(MUVcutlo, MUVbarlist_III)/(np.sqrt(2) * sigmaUV)
- weights = (erf(xhi) - erf(xlo)).T/(2.0 * MUVwidths)
-
- UVLF_filtered_III = np.trapezoid(weights.T * HMFcurr, HMF_interpolator.Mhtab, axis=-1)
-
- return UVLF_filtered, UVLF_filtered_III
-
-
-
-
-
-#####Here the dust attenuation
-def AUV(Astro_Parameters, z, MUV, HIGH_Z_DUST = True, _zmaxdata=8.0):
- 'Average attenuation A as a function of OBSERVED z and magnitude. If using on theory iterate until convergence. HIGH_Z_DUST is whether to do dust at higher z than 0 or set to 0. Fix at \beta(z=8) result if so'
-
- betacurr = beta(z,MUV)
-
- C0, C1 = Astro_Parameters.C0dust, Astro_Parameters.C1dust
-
- sigmabeta = 0.34 #from Bouwens 2014
-
- Auv = C0 + 0.2*np.log(10)*sigmabeta**2 * C1**2 + C1 * betacurr
- Auv=Auv.T
- if not (HIGH_Z_DUST):
- Auv*=np.heaviside(_zmaxdata - z,0.5)
- Auv=Auv.T
- return np.fmax(Auv, 0.0)
-
-def beta(z, MUV):
- 'Color as a function of redshift and mag, interpolated from Bouwens 2013-14 data.'
-
- zdatbeta = [2.5,3.8,5.0,5.9,7.0,8.0]
- betaMUVatM0 = [-1.7,-1.85,-1.91,-2.00,-2.05,-2.13]
- dbeta_dMUV = [-0.20,-0.11,-0.14,-0.20,-0.20,-0.15]
-
- _MUV0 = -19.5
- _c = -2.33
-
- betaM0 = np.interp(z, zdatbeta, betaMUVatM0, left=betaMUVatM0[0], right=betaMUVatM0[-1])
- dbetaM0 = (MUV - _MUV0).T * np.interp(z, zdatbeta, dbeta_dMUV, left=dbeta_dMUV[0], right=dbeta_dMUV[-1])
-
- sol1 = (betaM0-_c) * np.exp(dbetaM0/(betaM0-_c))+_c #for MUV > MUV0
- sol2 = dbetaM0 + betaM0 #for MUV < MUV0
-
- return sol1.T * np.heaviside(MUV - _MUV0, 0.5) + sol2.T * np.heaviside(_MUV0 - MUV, 0.5)
diff --git a/zeus21/__init__.py b/zeus21/__init__.py
index 656a475..827b2fd 100644
--- a/zeus21/__init__.py
+++ b/zeus21/__init__.py
@@ -1,11 +1,16 @@
-from .inputs import User_Parameters, Cosmo_Parameters_Input, Cosmo_Parameters, Astro_Parameters
+from .bursty_sfh import *
from .constants import *
-from .cosmology import *
from .correlations import *
-from .sfrd import get_T21_coefficients
-from .xrays import Xray_class
-from .UVLFs import UVLF_binned
-from .maps import CoevalMaps
+from .cosmology import *
+from .inputs import *
+from .LFs import *
+from .maps import *
+from .reionization import *
+from .SED import *
+from .sfrd import *
+from .T21coefficients import *
+from .wrappers import *
+from .z21_utilities import *
import warnings
warnings.filterwarnings("ignore", category=UserWarning) #to silence unnecessary warning in mcfit
diff --git a/zeus21/bursty_sfh.py b/zeus21/bursty_sfh.py
new file mode 100644
index 0000000..dabeaaa
--- /dev/null
+++ b/zeus21/bursty_sfh.py
@@ -0,0 +1,465 @@
+"""
+Compute Star Formation Histories with Burstiness.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
+
+from .sfrd import *
+
+class SFH_class:
+ """
+ Star formation histories (SFHs) with stochastic burstiness for Pop II galaxies.
+
+ Computes the SFR(t) of a galaxy in a halo of mass Mh, including a
+ power-spectral-density (PSD) model for log-normal SFR fluctuations
+ (damped random walk in ln SFR). See 2601.07912 for the burstiness model.
+
+ Only Pop II is currently supported; Pop III raises a ValueError.
+
+ Parameters
+ ----------
+ UserParams : User_Parameters
+ Global run settings.
+ CosmoParams : Cosmo_Parameters
+ Cosmological parameters, including tageofzMyr and zfoftageMyr.
+ AstroParams : Astro_Parameters
+ Astrophysical parameters. Key attributes used here:
+
+ - USE_POPIII : bool — if True, raises ValueError (not implemented).
+ - FLAG_COMPARE_BAGPIPES : bool — use a toy exponential SFH for
+ comparison with BAGPIPES fits instead of the full model.
+ - FLAG_RENORMALIZE_AVG_SFH : bool — if True, boosts mean SFR by
+ exp(σ²/2) to account for log-normal stochasticity ().
+ - sigmaPSD, dsigmaPSDdlog10Mh : PSD amplitude and its mass slope.
+ - tauPSD, dlog10tauPSDdlog10Mh : PSD timescale (Myr) and mass slope.
+ - _minsigmaPSD, _maxsigmaPSD, _mintauPSD, _maxtauPSD : clamp limits.
+ - _omegamin, _omegamax : frequency integration range (1/Myr).
+ - _dt_FFT, _N_FFT : time resolution (Myr) and number of points for FFT.
+ - epsstar, dlog10epsstardz, _zpivot, Mc, alphastar, betastar,
+ fstarmax, mean_SFR_normalization : star-formation efficiency params.
+
+ HMFinterp : HMF_interpolator
+ Halo mass function interpolator; must expose Mhtab.
+ tage : float or array-like
+ Lookback time(s) in Myr at which to evaluate the SFH.
+ zobs : float
+ Observed redshift.
+ z_Init : float, optional
+ Initialisation redshift for the SFRD. Computed via Z_init if not given.
+ SFRD_Init : SFRD_class, optional
+ Pre-computed SFRD object. Constructed internally if not given.
+
+ Attributes
+ ----------
+ SFH_II : ndarray, shape (NMh, Ntage)
+ Pop II star formation rate in M☉ yr⁻¹ as a function of halo mass
+ and lookback time.
+ """
+
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, tage, zobs, z_Init = None, SFRD_Init = None):
+ "Returns the star formation history at age tage [in Myr] of a galaxy in a halo of mass Mh at age tage, in Msun/yr"
+
+ if z_Init is None:
+ z_Init = Z_init(UserParams=UserParams, CosmoParams=CosmoParams)
+
+ if SFRD_Init is None:
+ SFRD_Init = SFRD_class(UserParams, CosmoParams, AstroParams, HMFinterp, z_Init)
+
+ self.SFH_II = self.SFH(CosmoParams, AstroParams, HMFinterp, SFRD_Init, tage, zobs, pop = 2)
+
+ if AstroParams.USE_POPIII:
+ raise ValueError('Burstiness is not implemented for PopIII')
+
+
+ def SFH(self, CosmoParams, AstroParams, HMFinterp, SFRD_Init, tage, zobs, pop):
+ """
+ Compute the star formation history at a set of lookback times.
+
+ Reconstructs halo mass history assuming exponential accretion, then
+ multiplies the mass accretion rate by the stellar efficiency fstar(z, Mh).
+ Optionally renormalises the mean SFR to account for log-normal scatter
+ (see FLAG_RENORMALIZE_AVG_SFH).
+
+ Parameters
+ ----------
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ HMFinterp : HMF_interpolator
+ SFRD_Init : SFRD_class
+ tage : float or array-like
+ Lookback times in Myr relative to zobs.
+ zobs : float
+ Observed redshift.
+ pop : {2}
+ Stellar population. Only Pop II (2) is implemented.
+
+ Returns
+ -------
+ ndarray, shape (NMh, Ntage)
+ SFR in M☉ yr⁻¹ at each (halo mass, lookback time).
+ """
+
+ tobs = CosmoParams.tageofzMyr(zobs)
+
+ _tearlier = np.fmax(0.0,tobs-tage) #time before the observation
+ zage = CosmoParams.zfoftageMyr(_tearlier) #z of the earlier times
+ massVector = HMFinterp.Mhtab #has to be the same due to the meanSFRnormalization below
+
+ ###ASDASD TYTY - TODO this is just for comparing w bagpipes one run
+ if(AstroParams.FLAG_COMPARE_BAGPIPES == True):
+ texp=-120 #Myr, minus because backwards
+ Mstar = 3e7*(massVector/7e9)**1.5 #made up but fits the usual power-law
+ Lbox = 1000 #Myr, age of universe (so it integrates to Mstar)
+ return np.outer(Mstar/(texp*1e6) * np.exp(-SFRD_Init.Matom(zobs)/massVector) * AstroParams.mean_SFR_normalization , (np.exp(tage/texp) / (np.exp((Lbox)/texp) -1)) ) #in Msun/yr
+
+ ### This is a decent approximation,but only for exponential accretion
+ alphatime_invMyr = constants.ALPHA_accretion_exponential * cosmology.Hubinvyr(CosmoParams, zage) * (1+zage) * 1e6
+ Mhhistory = np.outer(massVector, np.exp(-alphatime_invMyr * tage))
+
+ # Get the mass accretion rate at all the past redshifts z
+ dMhdot = SFRD_Init.dMh_dt(CosmoParams, AstroParams, HMFinterp, Mhhistory, zage) #in Msun/yr
+
+ fstar = self.fstarofz_scaled_Mz(AstroParams, CosmoParams, SFRD_Init, zage, Mhhistory, pop)
+
+ if(AstroParams.FLAG_RENORMALIZE_AVG_SFH==True):
+ _meanSFRnormalization = self._get_mean_SFR_normalization(AstroParams, HMFinterp.Mhtab) #normalization of the SFR, in Msun/yr, at each Mh
+ else:
+ _meanSFRnormalization = 1.0 #no normalization, just return the SFR
+
+ SFH_val = fstar * dMhdot * _meanSFRnormalization[:, None] #in Msun/yr
+
+ return SFH_val
+
+
+ def fstarofz_scaled_Mz(self, AstroParams, CosmoParams, SFRD_Init, z, Mhlist, pop):
+ """
+ Factorized approximation to fstar(z, Mh) over a 2-D (Mh, z) grid.
+
+ Computes fstar(Mh, z) ≈ fstar(Mh, z0) · (Mh / Mh0)^α, separating the
+ mass and redshift dependences. This avoids evaluating fstar_ofz on the
+ full NMh × Nz array; it is exact for Mh < Mc and any residual offset
+ is absorbed into β*.
+
+ Only valid under exponential accretion. Use with care if the accretion
+ history deviates strongly from exponential.
+
+ Parameters
+ ----------
+ AstroParams : Astro_Parameters
+ CosmoParams : Cosmo_Parameters
+ SFRD_Init : SFRD_class
+ z : array-like, shape (Nz,)
+ Redshift array (z[0] is used as the reference epoch).
+ Mhlist : ndarray, shape (NMh, Nz)
+ Halo mass grid at each redshift step.
+ pop : {2}
+ Stellar population.
+
+ Returns
+ -------
+ ndarray, shape (NMh, Nz)
+ Approximate fstar values over the full (Mh, z) grid.
+ """
+
+ if pop == 2:
+ eps = AstroParams.epsstar
+ dlog10eps = AstroParams.dlog10epsstardz
+ zpiv = AstroParams._zpivot
+ Mc = AstroParams.Mc
+ alphastar = AstroParams.alphastar
+ betastar = AstroParams.betastar
+ fstarmax = AstroParams.fstarmax
+
+ fofMh = SFRD_Init.fstar_ofz(CosmoParams, z[0], Mhlist[:,0], eps, dlog10eps, zpiv, Mc, alphastar, betastar, fstarmax)
+ fofz = np.pow(Mhlist[0]/Mhlist[0,0],AstroParams.alphastar)
+
+ return np.outer(fofMh,fofz) #this is a very good approximation for the fstarofz function, but only for exponential accretion
+
+
+ def sigmaPSD_at_Mh(self, AstroParams, Mh):
+ """
+ PSD amplitude σ(Mh) for the ln SFR damped random walk.
+
+ Linear in log10(Mh), clamped to [_minsigmaPSD, _maxsigmaPSD].
+ To convert to log10(SFR) units, multiply by log(10).
+
+ Parameters
+ ----------
+ AstroParams : Astro_Parameters
+ Mh : float or array-like
+ Halo mass(es) in M☉.
+
+ Returns
+ -------
+ ndarray
+ σ in units of ln SFR, same shape as Mh.
+ """
+
+ "Returns the sigma of the power spectrum of lnSFR at Mh, in units of ln(SFR), so to convert to log10(SFR) multiply by np.log(10)"
+ Mh = np.atleast_1d(Mh)
+ sigma_at_Mh = AstroParams.sigmaPSD + AstroParams.dsigmaPSDdlog10Mh * np.log10(Mh/1e10)
+
+ return np.fmin(np.fmax(sigma_at_Mh,AstroParams._minsigmaPSD),AstroParams._maxsigmaPSD) #make sure it's within the limits set by UserParams
+
+ def tauPSD_at_Mh(self, AstroParams, Mh):
+ """
+ PSD correlation timescale τ(Mh) for the ln SFR damped random walk.
+
+ Power-law in Mh, clamped to [_mintauPSD, _maxtauPSD].
+
+ Parameters
+ ----------
+ AstroParams : Astro_Parameters
+ Mh : float or array-like
+ Halo mass(es) in M☉.
+
+ Returns
+ -------
+ ndarray
+ τ in Myr, same shape as Mh.
+ """
+
+ "Returns the tau of the power spectrum of lnSFR at Mh, in Myr"
+ Mh = np.atleast_1d(Mh)
+ tau_at_Mh = AstroParams.tauPSD * 10**(AstroParams.dlog10tauPSDdlog10Mh * np.log10(Mh/1e10))
+
+ return np.fmin(np.fmax(tau_at_Mh,AstroParams._mintauPSD),
+ AstroParams._maxtauPSD) #make sure it's within the limits set by UserParams
+
+
+ def PowerlnSFR(self, AstroParams, omega, Mh):
+ """
+ Power spectrum of ln SFR under a damped (α=2) random walk model.
+
+ P(ω, Mh) = σ²(Mh) · τ(Mh) / [1 + (ω τ)²]
+
+ As in 2601.07912. Note that compared to other refs (eg 2410.21409)
+ we do not have an implicit factor of 1 Myr in the
+ amplitude; σ here is in ln SFR units; can convert by sigma->sigma*np.log(10)
+ Index for random walk us alpha = 2 by default, can be enhanced to modify.
+
+ Parameters
+ ----------
+ AstroParams : Astro_Parameters
+ omega : float or array-like, shape (Nω,)
+ Angular frequency in Myr⁻¹.
+ Mh : float or array-like, shape (NMh,)
+ Halo mass(es) in M☉.
+
+ Returns
+ -------
+ ndarray, shape (NMh, Nω)
+ Power spectrum in (ln SFR)² Myr.
+ """
+
+ omega = np.atleast_1d(omega) #make sure omega is a vector
+ Mh = np.atleast_1d(Mh) #make sure Mh is a vector
+ sigma_at_Mh = self.sigmaPSD_at_Mh(AstroParams, Mh)
+ tau_at_Mh = self.tauPSD_at_Mh(AstroParams, Mh)
+ _tau_times_omega = np.outer(omega,tau_at_Mh) #omega is a vector length of omega, tau has the Mh length
+ return (sigma_at_Mh**2 * tau_at_Mh / (1.0 + _tau_times_omega**2.0)).T # NM x Nomega; secretely there's a 1*Myr in the amplitude
+
+ def Wink_TH(self,omega, T):
+ """
+ Top-hat temporal window function in Fourier space.
+
+ W(ω, T) = sinc(ωT/2) = sin(ωT/2) / (ωT/2)
+
+ Used to compute the variance of ln SFR averaged over a timescale T.
+ A small offset (1e-16) is added to the argument to avoid 0/0 at ω=0.
+
+ Parameters
+ ----------
+ omega : array-like
+ Angular frequency in Myr⁻¹.
+ T : float
+ Averaging timescale in Myr.
+
+ Returns
+ -------
+ ndarray
+ Dimensionless window, same shape as omega. Equals 1 at ω→0.
+ """
+
+ x = omega*T/2 + 1e-16
+ return np.sin(x) / (x)
+
+ def Variance_of_lnSFR(self, AstroParams, T, Mh):
+ """
+ Variance of ln SFR averaged over a timescale T.
+
+ Var[ln SFR]_T = (2/2π) ∫ P(ω) |W(ω,T)|² dω
+
+ The factor 2/(2π) converts the one-sided integral over positive ω to
+ the full two-sided variance.
+
+ Parameters
+ ----------
+ AstroParams : Astro_Parameters
+ T : float
+ Averaging timescale in Myr. Use T=0 for the unsmoothed variance
+ (integrates over all frequencies).
+ Mh : float or array-like
+ Halo mass(es) in M☉.
+
+ Returns
+ -------
+ ndarray
+ Variance in (ln SFR)², same shape as Mh.
+ """
+
+ omegalist = np.logspace(np.log10(AstroParams._omegamin),np.log10(AstroParams._omegamax), 999) # in 1/Myr
+ power = self.PowerlnSFR(AstroParams, omegalist, Mh)
+ wink = self.Wink_TH(omegalist, T)
+
+ return np.trapezoid(power * np.abs(wink)**2, omegalist) *2/(2*np.pi)
+
+ def _get_mean_SFR_normalization(self, AstroParams, Mh):
+ """
+ Log-normal boost to the mean SFR from stochastic burstiness.
+
+ For a Gaussian variable δ = ln SFR with variance σ²,
+ ⟨SFR⟩ = SFR_smooth · exp(σ²/2).
+
+ i.e. the ratio of mean to SFR(Mh) with no burstiness (ie median)
+
+ Parameters
+ ----------
+ AstroParams : Astro_Parameters
+ Mh : array-like
+ Halo mass(es) in M☉.
+
+ Returns
+ -------
+ ndarray
+ Multiplicative boost factor exp(σ²/2), same shape as Mh.
+ """
+
+ _varlnSFR = self.Variance_of_lnSFR(AstroParams, 0.,Mh) #T=0 since it's at integrated over all timescales
+ meanSFRnormalization = np.exp(_varlnSFR/2.) # = for a gaussian d
+ return meanSFRnormalization
+
+
+ def _get_PowerSFR_NL_FFT_vectorized(self, AstroParams, Mh_array):
+ """
+ Non-linear power spectrum of SFR via FFT of the ln SFR correlation function.
+
+ Because SFR = exp(ln SFR) is a non-linear transformation, its power
+ spectrum differs from P_lnSFR. This method computes it by:
+
+ 1. Building the auto-correlation of ln SFR (damped random walk):
+ C(t) = σ² / 2 · exp(−|t| / τ)
+ 2. Exponentiating to get the SFR correlation:
+ C_SFR(t) = exp(C(t)) − 1
+ 3. FFT → one-sided power spectrum of SFR fluctuations.
+
+ All NMh masses are processed simultaneously via broadcasting.
+
+ Parameters
+ ----------
+ AstroParams : Astro_Parameters
+ Must expose: _dt_FFT, _N_FFT.
+ Mh_array : float or array-like, shape (NMh,)
+ Halo mass(es) in M☉.
+
+ Returns
+ -------
+ omegalist : ndarray, shape (Nfft//2 + 1,)
+ Angular frequencies in Myr⁻¹.
+ powerNL : ndarray, shape (NMh, Nfft//2 + 1)
+ Non-linear SFR power spectrum in (M☉ yr⁻¹)² Myr.
+ """
+
+ Mh_array = np.atleast_1d(Mh_array) # Ensure Mh_array is a numpy array
+ # dt is the time resolution for FFT, Nfft is the number of points in FFT
+ dt = AstroParams._dt_FFT
+ Nfft = AstroParams._N_FFT
+ half_Nfft = Nfft // 2
+ t_corr = dt * np.arange(-half_Nfft, Nfft - half_Nfft)
+
+ # Vectorize the parameter calculations
+ sigma_array = self.sigmaPSD_at_Mh(AstroParams, Mh_array) # Shape: (NMhs,)
+ tau_array = self.tauPSD_at_Mh(AstroParams, Mh_array) # Shape: (NMhs,)
+
+ # Broadcast for correlation function calculation
+ t_corr_2d = t_corr[np.newaxis, :] # Shape: (1, Nfft)
+ tau_2d = tau_array[:, np.newaxis] # Shape: (NMhs, 1)
+ sigma_2d = sigma_array[:, np.newaxis] # Shape: (NMhs, 1)
+
+ # Vectorized correlation function
+ corrF = np.exp(-np.abs(t_corr_2d)/tau_2d) * sigma_2d**2/(2.0)
+ corrFNL = np.exp(corrF) - 1.0 # Shape: (NMhs, Nfft)
+
+ # FFT along the time axis for all masses at once
+ powerNL = np.fft.rfft(corrFNL, axis=1) * dt # Shape: (NMhs, Nfft//2+1)
+
+ # Frequency axis (same for all masses)
+ omegalist = np.fft.rfftfreq(len(t_corr), d=dt) * 2 * np.pi
+
+ return omegalist, np.abs(powerNL)
+
+
+
+ def WindowFourier(self, CosmoParams, AstroParams, HMFinterp, SFRD_Init, GreensFunction, zobs, tage, pop):
+ """
+ Fourier transform of the convolution G(t) * SFH(t).
+
+ Computes W̃(ω, Mh) = FFT[ G(t) · SFH(t) ], where G is a Green's
+ function (e.g. Greens_function_LUV) and SFH(t) is the star formation
+ history. The result enters the luminosity power spectrum as
+ P_L(ω) = |W̃(ω)|² · P_SFR(ω).
+
+ Parameters
+ ----------
+ CosmoParams : Cosmo_Parameters
+ AstroParams : Astro_Parameters
+ Must expose: _dt_FFT, _N_FFT.
+ HMFinterp : HMF_interpolator
+ SFRD_Init : SFRD_class
+ GreensFunction : callable
+ A function with signature ``G(AstroParams, tage_Myr, Mhtab)``
+ returning an array of shape (NMh, Nt) in erg s⁻¹ M☉⁻¹.
+ Typically one of the Greens_function_L* functions from sed.py.
+ zobs : float
+ Observed redshift.
+ tage : float
+ Maximum lookback time in Myr (sets the FFT window).
+ pop : {2}
+ Stellar population.
+
+ Returns
+ -------
+ omegalist : ndarray, shape (Nfft//2 + 1,)
+ Angular frequencies in Myr⁻¹.
+ windowFourier : ndarray, shape (NMh, Nfft//2 + 1)
+ Complex Fourier transform of G·SFH in erg s⁻¹ M☉⁻¹ Myr.
+
+ Notes
+ -----
+ SFH is converted from M☉ yr⁻¹ to M☉ Myr⁻¹ (×10⁶) before the FFT
+ so that the output is in consistent Myr-based units.
+ """
+
+ dt = AstroParams._dt_FFT
+ Nfft = AstroParams._N_FFT
+ _tFFT = dt*np.arange(Nfft)
+
+ tobs = CosmoParams.tageofzMyr(zobs)
+ _tearlier = np.fmax(0.0,tobs-tage) #time before the observation
+ zage = CosmoParams.zfoftageMyr(_tearlier) #z of the earlier times
+
+ SFHarray = self.SFH(CosmoParams,AstroParams, HMFinterp, SFRD_Init, _tFFT, zobs, pop)
+
+ _integrand = GreensFunction(AstroParams, _tFFT, HMFinterp.Mhtab)*SFHarray*1e6 #convert SFR to 1/Myr for FFT
+ _windowFourier = np.fft.rfft(_integrand,axis=1)*dt #for correct normalization
+ omegalist = np.fft.rfftfreq(len(_tFFT), d=dt) * 2 * np.pi # Convert to angular frequency
+
+ return omegalist, _windowFourier
diff --git a/zeus21/constants.py b/zeus21/constants.py
index 37ef17d..9005136 100644
--- a/zeus21/constants.py
+++ b/zeus21/constants.py
@@ -1,13 +1,15 @@
"""
-
Keep here all global flags, numerical constants, and conversion factors/units.
-Author: Julian B. Muñoz
-UT Austin and Harvard CfA - January 2023
-
-Edited by Hector Afonso G. Cruz
-JHU - July 2024
-
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
"""
###############################
@@ -94,6 +96,17 @@
#UVLF related
-_MAGMAX = 10 #max abs magnitude to avoid infs
-FLAG_RENORMALIZE_LUV = False #whether to renormalize the lognormal LUV with sigmaUV to recover or otherwise . Recommend False.
+_MAGMAX_UV = 10. #max abs magnitude to avoid infs
+_MAGMIN_Ha = -50. #max abs magnitude to avoid infs
NZ_TOINT = 3 #how many zs around with z_rms we use to predict. Only in HMF since the rest do not vary much.
+
+zeropoint_ABmag_ergsHz = 51.63 # pivot value for specific luminosity (erg/s/Hz) to magnitude conversion -- constant flat in wavelength
+
+# SarahLibanore
+zmax_AstroBreak = 50. # max redshift above which we do not trust astro computation
+
+redshiftFactor_Visbal = 1.04 #max amount LW photons can redshift before being scattered, as in Visbal+1402.0882
+
+a_Hirata = 2.98394
+b_Hirata = 1.53583
+c_Hirata = 3.8528
\ No newline at end of file
diff --git a/zeus21/correlations.py b/zeus21/correlations.py
index c79d72c..7078a3f 100644
--- a/zeus21/correlations.py
+++ b/zeus21/correlations.py
@@ -1,194 +1,280 @@
"""
-
-Code to compute correlation functions from power spectra and functions of them. Holds two classes: Correlations (with matter correlation functions smoothed over different R), and Power_Spectra (which will compute and hold the 21-cm power spectrum and power for derived quantities like xa, Tk, etc.)
-
-Author: Julian B. Muñoz
-UT Austin and Harvard CfA - January 2023
-
-Edited by Hector Afonso G. Cruz
-JHU - July 2024
-
-Edited by Sarah Libanore
-BGU - July 2025
-
+Code to compute correlation functions from power spectra and functions of them.
+Holds two classes:
+ Correlations (with matter correlation functions smoothed over different R),
+ Power_Spectra (which will compute and hold the 21-cm power spectrum and power for derived quantities like xa, Tk, etc.).
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
"""
import numpy as np
from scipy.interpolate import UnivariateSpline
from scipy.interpolate import interp1d
+from scipy.interpolate import RegularGridInterpolator
import mcfit
from scipy.special import gammaincc #actually very fast, no need to approximate
import numexpr as ne
from . import constants
from . import cosmology
+from . import z21_utilities
-class Correlations:
- "Class that calculates and keeps the correlation functions."
-
- def __init__(self, UserParams, Cosmo_Parameters, ClassCosmo):
-
-
- #we choose the k to match exactly the log FFT of input Rtabsmoo.
-
- self._klistCF, _dummy_ = mcfit.xi2P(Cosmo_Parameters._Rtabsmoo, l=0, lowring=True)(0*Cosmo_Parameters._Rtabsmoo, extrap=False)
- self.NkCF = len(self._klistCF)
-
- self._PklinCF = np.zeros(self.NkCF) # P(k) in 1/Mpc^3
- for ik, kk in enumerate(self._klistCF):
- self._PklinCF[ik] = ClassCosmo.pk(kk, 0.0) # function .pk(k,z)
-
-
-
- self._xif = mcfit.P2xi(self._klistCF, l=0, lowring=True)
-
- self.WINDOWTYPE = 'TOPHAT'
- #options are 'TOPHAT', 'TOPHAT1D' and 'GAUSS' (for now). TOPHAT is calibrated for EPS, but GAUSS has less ringing
-
- self.xi_RR_CF = self.get_xi_R1R2_z0(Cosmo_Parameters)
- ClassCosmo.pars['xi_RR_CF'] = np.copy(self.xi_RR_CF) #store correlation function for gamma_III correction in SFRD
-
- ###HAC: Interpolated object for eta power spectrum
- if Cosmo_Parameters.USE_RELATIVE_VELOCITIES == True:
- P_eta_interp = interp1d(ClassCosmo.pars['k_eta'], ClassCosmo.pars['P_eta'], bounds_error = False, fill_value = 0)
- self._PkEtaCF = P_eta_interp(self._klistCF)
- self.xiEta_RR_CF = self.get_xiEta_R1R2(Cosmo_Parameters)
- else:
- self._PkEtaCF = np.zeros_like(self._PklinCF)
- self.xiEta_RR_CF = np.zeros_like(self.xi_RR_CF)
- def _WinTH(self,k,R):
- x = k * R
- return 3.0/x**2 * (np.sin(x)/x - np.cos(x))
-
- def _WinTH1D(self,k,R):
- x = k * R
- return np.sin(x)/x
-
- def _WinG(self,k,R):
- x = k * R * constants.RGauss_factor
- return np.exp(-x**2/2.0)
-
- def Window(self, k, R):
- if self.WINDOWTYPE == 'TOPHAT':
- return self._WinTH(k, R)
- elif self.WINDOWTYPE == 'GAUSS':
- return self._WinG(k, R)
- elif self.WINDOWTYPE == 'TOPHAT1D':
- return self._WinTH1D(k, R)
- else:
- print('ERROR in Window. Wrong type')
-
-
- def get_xi_z0_lin(self):
- "Get correlation function of density, linearly extrapolated to z=0"
- ##Warning: definitely check if beyond LCDM!
- #currenetly unused, just for refernce and plots
-
- rslinCF, xilinCF = self._xif(self._PklinCF, extrap=False)
-
- return rslinCF, xilinCF
-
- def get_xi_R1R2_z0 (self, Cosmo_Parameters):
- "same as get_xi_z0_lin but smoothed over two different radii with Window(k,R) \
- same separations rs as get_xi_z0_lin so it does not output them."
-
- ###HAC: Broadcasted to improve efficiency
- ###HAC: dim 0 is R1, dim 1 is R2, dim 2 is r, where R1 and R2 are smoothing radii and r is the argument of xi(r)
- lengthRarray = Cosmo_Parameters.NRs
- windowR1 = self.Window(self._klistCF.reshape(lengthRarray, 1, 1), Cosmo_Parameters._Rtabsmoo.reshape(1, 1, lengthRarray))
- windowR2 = self.Window(self._klistCF.reshape(1, lengthRarray,1), Cosmo_Parameters._Rtabsmoo.reshape(1, 1, lengthRarray))
-
- _PkRR = np.array([[self._PklinCF]]) * windowR1 * windowR2
-
- self.rlist_CF, xi_RR_CF = self._xif(_PkRR, extrap = False)
-
- return xi_RR_CF
-
- ###HAC: The next two are the same, but for
- def get_xiEta(self, Cosmo_Parameters, ClassCosmo):
- "Get correlation function of v^2 at z_drag (~1060 for LCDM parameters)"
- ##Warning: definitel check if beyond LCDM!
- #currently unused, just for reference and plots
+class Power_Spectra:
+
+ """
+ Get the 21-cm power spectrum and its components from correlation functions and coefficients
+
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ T21coeffs : T21coeffs class
+ RSD_MODE : int
+ Choice of redshift-space distortion mode.
+ 0 = None (mu=0), just for comparison with real-space
+ 1 = Spherical avg (like 21-cmFAST), standard assumption in sims
+ 2 = LoS only (mu=1), more observationally relevant
+ Default is 1
+
+ Attributes
+ ----------
+ Basic Setup Attributes
+
+ self.klist_PS: array
+ Input array of wavenumbers used in inputs.py
+ self.kwindow: array
+ Output array of wavenumbers used in window function calls.
+ Identical to klist_PS
+
+ Window Function Attributes
+ self.windowalpha_II: matrix
+ Linear Pop II LyA window functions. Dimension (z, k)
+ self.windowalpha_III
+ Linear Pop III LyA window functions. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+ self.windowxray_II
+ Linear Pop II Xray window functions. Dimension (z, k)
+ self.windowxray_III
+ Linear Pop III Xray window functions. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
- rsEtaCF, xiEtaCF = self._xif(self._PkEtaCF, extrap=False)
+ Baryon Power Spectra Attributes (Used only if UserParams.USE_BARYON_FLAG == True)
+ self.pK_bOnlyCLASS_intp: interpolator
+ Baryon-only power spectrum, interpolated over redshift z and wavenumber k
+ self.pK_bANDcbCLASS_intp: interpolator
+ Baryon-CDM cross power spectrum, interpolated over redshift z and wavenumber k
- return rsEtaCF, xiEtaCF
+ Linear Power Spectra
+ self.Deltasq_xa_lin_II: matrix
+ Linear Pop II contribution to LyA power spectrum. Dimension (z, k)
+ self.Deltasq_xa_lin_III: matrix
+ Linear Pop III contribution to LyA power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+ Density-only power spectra used
+ self.Deltasq_xa_lin_IIxIII: matrix
+ Linear Pop II x III cross contribution to LyA power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
- def get_xiEta_R1R2(self, Cosmo_Parameters):
- "same as get_xiEta but smoothed over two different radii with Window"
+ self.Deltasq_Tx_lin_II: matrix
+ Linear Pop II contribution to Xray power spectrum. Dimension (z, k)
+ self.Deltasq_Tx_lin_III: matrix
+ Linear Pop III contribution to Xray power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+ Density-only power spectra used (no linear eta power spectra)
+ self.Deltasq_Tx_lin_IIxIII: matrix
+ Linear Pop II x III cross contribution to Xray power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
- ###HAC: Broadcasted to improve efficiency
- ###HAC: dim 0 is R1, dim 1 is R2, dim 2 is r, where R1 and R2 are smoothing radii and r is the argument of xi(r)
- lengthRarray = len(Cosmo_Parameters._Rtabsmoo)
+ self.Deltasq_xaTx_lin_II: matrix
+ Linear Pop II contribution to LyA-Xray cross spectrum. Dimension (z, k)
+ self.Deltasq_xaTx_lin_III: matrix
+ Linear Pop III contribution to LyA-Xray cross spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+ Density-only power spectra used (no linear eta power spectra)
+ self.Deltasq_xaTx_lin_IIxIII: matrix
+ Linear Pop II x III cross contribution to LyA-Xray cross spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
- windowR1 = self.Window(self._klistCF.reshape(lengthRarray, 1, 1), Cosmo_Parameters._Rtabsmoo.reshape(1, 1, lengthRarray))
- windowR2 = self.Window(self._klistCF.reshape(1, lengthRarray,1), Cosmo_Parameters._Rtabsmoo.reshape(1, 1, lengthRarray))
-
- _PkEtaRR = np.array([[self._PkEtaCF]]) * windowR1 * windowR2
-
- self.rlist_CF, xiEta_RR_CF = self._xif(_PkEtaRR, extrap = False)
-
- return xiEta_RR_CF
+ self.Deltasq_d_lin: matrix
+ Linear LSS power spectra. Dimension (z, k)
+ Set to P_baryon(k) if UserParams.USE_BARYON_FLAG == True
+ self.Deltasq_dxa_lin_II: matrix
+ Linear Pop II density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ self.Deltasq_dxa_lin_III: matrix
+ Linear Pop III density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ Set to zero if AstroParams.USE_POPIII == False
+ self.Deltasq_dTx_lin_II: matrix
+ Linear Pop II density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ self.Deltasq_dTx_lin_III: matrix
+ Linear Pop III density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ Set to zero if AstroParams.USE_POPIII == False
+
+ Total Power Spectra (including nonlinear corrections)
+ self.Deltasq_xa_II: matrix
+ Nonlinear Pop II contribution to LyA power spectrum. Dimension (z, k)
+ self.Deltasq_xa_III: matrix
+ Nonlinear Pop III contribution to LyA power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+ self.Deltasq_xa_IIxIII: matrix
+ Nonlinear Pop II x III cross contribution to LyA power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+
+ self.Deltasq_Tx_II: matrix
+ Nonlinear Pop II contribution to Xray power spectrum. Dimension (z, k)
+ self.Deltasq_Tx_III: matrix
+ Nonlinear Pop III contribution to Xray power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+ self.Deltasq_Tx_IIxIII: matrix
+ Nonlinear Pop II x III cross contribution to Xray power spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+
+ self.Deltasq_xaTx_II: matrix
+ Nonlinear Pop II contribution to LyA-Xray cross spectrum. Dimension (z, k)
+ self.Deltasq_xaTx_III: matrix
+ Nonlinear Pop III contribution to LyA-Xray cross spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+ self.Deltasq_xaTx_IIxIII: matrix
+ Nonlinear Pop II x III cross contribution to LyA-Xray cross spectrum. Dimension (z, k)
+ Set to zero if AstroParams.USE_POPIII == False
+
+ self.Deltasq_d: matrix
+ Nonlinear LSS power spectra. Dimension (z, k)
+ Set to P_baryon(k) if UserParams.USE_BARYON_FLAG == True
+ self.Deltasq_dxa_II: matrix
+ Nonlinear Pop II density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ self.Deltasq_dxa_III: matrix
+ Nonlinear Pop III density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ Set to zero if AstroParams.USE_POPIII == False
+ self.Deltasq_dTx_II: matrix
+ Nonlinear Pop II density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ self.Deltasq_dTx_III: matrix
+ Nonlinear Pop III density-LyA cross power spectrum. Dimension (z, k)
+ Uses P_baryonXcdm(k) if UserParams.USE_BARYON_FLAG == True
+ Set to zero if AstroParams.USE_POPIII == False
+
+ Combined (Pop II + Pop III) Total Power Spectra
+ self.Deltasq_d: matrix
+ Total density power spectrum. Dimension (z, k)
+ self.Deltasq_dxa: matrix
+ Total density-LyA cross power spectrum. Dimension (z, k)
+ self.Deltasq_dTx: matrix
+ Total density-Xray cross power spectrum. Dimension (z, k)
+ self.Deltasq_xa: matrix
+ Total LyA power spectrum. Dimension (z, k)
+ self.Deltasq_xaTx: matrix
+ Total LyA-Xray cross power spectrum. Dimension (z, k)
+ self.Deltasq_Tx: matrix
+ Total Xray power spectrum. Dimension (z, k)
+
+ Ionization/Bubble Related Power Spectra
+ self.Deltasq_xion: matrix
+ Nonlinear ionization power spectrum. Dimension (z, k)
+ self.Deltasq_xion_lin: matrix
+ Linear ionization power spectrum. Dimension (z, k)
+ self.Deltasq_dxion: matrix
+ Nonlinear density-ionization cross power spectrum. Dimension (z, k)
+ self.Deltasq_dxion_lin: matrix
+ Linear density-ionization cross power spectrum. Dimension (z, k)
+ self.Deltasq_xaxion: matrix
+ Nonlinear LyA-ionization cross power spectrum. Dimension (z, k)
+ self.Deltasq_xaxion_lin: matrix
+ Linear LyA-ionization cross power spectrum. Dimension (z, k)
+ self.Deltasq_Txxion: matrix
+ Nonlinear Xray-ionization cross power spectrum. Dimension (z, k)
+ self.Deltasq_Txxion_lin: matrix
+ Linear Xray-ionization cross power spectrum. Dimension (z, k)
+ Final 21-cm Power Spectra
+ self.Deltasq_T21: matrix
+ Total nonlinear 21-cm power spectrum. Dimension (z, k)
+ self.Deltasq_T21_lin: matrix
+ Total linear 21-cm power spectrum. Dimension (z, k)
+ self.Deltasq_dT21: matrix
+ Nonlinear Density-21 cm cross power spectrum. Dimension (z, k)
+ self.Deltasq_dT21_lin: matrix
+ Linear Density-21 cm cross power spectrum. Dimension (z, k)
+
+ """
+ def __init__(self, UserParams, CosmoParams, AstroParams, T21coeffs, RSD_MODE=1):
+ #Variable set up
+ self._rs_input_mcfit = CosmoParams.rlist_CF #just to make notation simpler
+ self.klist_PS = CosmoParams._klistCF
+ self.RSD_MODE = RSD_MODE #TODO: mode to save at different mu
-class Power_Spectra:
- "Get power spetrum from correlation functions and coefficients"
-
- def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCosmo, Correlations, T21_coefficients, RSD_MODE=1):
+ #first get the linear window functions -- note it already has growth factor in it, so it multiplies Pmatter(z=0)
+ #fix some arrays: TYTYTY HERE
-# print("STEP 0: Variable Setup")
- #set up some variables
- self._rs_input_mcfit = Correlations.rlist_CF #just to make notation simpler
- self.klist_PS = Correlations._klistCF
- self.RSD_MODE = RSD_MODE #redshift-space distortion mode. 0 = None (mu=0), 1 = Spherical avg (like 21-cmFAST), 2 = LoS only (mu=1). 2 is more observationally relevant, whereas 1 the standard assumption in sims. 0 is just for comparison with real-space #TODO: mode to save at different mu
+ self._zGreaterMatrix100, self._iRnonlinear, self._corrdNL = self._prepare_corr_arrays(CosmoParams, T21coeffs)
- #first get the linear window functions -- note it already has growth factor in it, so it multiplies Pmatter(z=0)
- # SarahLibanore: add AstroParams to use flag on quadratic order
- self.kwindow, self.windowalpha_II = self.get_xa_window(Astro_Parameters, Cosmo_Parameters, Correlations, T21_coefficients, pop = 2)
- # SarahLibanore: add AstroParams to use flag on quadratic order
- self._kwindowX, self.windowxray_II = self.get_Tx_window(Astro_Parameters, Cosmo_Parameters, Correlations, T21_coefficients, pop = 2)
+ self.kwindow, self.windowalpha_II = self.get_xa_window(CosmoParams, AstroParams, T21coeffs, pop = 2)
+ self._kwindowX, self.windowxray_II = self.get_Tx_window(CosmoParams, AstroParams, T21coeffs, pop = 2)
- if Astro_Parameters.USE_POPIII == True:
+
+ if AstroParams.USE_POPIII == True:
# SarahLibanore: add AstroParams to use flag on quadratic order
- self.kwindow, self.windowalpha_III = self.get_xa_window(Astro_Parameters, Cosmo_Parameters, Correlations, T21_coefficients, pop = 3)
+ self.kwindow, self.windowalpha_III = self.get_xa_window(CosmoParams,AstroParams, T21coeffs, pop = 3)
# SarahLibanore: add AstroParams to use flag on quadratic order
- self._kwindowX, self.windowxray_III = self.get_Tx_window(Astro_Parameters, Cosmo_Parameters, Correlations, T21_coefficients, pop = 3)
+ self._kwindowX, self.windowxray_III = self.get_Tx_window(CosmoParams, AstroParams, T21coeffs, pop = 3)
else:
self.windowalpha_III = np.zeros_like(self.windowalpha_II)
self.windowxray_III = np.zeros_like(self.windowxray_II)
#calculate some growth etc, and the bubble biases for the xHI linear window function:
- self._lingrowthd = cosmology.growth(Cosmo_Parameters, T21_coefficients.zintegral)
+ self._lingrowthd = cosmology.growth(CosmoParams, T21coeffs.zintegral)
+
- #We don't care about bubbles at the moment
- # if(constants.FLAG_DO_BUBBLES):
- # self..calculate_barrier(Cosmo_Parameters, T21_coefficients)
- # self..get_bubbles(Cosmo_Parameters, Correlations, T21_coefficients)
- # self..windowxion = np.array([Correlations.Window(self..Rbub_star[iz]) for iz in range(T21_coefficients.Nzintegral)]) #Window returns a k-array. Smooths at the peak of the BMF
- # self..windowxion = (self..windowxion.T*T21_coefficients.Qstar * self..bias_bub_avg * self.._lingrowthd * np.exp(-T21_coefficients.Qstar) ).T #normalize
- # else:
- # self..windowxion = np.zeros_like(self..windowalpha)
+ ##############################
+ #If USE_BARYON_FLAG, use baryon and baryon-cdm power spectra for correlations involving delta_b
+
+ if UserParams.USE_BARYON_FLAG:
+ transfersMatrix = CosmoParams.ClassCosmo.get_transfer_and_k_and_z()
+
+ fracB = CosmoParams.ClassCosmo.Om_b(0) / (CosmoParams.ClassCosmo.Om_b(0) + CosmoParams.ClassCosmo.Om_cdm(0))
+ fracC = CosmoParams.ClassCosmo.Om_cdm(0) / (CosmoParams.ClassCosmo.Om_b(0) + CosmoParams.ClassCosmo.Om_cdm(0))
+
+ zCLASS = transfersMatrix[2]
+ kCLASS = transfersMatrix[1]; kCLASS[-1] = 0.999*kCLASS[-1] #to avoid interpolation errrors
+ tCLASS = fracB * transfersMatrix[0]['d_b'] + fracC * transfersMatrix[0]['d_cdm']
+ tCLASS_b = transfersMatrix[0]['d_b']
+
+ pK_bOnlyCLASS = CosmoParams.ClassCosmo.pars['A_s'] * (kCLASS / 0.05)**(CosmoParams.ClassCosmo.pars['n_s']-1) * tCLASS_b.T**2 * (2 * np.pi**2/kCLASS**3)
+ pK_bANDcbCLASS = CosmoParams.ClassCosmo.pars['A_s'] * (kCLASS / 0.05)**(CosmoParams.ClassCosmo.pars['n_s']-1) * tCLASS_b.T*tCLASS.T * (2 * np.pi**2/kCLASS**3)
+
+ self.pK_bOnlyCLASS_intp = RegularGridInterpolator([zCLASS, kCLASS], pK_bOnlyCLASS, method = 'cubic')
+ self.pK_bANDcbCLASS_intp = RegularGridInterpolator([zCLASS, kCLASS], pK_bANDcbCLASS, method = 'cubic')
+
##############################
+ #Get all correlation functions
-# print("STEP 1: Computing Nonlinear Power Spectra")
- #finally, get all the nonlinear correlation functions:
-# print("Computing Pop II-dependent power spectra")
# SarahLibanore: add AstroParams to use flag on quadratic order
- self.get_all_corrs_II(Astro_Parameters, User_Parameters, Cosmo_Parameters, Correlations, T21_coefficients)
+ self.get_all_corrs_II(UserParams, CosmoParams, AstroParams, T21coeffs)
- if Astro_Parameters.USE_POPIII == True:
-# print("Computing Pop IIxIII-dependent cross power spectra")
- self.get_all_corrs_IIxIII(User_Parameters, Cosmo_Parameters, Correlations, T21_coefficients)
-
-# print("Computing Pop III-dependent power spectra")
- self.get_all_corrs_III(User_Parameters, Cosmo_Parameters, Correlations, T21_coefficients)
+ if AstroParams.USE_POPIII == True:
+ self.get_all_corrs_IIxIII(CosmoParams, T21coeffs) #compute Pop II x III dependent cross power spectra
+ self.get_all_corrs_III(UserParams, CosmoParams, T21coeffs) #compute Pop III-dependent power spectra
else:
#bypases Pop III correlation routine and sets all Pop III-dependent correlations to zero
self._IIxIII_deltaxi_xa = np.zeros_like(self._II_deltaxi_xa)
@@ -207,18 +293,18 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
#and now define power spectra:
#for xalpha, first linear
- self._Pk_xa_lin_II = self.windowalpha_II**2 * Correlations._PklinCF
- self._Pk_xa_lin_III = self.windowalpha_III**2 * Correlations._PklinCF ###TO DO (linearized VCB flucts):+ self.windowalphaVel_III**2 * Correlations._PkEtaCF
- self._Pk_xa_lin_IIxIII = 2* self.windowalpha_II * self.windowalpha_III * Correlations._PklinCF #Pop IIxIII cross term doesn't have a velocity component
+ self._Pk_xa_lin_II = self.windowalpha_II**2 * CosmoParams._PklinCF
+ self._Pk_xa_lin_III = self.windowalpha_III**2 * CosmoParams._PklinCF #doesn't include linear eta power spectra
+ self._Pk_xa_lin_IIxIII = 2* self.windowalpha_II * self.windowalpha_III * CosmoParams._PklinCF #Pop IIxIII cross term doesn't have a velocity component
self.Deltasq_xa_lin_II = self._Pk_xa_lin_II * self._k3over2pi2 #note that it still has units of xa_avg
self.Deltasq_xa_lin_III = self._Pk_xa_lin_III * self._k3over2pi2 #note that it still has units of xa_avg
self.Deltasq_xa_lin_IIxIII = self._Pk_xa_lin_IIxIII * self._k3over2pi2 #note that it still has units of xa_avg
#nonlinear corrections too:
- self._d_Pk_xa_nl_II = self.get_list_PS(self._II_deltaxi_xa, T21_coefficients.zintegral)
- self._d_Pk_xa_nl_III = self.get_list_PS(self._III_deltaxi_xa, T21_coefficients.zintegral) #velocity correlations already embedded in nonlinear computation
- self._d_Pk_xa_nl_IIxIII = self.get_list_PS(self._IIxIII_deltaxi_xa, T21_coefficients.zintegral)
+ self._d_Pk_xa_nl_II = z21_utilities.get_list_PS(CosmoParams, self._II_deltaxi_xa, T21coeffs.zintegral)
+ self._d_Pk_xa_nl_III = z21_utilities.get_list_PS(CosmoParams, self._III_deltaxi_xa, T21coeffs.zintegral) #velocity correlations already embedded in nonlinear computation
+ self._d_Pk_xa_nl_IIxIII = z21_utilities.get_list_PS(CosmoParams, self._IIxIII_deltaxi_xa, T21coeffs.zintegral)
self.Deltasq_xa_II = self.Deltasq_xa_lin_II + self._d_Pk_xa_nl_II * self._k3over2pi2 #note that it still has units of xa_avg
self.Deltasq_xa_III = self.Deltasq_xa_lin_III + self._d_Pk_xa_nl_III * self._k3over2pi2 #note that it still has units of xa_avg
@@ -229,17 +315,17 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
#and same for xray
- self._Pk_Tx_lin_II = self.windowxray_II**2 * Correlations._PklinCF
- self._Pk_Tx_lin_III = self.windowxray_III**2 * Correlations._PklinCF ###TO DO (linearized VCB flucts):+ self.windowxrayVel_III**2 * Correlations._PkEtaCF
- self._Pk_Tx_lin_IIxIII = 2* self.windowxray_II * self.windowxray_III * Correlations._PklinCF #Pop IIxIII cross term doesn't have a velocity component
+ self._Pk_Tx_lin_II = self.windowxray_II**2 * CosmoParams._PklinCF
+ self._Pk_Tx_lin_III = self.windowxray_III**2 * CosmoParams._PklinCF #doesn't include linear eta power spectra
+ self._Pk_Tx_lin_IIxIII = 2* self.windowxray_II * self.windowxray_III * CosmoParams._PklinCF #Pop IIxIII cross term doesn't have a velocity component
self.Deltasq_Tx_lin_II = self._Pk_Tx_lin_II * self._k3over2pi2
self.Deltasq_Tx_lin_III = self._Pk_Tx_lin_III * self._k3over2pi2
self.Deltasq_Tx_lin_IIxIII = self._Pk_Tx_lin_IIxIII * self._k3over2pi2
- self._d_Pk_Tx_nl_II = self.get_list_PS(self._II_deltaxi_Tx, T21_coefficients.zintegral)
- self._d_Pk_Tx_nl_III = self.get_list_PS(self._III_deltaxi_Tx, T21_coefficients.zintegral)
- self._d_Pk_Tx_nl_IIxIII = self.get_list_PS(self._IIxIII_deltaxi_Tx, T21_coefficients.zintegral)
+ self._d_Pk_Tx_nl_II = z21_utilities.get_list_PS(CosmoParams, self._II_deltaxi_Tx, T21coeffs.zintegral)
+ self._d_Pk_Tx_nl_III = z21_utilities.get_list_PS(CosmoParams, self._III_deltaxi_Tx, T21coeffs.zintegral)
+ self._d_Pk_Tx_nl_IIxIII = z21_utilities.get_list_PS(CosmoParams, self._IIxIII_deltaxi_Tx, T21coeffs.zintegral)
self.Deltasq_Tx_II = self.Deltasq_Tx_lin_II + self._d_Pk_Tx_nl_II * self._k3over2pi2
self.Deltasq_Tx_III = self.Deltasq_Tx_lin_III + self._d_Pk_Tx_nl_III * self._k3over2pi2
@@ -250,17 +336,17 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
#and their cross correlation
- self._Pk_xaTx_lin_II = self.windowalpha_II * self.windowxray_II * Correlations._PklinCF
- self._Pk_xaTx_lin_III = self.windowalpha_III * self.windowxray_III * Correlations._PklinCF ###TO DO (linearized VCB flucts):+ self.windowalphaVel_III * self.windowxrayVel_III * Correlations._PkEtaCF
- self._Pk_xaTx_lin_IIxIII = (self.windowalpha_II * self.windowxray_III + self.windowalpha_III * self.windowxray_II) * Correlations._PklinCF
+ self._Pk_xaTx_lin_II = self.windowalpha_II * self.windowxray_II * CosmoParams._PklinCF
+ self._Pk_xaTx_lin_III = self.windowalpha_III * self.windowxray_III * CosmoParams._PklinCF #doesn't include linear eta power spectra
+ self._Pk_xaTx_lin_IIxIII = (self.windowalpha_II * self.windowxray_III + self.windowalpha_III * self.windowxray_II) * CosmoParams._PklinCF
self.Deltasq_xaTx_lin_II = self._Pk_xaTx_lin_II * self._k3over2pi2
self.Deltasq_xaTx_lin_III = self._Pk_xaTx_lin_III * self._k3over2pi2
self.Deltasq_xaTx_lin_IIxIII = self._Pk_xaTx_lin_IIxIII * self._k3over2pi2
- self._d_Pk_xaTx_nl_II = self.get_list_PS(self._II_deltaxi_xaTx, T21_coefficients.zintegral)
- self._d_Pk_xaTx_nl_III = self.get_list_PS(self._III_deltaxi_xaTx, T21_coefficients.zintegral)
- self._d_Pk_xaTx_nl_IIxIII = self.get_list_PS(self._IIxIII_deltaxi_xaTx, T21_coefficients.zintegral)
+ self._d_Pk_xaTx_nl_II = z21_utilities.get_list_PS(CosmoParams, self._II_deltaxi_xaTx, T21coeffs.zintegral)
+ self._d_Pk_xaTx_nl_III = z21_utilities.get_list_PS(CosmoParams, self._III_deltaxi_xaTx, T21coeffs.zintegral)
+ self._d_Pk_xaTx_nl_IIxIII = z21_utilities.get_list_PS(CosmoParams, self._IIxIII_deltaxi_xaTx, T21coeffs.zintegral)
self.Deltasq_xaTx_II = self.Deltasq_xaTx_lin_II + self._d_Pk_xaTx_nl_II * self._k3over2pi2 #note that it still has units of xa_avg
self.Deltasq_xaTx_III = self.Deltasq_xaTx_lin_III + self._d_Pk_xaTx_nl_III * self._k3over2pi2 #note that it still has units of xa_avg
@@ -271,15 +357,28 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
#and the same for deltaNL and its cross terms:
- self._Pk_d_lin = np.outer(self._lingrowthd**2, Correlations._PklinCF) #No Pop II or III contribution
- self.Deltasq_d_lin = self._Pk_d_lin * self._k3over2pi2 #note that it still has units of xa_avg
-
- self._Pk_dxa_lin_II = (self.windowalpha_II.T * self._lingrowthd).T * Correlations._PklinCF
- self._Pk_dxa_lin_III = (self.windowalpha_III.T * self._lingrowthd).T * Correlations._PklinCF #No velocity component
-
- self._Pk_dTx_lin_II = (self.windowxray_II.T * self._lingrowthd).T * Correlations._PklinCF
- self._Pk_dTx_lin_III = (self.windowxray_III.T * self._lingrowthd).T * Correlations._PklinCF #No velocity component
+ if UserParams.USE_BARYON_FLAG == 1:
+
+ zInput, kInput = np.meshgrid(T21coeffs.zintegral, self.klist_PS, indexing='ij', sparse=True)
+ self._PklinCF_bb = self.pK_bOnlyCLASS_intp((zInput, kInput))
+ self._PklinCF_bm = self.pK_bANDcbCLASS_intp((zInput, kInput))
+
+ self._Pk_d_lin = self._PklinCF_bb #No Pop II or III contribution
+ self._Pk_dxa_lin_II = self.windowalpha_II * self._PklinCF_bm /np.transpose([self._lingrowthd])
+ self._Pk_dxa_lin_III = self.windowalpha_III * self._PklinCF_bm /np.transpose([self._lingrowthd])#No velocity component
+ self._Pk_dTx_lin_II = self.windowxray_II * self._PklinCF_bm /np.transpose([self._lingrowthd])
+ self._Pk_dTx_lin_III = self.windowxray_III * self._PklinCF_bm /np.transpose([self._lingrowthd])#No velocity component
+
+ else:
+ self._Pk_d_lin = np.outer(self._lingrowthd**2, CosmoParams._PklinCF) #No Pop II or III contribution
+ self._Pk_dxa_lin_II = (self.windowalpha_II.T * self._lingrowthd).T * CosmoParams._PklinCF
+ self._Pk_dxa_lin_III = (self.windowalpha_III.T * self._lingrowthd).T * CosmoParams._PklinCF #No velocity component
+ self._Pk_dTx_lin_II = (self.windowxray_II.T * self._lingrowthd).T * CosmoParams._PklinCF
+ self._Pk_dTx_lin_III = (self.windowxray_III.T * self._lingrowthd).T * CosmoParams._PklinCF #No velocity component
+
+ self.Deltasq_d_lin = self._Pk_d_lin * self._k3over2pi2 #note that it still has units of xa_avg
+
self.Deltasq_dxa_lin_II = self._Pk_dxa_lin_II * self._k3over2pi2
self.Deltasq_dxa_lin_III = self._Pk_dxa_lin_III * self._k3over2pi2 #No velocity component
@@ -287,25 +386,23 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
self.Deltasq_dTx_lin_III = self._Pk_dTx_lin_III * self._k3over2pi2 #No velocity component
self._Pk_d = self._Pk_d_lin
-
self._Pk_dxa_II = self._Pk_dxa_lin_II
self._Pk_dxa_III = self._Pk_dxa_lin_III
-
self._Pk_dTx_II = self._Pk_dTx_lin_II
self._Pk_dTx_III = self._Pk_dTx_lin_III
- if(User_Parameters.FLAG_DO_DENS_NL): #note that the nonlinear terms (cross and auto) below here have the growth already accounted for
+ if(UserParams.FLAG_DO_DENS_NL): #note that the nonlinear terms (cross and auto) below here have the growth already accounted for
- self._d_Pk_d_nl = self.get_list_PS(self._II_deltaxi_d, T21_coefficients.zintegral)
+ self._d_Pk_d_nl = z21_utilities.get_list_PS(CosmoParams, self._II_deltaxi_d, T21coeffs.zintegral)
self._Pk_d += self._d_Pk_d_nl
- self._d_Pk_dxa_nl_II = self.get_list_PS(self._II_deltaxi_dxa, T21_coefficients.zintegral)
- self._d_Pk_dxa_nl_III = self.get_list_PS(self._III_deltaxi_dxa, T21_coefficients.zintegral)
+ self._d_Pk_dxa_nl_II = z21_utilities.get_list_PS(CosmoParams, self._II_deltaxi_dxa, T21coeffs.zintegral)
+ self._d_Pk_dxa_nl_III = z21_utilities.get_list_PS(CosmoParams, self._III_deltaxi_dxa, T21coeffs.zintegral)
self._Pk_dxa_II += self._d_Pk_dxa_nl_II
self._Pk_dxa_III += self._d_Pk_dxa_nl_III
- self._d_Pk_dTx_nl_II = self.get_list_PS(self._II_deltaxi_dTx, T21_coefficients.zintegral)
- self._d_Pk_dTx_nl_III = self.get_list_PS(self._III_deltaxi_dTx, T21_coefficients.zintegral)
+ self._d_Pk_dTx_nl_II = z21_utilities.get_list_PS(CosmoParams, self._II_deltaxi_dTx, T21coeffs.zintegral)
+ self._d_Pk_dTx_nl_III = z21_utilities.get_list_PS(CosmoParams, self._III_deltaxi_dTx, T21coeffs.zintegral)
self._Pk_dTx_II += self._d_Pk_dTx_nl_II
self._Pk_dTx_III += self._d_Pk_dTx_nl_III
@@ -325,31 +422,31 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
#and xHI too. Linear part does not have bubbles, only delta part
if(constants.FLAG_DO_BUBBLES):
#auto
- self._Pk_xion_lin = self.windowxion**2 * Correlations._PklinCF
+ self._Pk_xion_lin = self.windowxion**2 * CosmoParams._PklinCF
self.Deltasq_xion_lin = self._Pk_xion_lin * self._k3over2pi2
- self._d_Pk_xion_nl = self.get_list_PS(self._deltaxi_xi, T21_coefficients.zintegral)
+ self._d_Pk_xion_nl = z21_utilities.get_list_PS(CosmoParams, self._deltaxi_xi, T21coeffs.zintegral)
self.Deltasq_xion = self.Deltasq_xion_lin + self._d_Pk_xion_nl * self._k3over2pi2
#cross with density
- self._Pk_dxion_lin = (self.windowxion.T * self._lingrowthd).T * Correlations._PklinCF
+ self._Pk_dxion_lin = (self.windowxion.T * self._lingrowthd).T * CosmoParams._PklinCF
self.Deltasq_dxion_lin = self._Pk_dxion_lin * self._k3over2pi2
- self._d_Pk_dxion_nl = self.get_list_PS(self._deltaxi_dxi, T21_coefficients.zintegral)
+ self._d_Pk_dxion_nl = z21_utilities.get_list_PS(CosmoParams, self._deltaxi_dxi, T21coeffs.zintegral)
self.Deltasq_dxion = self.Deltasq_dxion_lin + self._d_Pk_dxion_nl * self._k3over2pi2
#cross with xa
- self._Pk_xaxion_lin = self.windowxion * self.windowalpha * Correlations._PklinCF
+ self._Pk_xaxion_lin = self.windowxion * self.windowalpha * CosmoParams._PklinCF
self.Deltasq_xaxion_lin = self._Pk_xaxion_lin * self._k3over2pi2
- self._d_Pk_xaxion_nl = self.get_list_PS(self._deltaxi_xaxi, T21_coefficients.zintegral)
+ self._d_Pk_xaxion_nl = z21_utilities.get_list_PS(CosmoParams, self._deltaxi_xaxi, T21coeffs.zintegral)
self.Deltasq_xaxion = self.Deltasq_xaxion_lin + self._d_Pk_xaxion_nl * self._k3over2pi2
#and cross with Tx
- self._Pk_Txxion_lin = self.windowxion * self.windowxray * Correlations._PklinCF
+ self._Pk_Txxion_lin = self.windowxion * self.windowxray * CosmoParams._PklinCF
self.Deltasq_Txxion_lin = self._Pk_Txxion_lin * self._k3over2pi2
- self._d_Pk_Txxion_nl = self.get_list_PS(self._deltaxi_Txxi, T21_coefficients.zintegral)
+ self._d_Pk_Txxion_nl = z21_utilities.get_list_PS(CosmoParams, self._deltaxi_Txxi, T21coeffs.zintegral)
self.Deltasq_Txxion = self.Deltasq_Txxion_lin + self._d_Pk_Txxion_nl * self._k3over2pi2
else:
self.Deltasq_xion = np.zeros_like(self.Deltasq_d)
@@ -364,25 +461,24 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
##############################
+ #Compute the 21-cm power spectrum
-# print('STEP 2: Computing 21-cm Power Spectrum')
- #and get the PS of T21 too.
- self._betaT = T21_coefficients.T_CMB/T21_coefficients.Tk_avg /(T21_coefficients.invTcol_avg**-1 - T21_coefficients.T_CMB) #multiplies \delta T_x and \delta T_ad [both dimensionful, not \deltaT/T]
- self._betaxa = 1./(1. + T21_coefficients.xa_avg)/T21_coefficients.xa_avg #multiplies \delta x_a [again not \delta xa/xa]
+ self._betaT = T21coeffs.T_CMB/T21coeffs.Tk_avg /(T21coeffs.invTcol_avg**-1 - T21coeffs.T_CMB) #multiplies \delta T_x and \delta T_ad [both dimensionful, not \deltaT/T]
+ self._betaxa = 1./(1. + T21coeffs.xa_avg)/T21coeffs.xa_avg #multiplies \delta x_a [again not \delta xa/xa]
#calculate beta_adiabatic
- self._dlingrowthd_dz = cosmology.dgrowth_dz(Cosmo_Parameters, T21_coefficients.zintegral)
+ self._dlingrowthd_dz = cosmology.dgrowth_dz(CosmoParams, T21coeffs.zintegral)
- _factor_adi_ = (1+T21_coefficients.zintegral)**2
- _integrand_adi = T21_coefficients.Tk_avg*self._dlingrowthd_dz/_factor_adi_ * T21_coefficients.dlogzint*T21_coefficients.zintegral
+ _factor_adi_ = (1+T21coeffs.zintegral)**2
+ _integrand_adi = T21coeffs.Tk_avg*self._dlingrowthd_dz/_factor_adi_ * T21coeffs.dlogzint*T21coeffs.zintegral
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
+ if(CosmoParams.Flag_emulate_21cmfast==True):
_hizintegral = 0.0 #they do not account for the adiabatic history prior to starting their evolution. It misses ~half of the adiabatic flucts.
else:
#the z>zmax part of the integral we do aside. Assume Tk=Tadiabatic from CLASS.
- _zlisthighz_ = np.linspace(T21_coefficients.zintegral[-1], 99., 100) #beyond z=100 need to explictly tell CLASS to save growth
- _dgrowthhighz_ = cosmology.dgrowth_dz(Cosmo_Parameters, _zlisthighz_)
- _hizintegral = np.trapezoid(cosmology.Tadiabatic(Cosmo_Parameters,_zlisthighz_)
+ _zlisthighz_ = np.linspace(T21coeffs.zintegral[-1], 99., 100) #beyond z=100 need to explictly tell CLASS to save growth
+ _dgrowthhighz_ = cosmology.dgrowth_dz(CosmoParams, _zlisthighz_)
+ _hizintegral = np.trapezoid(cosmology.Tadiabatic(CosmoParams,_zlisthighz_)
/(1+_zlisthighz_)**2 * _dgrowthhighz_, _zlisthighz_)
self._betaTad_ = -2./3. * _factor_adi_/self._lingrowthd * (np.cumsum(_integrand_adi[::-1])[::-1] + _hizintegral) #units of Tk_avg. Internal sum goes from high to low z (backwards), minus sign accounts for it properly so it's positive.
@@ -401,9 +497,9 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
print('Error, have to choose an RSD mode! RSD_MODE')
if(constants.FLAG_DO_BUBBLES):
- self._betaxion = - 1.0/T21_coefficients.xHI_avg * np.heaviside(constants.ZMAX_Bubbles - T21_coefficients.zintegral, 0.5) # xion = 1 - xHI, only for zkl...', self._allbetamatrix, self._allcorrs)
- self.Deltasq_T21 = (self.Deltasq_T21.T*T21_coefficients.T21avg**2).T
+ self.Deltasq_T21 = (self.Deltasq_T21.T*T21coeffs.T21avg**2).T
- self.Deltasq_dT21 = (np.einsum('ik...,ikl...->kl...',self._allbetas,self._allcorrs[0]).T*T21_coefficients.T21avg).T
+ self.Deltasq_dT21 = (np.einsum('ik...,ikl...->kl...',self._allbetas,self._allcorrs[0]).T*T21coeffs.T21avg).T
#Sum Linear Pop II and Pop III contributions
@@ -453,42 +549,84 @@ def __init__(self, User_Parameters, Cosmo_Parameters, Astro_Parameters, ClassCos
)
self.Deltasq_T21_lin = np.einsum('ijk...,ijkl...->kl...', self._allbetamatrix, self._allcorrs_lin)
- self.Deltasq_T21_lin = (self.Deltasq_T21_lin.T*T21_coefficients.T21avg**2).T
+ self.Deltasq_T21_lin = (self.Deltasq_T21_lin.T*T21coeffs.T21avg**2).T
- self.Deltasq_dT21_lin = (np.einsum('ik...,ikl...->kl...',self._allbetas,self._allcorrs_lin[0]).T*T21_coefficients.T21avg).T
+ self.Deltasq_dT21_lin = (np.einsum('ik...,ikl...->kl...',self._allbetas,self._allcorrs_lin[0]).T*T21coeffs.T21avg).T
# print("Power Spectral Routine Done!")
- # SarahLibanore: add AstroParams to use flag on quadratic order
- def get_xa_window(self, Astro_Parameters, Cosmo_Parameters, Correlations, T21_coefficients, pop = 0): #set pop to 2 or 3, default zero just so python doesn't complain
- "Returns the xa window function for all z in zintegral"
+ def _prepare_corr_arrays(self, CosmoParams, T21coeffs):
+ """
+ Prepare correlation arrays to save computation time
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ T21coeffs : T21coeffs class
+
+ Returns
+ ----------
+ zGM : matrix
+ Identical to zGreaterMatrix but with NaNs replaced with 100 for computational ease. Dimension (z, k)
+ iR: array
+ Defines which indices are nonlinear
+ corr: matrix
+ Matter correlation function at iR indices. Dimensions (1, iR, iR, k)
+ """
- zGreaterMatrix100 = np.copy(T21_coefficients.zGreaterMatrix)
- zGreaterMatrix100[np.isnan(zGreaterMatrix100)] = 100
+ zGM = np.copy(T21coeffs.zGreaterMatrix)
+ zGM[np.isnan(zGM)] = 100
+ iR = np.arange(CosmoParams.indexmaxNL)
+ corr = CosmoParams.xi_RR_CF[np.ix_(iR, iR)]
+ corr[:CosmoParams.indexminNL, :CosmoParams.indexminNL] = \
+ corr[CosmoParams.indexminNL, CosmoParams.indexminNL]
+ return zGM, iR, corr.reshape((1, *corr.shape))
- coeffzp = T21_coefficients.coeff1LyAzp
- coeffJaxa = T21_coefficients.coeff_Ja_xa
+ # SarahLibanore: add AstroParams to use flag on quadratic order
+ def get_xa_window(self, CosmoParams, AstroParams, T21coeffs, pop = 0): #set pop to 2 or 3, default zero just so python doesn't complain
+ """
+ Computes the LyA window functions for each stellar population across z and k.
- growthRmatrix = cosmology.growth(Cosmo_Parameters, zGreaterMatrix100)
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ T21coeffs : T21coeffs class
+ pop: int
+ Which stellar population to use. 2 for Pop II, 3 for Pop III.
+
+ Returns
+ ----------
+ _kwinalpha : array
+ Array of wavenumbers
+ _win_alpha: matrix
+ Matrix of LyA window functions. Dimension (z, k)
+
+ """
+
+ coeffzp = T21coeffs.coeff1LyAzp
+ coeffJaxa = T21coeffs.coeff_Ja_xa
+
+ growthRmatrix = cosmology.growth(CosmoParams, self._zGreaterMatrix100)
if pop == 2:
- coeffRmatrix = T21_coefficients.coeff2LyAzpRR_II
- gammaRmatrix = T21_coefficients.gamma_II_index2D * growthRmatrix
+ coeffRmatrix = T21coeffs.coeff2LyAzpRR_II
+ gammaRmatrix = T21coeffs.gamma_II_index2D * growthRmatrix
elif pop == 3:
- coeffRmatrix = T21_coefficients.coeff2LyAzpRR_III
- gammaRmatrix = T21_coefficients.gamma_III_index2D * growthRmatrix
+ coeffRmatrix = T21coeffs.coeff2LyAzpRR_III
+ gammaRmatrix = T21coeffs.gamma_III_index2D * growthRmatrix
else:
print("Must set pop to either 2 or 3!")
_wincoeffsMatrix = coeffRmatrix * gammaRmatrix
# SarahLibanore: quadratic order in the lognormal
- if Astro_Parameters.quadratic_SFRD_lognormal:
- _wincoeffsMatrix *= 1./(1-2.*T21_coefficients.gamma2_II_index2D*T21_coefficients.sigmaofRtab**2)
+ if AstroParams.quadratic_SFRD_lognormal:
+ _wincoeffsMatrix *= 1./(1-2.*T21coeffs.gamma2_II_index2D*T21coeffs.sigmaofRtab**2)
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False): #do the standard 1D TopHat
- _wincoeffsMatrix /=(4*np.pi * T21_coefficients.Rtabsmoo**2) * (T21_coefficients.Rtabsmoo * T21_coefficients.dlogRR) # so we can just use mcfit for logFFT, 1/(4pir^2 * Delta r)
- _kwinalpha, _win_alpha = self.get_Pk_from_xi(T21_coefficients.Rtabsmoo, _wincoeffsMatrix)
+ if(CosmoParams.Flag_emulate_21cmfast==False): #do the standard 1D TopHat
+ _wincoeffsMatrix /=(4*np.pi * CosmoParams._Rtabsmoo**2) * (CosmoParams._Rtabsmoo * CosmoParams._dlogRR) # so we can just use mcfit for logFFT, 1/(4pir^2 * Delta r)
+ _kwinalpha, _win_alpha = z21_utilities.get_Pk_from_xi(CosmoParams._Rtabsmoo, _wincoeffsMatrix)
else:
_kwinalpha = self.klist_PS
@@ -496,9 +634,9 @@ def get_xa_window(self, Astro_Parameters, Cosmo_Parameters, Correlations, T21_co
coeffRgammaRmatrix = coeffRmatrix * gammaRmatrix
coeffRgammaRmatrix = coeffRgammaRmatrix.reshape(*coeffRgammaRmatrix.shape, 1)
- dummyMesh, RtabsmooMesh, kWinAlphaMesh = np.meshgrid(T21_coefficients.zintegral, T21_coefficients.Rtabsmoo, _kwinalpha, indexing = 'ij', sparse = True)
+ dummyMesh, RtabsmooMesh, kWinAlphaMesh = np.meshgrid(T21coeffs.zintegral, CosmoParams._Rtabsmoo, _kwinalpha, indexing = 'ij', sparse = True)
- _win_alpha = coeffRgammaRmatrix * Correlations._WinTH(RtabsmooMesh, kWinAlphaMesh)
+ _win_alpha = coeffRgammaRmatrix * z21_utilities._WinTH(RtabsmooMesh, kWinAlphaMesh)
_win_alpha = np.sum(_win_alpha, axis = 1)
_win_alpha *= np.array([coeffzp*coeffJaxa]).T
@@ -507,34 +645,49 @@ def get_xa_window(self, Astro_Parameters, Cosmo_Parameters, Correlations, T21_co
# SarahLibanore: add AstroParams to use flag on quadratic order
- def get_Tx_window(self, Astro_Parameters, Cosmo_Parameters, Correlations, T21_coefficients, pop = 0): #set pop to 2 or 3, default zero just so python doesn't complain
- "Returns the Tx window function for all z in zintegral"
-
- zGreaterMatrix100 = np.copy(T21_coefficients.zGreaterMatrix)
- zGreaterMatrix100[np.isnan(zGreaterMatrix100)] = 100
-
- coeffzp = np.array([T21_coefficients.coeff1Xzp]).T
- growthRmatrix = cosmology.growth(Cosmo_Parameters, zGreaterMatrix100)
+ def get_Tx_window(self, CosmoParams, AstroParams, T21coeffs, pop = 0): #set pop to 2 or 3, default zero just so python doesn't complain
+ """
+ Computes the Xray window functions for each stellar population across z and k.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ T21coeffs : T21coeffs class
+ pop: int
+ Which stellar population to use. 2 for Pop II, 3 for Pop III.
+
+ Returns
+ ----------
+ _kwinTx : array
+ Array of wavenumbers
+ _win_Tx: matrix
+ Matrix of Xray window functions. Dimension (z, k)
+
+ """
+
+ coeffzp = np.array([T21coeffs.coeff1Xzp]).T
+ growthRmatrix = cosmology.growth(CosmoParams, self._zGreaterMatrix100)
if pop == 2:
- coeffRmatrix = T21_coefficients.coeff2XzpRR_II
- gammaRmatrix = T21_coefficients.gamma_II_index2D * growthRmatrix
- _coeffTx_units = T21_coefficients.coeff_Gammah_Tx_II#z-dependent, includes 10^40 erg/s/SFR normalizaiton and erg/K conversion factor, and the 1/(1+z)^2 factor to compensate the adiabatic cooling of the Tx olny part
+ coeffRmatrix = T21coeffs.coeff2XzpRR_II
+ gammaRmatrix = T21coeffs.gamma_II_index2D * growthRmatrix
+ _coeffTx_units = T21coeffs.coeff_Gammah_Tx_II#z-dependent, includes 10^40 erg/s/SFR normalizaiton and erg/K conversion factor, and the 1/(1+z)^2 factor to compensate the adiabatic cooling of the Tx olny part
elif pop == 3:
- coeffRmatrix = T21_coefficients.coeff2XzpRR_III
- gammaRmatrix = T21_coefficients.gamma_III_index2D * growthRmatrix
- _coeffTx_units = T21_coefficients.coeff_Gammah_Tx_III
+ coeffRmatrix = T21coeffs.coeff2XzpRR_III
+ gammaRmatrix = T21coeffs.gamma_III_index2D * growthRmatrix
+ _coeffTx_units = T21coeffs.coeff_Gammah_Tx_III
else:
print("Must set pop to either 2 or 3!")
# SarahLibanore: quadratic order in the lognormal
- if Astro_Parameters.quadratic_SFRD_lognormal:
- gammaRmatrix *= (1/(1-2.*T21_coefficients.gamma2_II_index2D*T21_coefficients.sigmaofRtab**2))
+ if AstroParams.quadratic_SFRD_lognormal:
+ gammaRmatrix *= (1/(1-2.*T21coeffs.gamma2_II_index2D*T21coeffs.sigmaofRtab**2))
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False): #do the standard 1D TopHat
+ if(CosmoParams.Flag_emulate_21cmfast==False): #do the standard 1D TopHat
_wincoeffs = coeffRmatrix * gammaRmatrix #array in logR space
- _wincoeffs /=(4*np.pi * T21_coefficients.Rtabsmoo**2) * (T21_coefficients.Rtabsmoo * T21_coefficients.dlogRR) # so we can just use mcfit for logFFT, 1/(4pir^2) * Delta r
- _kwinTx, _win_Tx_curr = self.get_Pk_from_xi(T21_coefficients.Rtabsmoo, _wincoeffs)
+ _wincoeffs /=(4*np.pi * CosmoParams._Rtabsmoo**2) * (CosmoParams._Rtabsmoo * CosmoParams._dlogRR) # so we can just use mcfit for logFFT, 1/(4pir^2) * Delta r
+ _kwinTx, _win_Tx_curr = z21_utilities.get_Pk_from_xi(CosmoParams._Rtabsmoo, _wincoeffs)
else:
_kwinTx = self.klist_PS
@@ -542,9 +695,9 @@ def get_Tx_window(self, Astro_Parameters, Cosmo_Parameters, Correlations, T21_c
coeffRgammaRmatrix = coeffRmatrix * gammaRmatrix
coeffRgammaRmatrix = coeffRgammaRmatrix.reshape(*coeffRgammaRmatrix.shape, 1)
- dummyMesh, RtabsmooMesh, kWinTxMesh = np.meshgrid(T21_coefficients.zintegral, T21_coefficients.Rtabsmoo, _kwinTx, indexing = 'ij', sparse = True)
+ dummyMesh, RtabsmooMesh, kWinTxMesh = np.meshgrid(T21coeffs.zintegral, CosmoParams._Rtabsmoo, _kwinTx, indexing = 'ij', sparse = True)
- _win_Tx_curr = coeffRgammaRmatrix * Correlations._WinTH(RtabsmooMesh, kWinTxMesh)
+ _win_Tx_curr = coeffRgammaRmatrix * z21_utilities._WinTH(RtabsmooMesh, kWinTxMesh)
_win_Tx_curr = np.sum(_win_Tx_curr , axis = 1)
_win_Tx = _win_Tx_curr * coeffzp
@@ -556,69 +709,74 @@ def get_Tx_window(self, Astro_Parameters, Cosmo_Parameters, Correlations, T21_c
# SarahLibanore: function modified to include quadratic order
- def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters, Correlations, T21_coefficients):
+ def get_all_corrs_II(self, UserParams, CosmoParams, AstroParams, T21coeffs):
- "Returns the Pop II components of the correlation functions of all observables at each z in zintegral"
- #HAC: I deleted the bubbles and EoR part, to be done later.....
- #_iRnonlinear = np.arange(Cosmo_Parameters.indexminNL,Cosmo_Parameters.indexmaxNL)
-
- zGreaterMatrix100 = np.copy(T21_coefficients.zGreaterMatrix)
- zGreaterMatrix100[np.isnan(zGreaterMatrix100)] = 100
+ """
+ Computes the Pop II correlation functions across z and R.
+
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ T21coeffs : T21coeffs class
+
+ Returns
+ ----------
+ Attributes stored in Power_Spectra
- _iRnonlinear = np.arange(Cosmo_Parameters.indexmaxNL)
- corrdNL = Correlations.xi_RR_CF[np.ix_(_iRnonlinear,_iRnonlinear)]
- #for Rijkl', gammamatrixR1R1, corrdNL, optimize = True) #same thing as gammamatrixR1R1 * corrdNL but faster
# SarahLibanore : change to introduce quantities required in the second order correction
# --- #
- growthRmatrix1 = growthRmatrix.reshape(len(T21_coefficients.zintegral), 1, len(_iRnonlinear),1)
- growthRmatrix2 = growthRmatrix.reshape(len(T21_coefficients.zintegral), len(_iRnonlinear), 1,1)
+ growthRmatrix1 = growthRmatrix.reshape(len(T21coeffs.zintegral), 1, len(self._iRnonlinear),1)
+ growthRmatrix2 = growthRmatrix.reshape(len(T21coeffs.zintegral), len(self._iRnonlinear), 1,1)
growth_corr = growthRmatrix1 * growthRmatrix2
- gammaR1 = T21_coefficients.gamma_II_index2D[:, _iRnonlinear]
- sigmaR1 = T21_coefficients.sigmaofRtab[:, _iRnonlinear]
- sR1 = (sigmaR1).reshape(len(T21_coefficients.zintegral), 1, len(_iRnonlinear),1)
- sR2 = (sigmaR1).reshape(len(T21_coefficients.zintegral), len(_iRnonlinear), 1,1)
+ gammaR1 = T21coeffs.gamma_II_index2D[:, self._iRnonlinear]
+ sigmaR1 = T21coeffs.sigmaofRtab[:, self._iRnonlinear]
+ sR1 = (sigmaR1).reshape(len(T21coeffs.zintegral), 1, len(self._iRnonlinear),1)
+ sR2 = (sigmaR1).reshape(len(T21coeffs.zintegral), len(self._iRnonlinear), 1,1)
- g1 = (gammaR1 * sigmaR1).reshape(len(T21_coefficients.zintegral), 1, len(_iRnonlinear),1)
- g2 = (gammaR1 * sigmaR1).reshape(len(T21_coefficients.zintegral), len(_iRnonlinear), 1,1)
+ g1 = (gammaR1 * sigmaR1).reshape(len(T21coeffs.zintegral), 1, len(self._iRnonlinear),1)
+ g2 = (gammaR1 * sigmaR1).reshape(len(T21coeffs.zintegral), len(self._iRnonlinear), 1,1)
gammamatrixR1R1 = g1 * g2
+ corrdNL = self._corrdNL
corrdNL_gs = ne.evaluate('corrdNL * growth_corr/ (sR1 * sR2)')
gammaTimesCorrdNL = ne.evaluate('gammamatrixR1R1 * corrdNL_gs')
- if Astro_Parameters.quadratic_SFRD_lognormal:
+ if AstroParams.quadratic_SFRD_lognormal:
- gammaR1NL = T21_coefficients.gamma2_II_index2D[:, _iRnonlinear]
- g1NL = (gammaR1NL * sigmaR1**2).reshape(len(T21_coefficients.zintegral), 1, len(_iRnonlinear),1)
- g2NL = (gammaR1NL * sigmaR1**2).reshape(len(T21_coefficients.zintegral), len(_iRnonlinear), 1,1)
+ gammaR1NL = T21coeffs.gamma2_II_index2D[:, self._iRnonlinear]
+ g1NL = (gammaR1NL * sigmaR1**2).reshape(len(T21coeffs.zintegral), 1, len(self._iRnonlinear),1)
+ g2NL = (gammaR1NL * sigmaR1**2).reshape(len(T21coeffs.zintegral), len(self._iRnonlinear), 1,1)
numerator_NL = ne.evaluate('gammaTimesCorrdNL+ g1 * g1 * (0.5 - g2NL * (1 - corrdNL_gs * corrdNL_gs)) + g2 * g2 * (0.5 - g1NL * (1 - corrdNL_gs * corrdNL_gs))')
denominator_NL = ne.evaluate('1. - 2 * g1NL - 2 * g2NL + 4 * g1NL * g2NL * (1 - corrdNL_gs * corrdNL_gs)')
- norm1 = ne.evaluate('exp(g1 * g1 / (2 - 4 * g1NL)) / sqrt(1 - 2 * g1NL)')
- norm2 = ne.evaluate('exp(g2 * g2 / (2 - 4 * g2NL)) / sqrt(1 - 2 * g2NL)')
+ norm1 = ne.evaluate('exp(g1 * g1 / (2 - 4 * g1NL)) / sqrt(1 - 2 * g1NL)')
+ norm2 = ne.evaluate('exp(g2 * g2 / (2 - 4 * g2NL)) / sqrt(1 - 2 * g2NL)')
log_norm = ne.evaluate('log(sqrt(denominator_NL) * norm1 * norm2)')
nonlinearcorrelation = ne.evaluate('exp(numerator_NL/denominator_NL - log_norm)')
@@ -631,19 +789,19 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
self._II_deltaxi_xa = np.einsum('ijkl->il', coeffmatrixxa * expGammaCorrMinusLinear, optimize = True)
self._II_deltaxi_xa *= np.array([coeffzp1xa]).T**2 #brings it to xa units
- if (User_Parameters.FLAG_DO_DENS_NL):
+ if (UserParams.FLAG_DO_DENS_NL):
D_coeffR1xa = coeffR1xa.reshape(*coeffR1xa.shape, 1)
- DDgammaR1 = T21_coefficients.gamma_II_index2D[:, _iRnonlinear]
+ DDgammaR1 = T21coeffs.gamma_II_index2D[:, self._iRnonlinear]
D_gammaR1 = DDgammaR1.reshape(*DDgammaR1.shape , 1)
D_growthRmatrix = growthRmatrix[:,:1].reshape(*growthRmatrix[:,:1].shape, 1)
D_corrdNL = corrdNL[:1,0,:,:]
# SarahLibanore
- if Astro_Parameters.quadratic_SFRD_lognormal:
+ if AstroParams.quadratic_SFRD_lognormal:
- DDsigmaR1 = T21_coefficients.sigmaofRtab[:, _iRnonlinear]
+ DDsigmaR1 = T21coeffs.sigmaofRtab[:, self._iRnonlinear]
D_sigmaR1 = DDsigmaR1.reshape(*DDsigmaR1.shape , 1)
- DDgammaR1N = T21_coefficients.gamma2_II_index2D[:, _iRnonlinear]
+ DDgammaR1N = T21coeffs.gamma2_II_index2D[:, self._iRnonlinear]
D_gammaR1N = DDgammaR1N.reshape(*DDgammaR1N.shape , 1)
gammaTimesCorrdNL = ne.evaluate('D_gammaR1 * D_growthRmatrix* D_growthRmatrix * D_corrdNL')
@@ -651,7 +809,7 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
denominator_NL = ne.evaluate('1. - 2 * D_gammaR1N*D_sigmaR1*D_sigmaR1')
- norm1 = ne.evaluate('exp(D_gammaR1 * D_gammaR1 * D_sigmaR1* D_sigmaR1 * D_gammaR1 * D_gammaR1 * D_sigmaR1* D_sigmaR1 / (2 - 4 * D_gammaR1N*D_sigmaR1*D_sigmaR1)) / sqrt(1 - 2 * D_gammaR1N*D_sigmaR1*D_sigmaR1)')
+ norm1 = ne.evaluate('exp(D_gammaR1 * D_gammaR1 * D_sigmaR1* D_sigmaR1 * D_gammaR1 * D_gammaR1 * D_sigmaR1* D_sigmaR1 / (2 - 4 * D_gammaR1N*D_sigmaR1*D_sigmaR1)) / sqrt(1 - 2 * D_gammaR1N*D_sigmaR1*D_sigmaR1)')
log_norm = ne.evaluate('log(sqrt(denominator_NL) * norm1)')
nonlinearcorrelation = ne.evaluate('exp(numerator_NL/denominator_NL - log_norm)')
@@ -660,7 +818,7 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
nonlinearcorrelation - 1 - D_gammaR1 * D_growthRmatrix**2 * D_corrdNL/(1-2.*D_gammaR1N*D_sigmaR1**2)
), axis = 1)
- else:
+ else:
self._II_deltaxi_dxa = np.sum(D_coeffR1xa * ((np.exp(D_gammaR1 * D_growthRmatrix**2 * D_corrdNL )-1.0 ) - D_gammaR1 * D_growthRmatrix**2 * D_corrdNL), axis = 1)
self._II_deltaxi_d = (np.exp(growthRmatrix[:,:1]**2 * corrdNL[0,0,0,:]) - 1.0) - growthRmatrix[:,:1]**2 * corrdNL[0,0,0,:]
@@ -672,8 +830,8 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
# gammaR2 = np.copy(gammaR1) #already has growth factor in this
# gammamatrixR1R2 = gammaR1.reshape(*gammaR1.shape, 1, 1) * gammaR2.reshape(1, 1, *gammaR2.shape)
- coeffzp1Tx = np.copy(T21_coefficients.coeff1Xzp).reshape(*T21_coefficients.coeff1Xzp.shape, 1, 1, 1)
- coeffzp2Tx = np.copy(T21_coefficients.coeff1Xzp).reshape(1, 1, *T21_coefficients.coeff1Xzp.shape, 1)
+ coeffzp1Tx = np.copy(T21coeffs.coeff1Xzp).reshape(*T21coeffs.coeff1Xzp.shape, 1, 1, 1)
+ coeffzp2Tx = np.copy(T21coeffs.coeff1Xzp).reshape(1, 1, *T21coeffs.coeff1Xzp.shape, 1)
coeffR2Tx = np.copy(coeffR1Tx)
coeffmatrixTxTx = coeffR1Tx.reshape(*coeffR1Tx.shape, 1, 1) * coeffR2Tx.reshape(1, 1, *coeffR2Tx.shape)
@@ -692,7 +850,7 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
sR1 = (sigmaR1).reshape(*gammaR1.shape, 1, 1)
g2 = (gammaR2 * sigmaR2).reshape(1, 1, *gammaR2.shape)
sR2 = (sigmaR2).reshape(1, 1, *gammaR2.shape)
- if Astro_Parameters.quadratic_SFRD_lognormal:
+ if AstroParams.quadratic_SFRD_lognormal:
gammaR2NL = np.copy(gammaR1NL)
g1NL = (gammaR1NL * sigmaR1**2).reshape(*gammaR1NL.shape, 1, 1)
g2NL = (gammaR2NL * sigmaR2**2).reshape(1, 1, *gammaR2NL.shape)
@@ -702,19 +860,19 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
self._II_deltaxi_Tx = np.zeros_like(self._II_deltaxi_xa)
self._II_deltaxi_xaTx = np.zeros_like(self._II_deltaxi_xa)
corrdNLBIG = corrdNL[:,:, np.newaxis, :,:] #dimensions zp1, R1, zp2, R2, and r which will be looped over below
- for ir in range(len(T21_coefficients.Rtabsmoo)):
+ for ir in range(len(CosmoParams._Rtabsmoo)):
corrdNL = corrdNLBIG[:,:,:,:,ir]
corrdNL_gs = ne.evaluate('corrdNL * growth_corr / (sR1 * sR2)')
#HAC: Computations using ne.evaluate(...) use numexpr, which speeds up computations of massive numpy arrays
gammaTimesCorrdNL = ne.evaluate('gammamatrixR1R2 * corrdNL_gs')
- if Astro_Parameters.quadratic_SFRD_lognormal:
+ if AstroParams.quadratic_SFRD_lognormal:
numerator_NL = ne.evaluate('gammaTimesCorrdNL + g1 * g1 * (0.5 - g2NL * (1 - corrdNL_gs * corrdNL_gs)) + g2 * g2 * (0.5 - g1NL * (1 - corrdNL_gs * corrdNL_gs))')
denominator_NL = ne.evaluate('1. - 2 * g1NL - 2 * g2NL + 4 * g1NL * g2NL * (1 - corrdNL_gs * corrdNL_gs)')
- norm1 = ne.evaluate('exp(g1 * g1 / (2 - 4 * g1NL)) / sqrt(1 - 2 * g1NL)')
- norm2 = ne.evaluate('exp(g2 * g2 / (2 - 4 * g2NL)) / sqrt(1 - 2 * g2NL)')
+ norm1 = ne.evaluate('exp(g1 * g1 / (2 - 4 * g1NL)) / sqrt(1 - 2 * g1NL)')
+ norm2 = ne.evaluate('exp(g2 * g2 / (2 - 4 * g2NL)) / sqrt(1 - 2 * g2NL)')
log_norm = ne.evaluate('log(sqrt(denominator_NL) * norm1 * norm2)')
nonlinearcorrelation = ne.evaluate('exp(numerator_NL/denominator_NL - log_norm)')
@@ -742,7 +900,7 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
self._II_deltaxi_xaTx *= np.array([coeffzp1xa * _coeffTx_units]).T
- if (User_Parameters.FLAG_DO_DENS_NL):
+ if (UserParams.FLAG_DO_DENS_NL):
D_coeffR2Tx = coeffR2Tx.reshape(1, *coeffR2Tx.shape, 1)
D_coeffzp2Tx = coeffzp2Tx.flatten().reshape(1, *coeffzp2Tx.flatten().shape, 1)
DDgammaR2 = np.copy(DDgammaR1)
@@ -750,7 +908,7 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
D_growthRmatrix = growthRmatrix[:,0].reshape(*growthRmatrix[:,0].shape, 1, 1, 1)
D_corrdNL = corrdNLBIG.squeeze()[0].reshape(1, 1, *corrdNLBIG.squeeze()[0].shape)
- if Astro_Parameters.quadratic_SFRD_lognormal:
+ if AstroParams.quadratic_SFRD_lognormal:
DDsigmaR2 = np.copy(DDsigmaR1)
D_sigmaR2 = DDsigmaR2.reshape(1, *DDsigmaR2.shape , 1)
@@ -762,7 +920,7 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
denominator_NL = ne.evaluate('1. - 2 * D_gammaR2N*D_sigmaR2*D_sigmaR2')
- norm2 = ne.evaluate('exp(D_gammaR2 * D_gammaR2 * D_sigmaR2* D_sigmaR2 * D_gammaR2 * D_gammaR2 * D_sigmaR2* D_sigmaR2 / (2 - 4 * D_gammaR2N*D_sigmaR2*D_sigmaR2)) / sqrt(1 - 2 * D_gammaR2N*D_sigmaR2*D_sigmaR2)')
+ norm2 = ne.evaluate('exp(D_gammaR2 * D_gammaR2 * D_sigmaR2* D_sigmaR2 * D_gammaR2 * D_gammaR2 * D_sigmaR2* D_sigmaR2 / (2 - 4 * D_gammaR2N*D_sigmaR2*D_sigmaR2)) / sqrt(1 - 2 * D_gammaR2N*D_sigmaR2*D_sigmaR2)')
log_norm = ne.evaluate('log(sqrt(denominator_NL) * norm2)')
nonlinearcorrelation = ne.evaluate('exp(numerator_NL/denominator_NL - log_norm)')
@@ -781,38 +939,43 @@ def get_all_corrs_II(self, Astro_Parameters, User_Parameters, Cosmo_Parameters,
return 1
- def get_all_corrs_IIxIII(self, User_Parameters, Cosmo_Parameters, Correlations, T21_coefficients):
- "Returns the Pop IIxIII cross-correlation function of all observables at each z in zintegral"
- #HAC: I deleted the bubbles and EoR part, to be done later.....
- #_iRnonlinear = np.arange(Cosmo_Parameters.indexminNL,Cosmo_Parameters.indexmaxNL)
+ def get_all_corrs_IIxIII(self, CosmoParams, T21coeffs):
+ """
+ Computes the Pop IIxIII cross correlation functions across z and R.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ T21coeffs : T21coeffs class
- zGreaterMatrix100 = np.copy(T21_coefficients.zGreaterMatrix)
- zGreaterMatrix100[np.isnan(zGreaterMatrix100)] = 100
+ Returns
+ ----------
+ Attributes stored in Power_Spectra
- _iRnonlinear = np.arange(Cosmo_Parameters.indexmaxNL)
- corrdNL = Correlations.xi_RR_CF[np.ix_(_iRnonlinear,_iRnonlinear)]
- #for Rijkl', gammamatrix_R1II_R1III, corrdNL, optimize = True) #same thing as gammamatrixR1R1 * corrdNL but faster
expGammaCorrMinusLinear = ne.evaluate('exp(gammaTimesCorrdNL) - 1 - gammaTimesCorrdNL')
@@ -830,8 +993,8 @@ def get_all_corrs_IIxIII(self, User_Parameters, Cosmo_Parameters, Correlations,
gammamatrix_R1II_R2III = gammaR1_II.reshape(*gammaR1_II.shape, 1, 1) * gammaR2_III.reshape(1, 1, *gammaR2_III.shape)
gammamatrix_R1III_R2II = gammaR1_III.reshape(*gammaR1_III.shape, 1, 1) * gammaR2_II.reshape(1, 1, *gammaR2_II.shape)
- coeffzp1Tx = np.copy(T21_coefficients.coeff1Xzp).reshape(*T21_coefficients.coeff1Xzp.shape, 1, 1, 1)
- coeffzp2Tx = np.copy(T21_coefficients.coeff1Xzp).reshape(1, 1, *T21_coefficients.coeff1Xzp.shape, 1)
+ coeffzp1Tx = np.copy(T21coeffs.coeff1Xzp).reshape(*T21coeffs.coeff1Xzp.shape, 1, 1, 1)
+ coeffzp2Tx = np.copy(T21coeffs.coeff1Xzp).reshape(1, 1, *T21coeffs.coeff1Xzp.shape, 1)
coeffR2Tx_II = np.copy(coeffR1Tx_II)
coeffR2Tx_III = np.copy(coeffR1Tx_III)
@@ -852,7 +1015,7 @@ def get_all_corrs_IIxIII(self, User_Parameters, Cosmo_Parameters, Correlations,
_IIxIII_deltaxi_xaTx2 = np.zeros_like(self._IIxIII_deltaxi_xa)
corrdNLBIG = corrdNL[:,:, np.newaxis, :,:] #dimensions zp1, R1, zp2, R2, and r, the last of which will be looped over below
- for ir in range(len(T21_coefficients.Rtabsmoo)):
+ for ir in range(len(CosmoParams._Rtabsmoo)):
corrdNL = corrdNLBIG[:,:,:,:,ir]
#HAC: Computations using ne.evaluate(...) use numexpr, which speeds up computations of massive numpy arrays
@@ -894,11 +1057,26 @@ def get_all_corrs_IIxIII(self, User_Parameters, Cosmo_Parameters, Correlations,
def get_xi_Sum_2ExpEta(self, xiEta, etaCoeff1, etaCoeff2):
- # Computes the correlation function of the VCB portion of the SFRD, expressed using sums of two exponentials
- # if rho(z1, x1) / rhobar = Ae^-b tilde(eta) + Ce^-d tilde(eta)
- # and rho(z2, x2) / rhobar = Fe^-g tilde(eta) + He^-k tilde(eta)
- # then this computes -
- # Refer to eq. A12 in 2407.18294 for more details
+ """
+ Computes the correlation function of the VCB portion of the SFRD, expressed using sums of two exponentials
+ if rho(z1, x1) / rhobar = Ae^-b tilde(eta) + Ce^-d tilde(eta) and rho(z2, x2) / rhobar = Fe^-g tilde(eta) + He^-k tilde(eta)
+ Then this computes -
+ Refer to eq. A12 in 2407.18294 for more details
+
+ Parameters
+ ----------
+ xiEta: matrix
+ Matrix of Eta correlation function. Dimension (corrEtaNL)
+ etaCoeff1: matrix
+ Stored Eta parameters in T21coeffs.vcb_expFitParams. Dimension (vcbCoeffsR1)
+ etaCoeff2: matrix
+ Stored Eta parameters in T21coeffs.vcb_expFitParams. Dimension (vcbCoeffsR2)
+
+ Returns
+ ----------
+ xiTotal: matrix
+ Total - power spectra
+ """
aa, bb, cc, dd = etaCoeff1
ff, gg, hh, kk = etaCoeff2
@@ -922,47 +1100,54 @@ def get_xi_Sum_2ExpEta(self, xiEta, etaCoeff1, etaCoeff2):
return xiTotal
- def get_all_corrs_III(self, User_Parameters, Cosmo_Parameters, Correlations, T21_coefficients):
- "Returns the Pop III components of the correlation functions of all observables at each z in zintegral"
- #HAC: I deleted the bubbles and EoR part, to be done later.....
- #_iRnonlinear = np.arange(Cosmo_Parameters.indexminNL,Cosmo_Parameters.indexmaxNL)
- zGreaterMatrix100 = np.copy(T21_coefficients.zGreaterMatrix)
- zGreaterMatrix100[np.isnan(zGreaterMatrix100)] = 100
+ def get_all_corrs_III(self, UserParams, CosmoParams, T21coeffs):
+ """
+ Computes the Pop III correlation functions across z and R.
+
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+ T21coeffs : T21coeffs class
- _iRnonlinear = np.arange(Cosmo_Parameters.indexmaxNL) #for Rijkl', gammamatrixR1R1, corrdNL, optimize = True) #same thing as gammamatrixR1R1 * corrdNL but faster
expGammaCorr = ne.evaluate('exp(gammaCorrdNL) - 1') # equivalent to np.exp(gammaTimesCorrdNL)-1.0
- if Cosmo_Parameters.USE_RELATIVE_VELOCITIES == True:
+ if CosmoParams.USE_RELATIVE_VELOCITIES == True:
etaCorr_xa = self.get_xi_Sum_2ExpEta(corrEtaNL, vcbCoeffsR1, vcbCoeffsR2)
totalCorr = ne.evaluate('expGammaCorr * etaCorr_xa + expGammaCorr + etaCorr_xa - gammaCorrdNL') ###TO DO (linearized VCB flucts): - etaCorr_xa_lin #note that the Taylor expansion of the cross-term is 0 to linear order
else:
@@ -971,7 +1156,7 @@ def get_all_corrs_III(self, User_Parameters, Cosmo_Parameters, Correlations, T21
self._III_deltaxi_xa = np.einsum('ijkl->il', coeffmatrixxa * totalCorr , optimize = True) # equivalent to self._III_deltaxi_xa = np.sum(coeffmatrixxa * ((np.exp(gammaTimesCorrdNL)-1.0) - gammaTimesCorrdNL), axis = (1,2))
self._III_deltaxi_xa *= np.array([coeffzp1xa]).T**2 #brings it to xa units
- if (User_Parameters.FLAG_DO_DENS_NL): #no velocity contribution to density
+ if (UserParams.FLAG_DO_DENS_NL): #no velocity contribution to density
D_coeffR1xa = coeffR1xa.reshape(*coeffR1xa.shape, 1)
D_gammaR1 = gammaR1.reshape(*gammaR1.shape , 1)
D_growthRmatrix = growthRmatrix[:,:1].reshape(*growthRmatrix[:,:1].shape, 1)
@@ -985,8 +1170,8 @@ def get_all_corrs_III(self, User_Parameters, Cosmo_Parameters, Correlations, T21
gammaR2 = np.copy(gammaR1) #already has growth factor in this
gammamatrixR1R2 = gammaR1.reshape(*gammaR1.shape, 1, 1) * gammaR2.reshape(1, 1, *gammaR2.shape)
- coeffzp1Tx = np.copy(T21_coefficients.coeff1Xzp).reshape(*T21_coefficients.coeff1Xzp.shape, 1, 1, 1)
- coeffzp2Tx = np.copy(T21_coefficients.coeff1Xzp).reshape(1, 1, *T21_coefficients.coeff1Xzp.shape, 1)
+ coeffzp1Tx = np.copy(T21coeffs.coeff1Xzp).reshape(*T21coeffs.coeff1Xzp.shape, 1, 1, 1)
+ coeffzp2Tx = np.copy(T21coeffs.coeff1Xzp).reshape(1, 1, *T21coeffs.coeff1Xzp.shape, 1)
coeffR2Tx = np.copy(coeffR1Tx)
coeffmatrixTxTx = coeffR1Tx.reshape(*coeffR1Tx.shape, 1, 1) * coeffR2Tx.reshape(1, 1, *coeffR2Tx.shape)
coeffmatrixxaTx = coeffR1xa.reshape(*coeffR1xa.shape, 1, 1) * coeffR2Tx.reshape(1, 1, *coeffR2Tx.shape)
@@ -1003,14 +1188,14 @@ def get_all_corrs_III(self, User_Parameters, Cosmo_Parameters, Correlations, T21
self._III_deltaxi_xaTx = np.zeros_like(self._III_deltaxi_xa)
self._III_deltaxi_dTx = np.zeros_like(self._III_deltaxi_xa)
- for ir in range(len(T21_coefficients.Rtabsmoo)):
+ for ir in range(len(CosmoParams._Rtabsmoo)):
corrdNL = corrdNLBIG[:,:,:,:,ir]
corrEtaNL = corrEtaNLBIG[:,:,:,:,ir]
gammaCorrdNL = ne.evaluate('gammamatrixR1R2 * corrdNL')
expGammaCorrdNL = ne.evaluate('exp(gammaCorrdNL) - 1')
- if Cosmo_Parameters.USE_RELATIVE_VELOCITIES == True:
+ if CosmoParams.USE_RELATIVE_VELOCITIES == True:
etaCorr_Tx = self.get_xi_Sum_2ExpEta(corrEtaNL, vcbCoeffsR1, vcbCoeffsR2)
totalCorr = ne.evaluate('expGammaCorrdNL * etaCorr_Tx + expGammaCorrdNL + etaCorr_Tx - gammaCorrdNL') ###TO DO (linearized VCB flucts): - etaCorr_xa_lin #note that the Taylor expansion of the cross-term is 0 to linear order
else:
@@ -1029,7 +1214,7 @@ def get_all_corrs_III(self, User_Parameters, Cosmo_Parameters, Correlations, T21
deltaXiXaTxAddend = np.cumsum(deltaXiXaTxAddend[::-1], axis = 0)[::-1]
self._III_deltaxi_xaTx[:, ir] = np.einsum('ii->i', deltaXiXaTxAddend, optimize = True)
- if (User_Parameters.FLAG_DO_DENS_NL): #no velocity contribution to density
+ if (UserParams.FLAG_DO_DENS_NL): #no velocity contribution to density
D_coeffR2Tx = coeffR2Tx.reshape(1, *coeffR2Tx.shape, 1)
D_coeffzp2Tx = coeffzp2Tx.flatten().reshape(1, *coeffzp2Tx.flatten().shape, 1)
D_gammaR2 = gammaR2.reshape(1, *gammaR2.shape , 1)
@@ -1048,299 +1233,4 @@ def get_all_corrs_III(self, User_Parameters, Cosmo_Parameters, Correlations, T21
self._III_deltaxi_xaTx *= np.array([coeffzp1xa * _coeffTx_units]).T
return 1
-
-
- def get_list_PS(self, xi_list, zlisttoconvert):
- "Returns the power spectrum given a list of CFs (xi_list) evaluated at z=zlisttoconvert as input"
-
- _Pk_list = []
-
- for izp,zp in enumerate(zlisttoconvert):
-
- _kzp, _Pkzp = self.get_Pk_from_xi(self._rs_input_mcfit,xi_list[izp])
- _Pk_list.append(_Pkzp)
- #can ignore _kzp, it's the same as klist_PS above by construction
-
-
- return np.array(_Pk_list)
-
-
- def get_Pk_from_xi(self, rsinput, xiinput):
- "Generic Fourier Transform, returns Pk from an input Corr Func xi. kPf should be the same as _klistCF"
-
- kPf, Pf = mcfit.xi2P(rsinput, l=0, lowring=True)(xiinput, extrap=False)
-
- return kPf, Pf
-
-
-
-# Below is the old get_all_corrs function for reference. It has some EoR bubbles functions that are incomplete (I think)
-#def get_all_corrs(self, User_Parameters, Cosmo_Parameters, Correlations, T21_coefficients):
-# "Returns the correlation function of all observable at each z in zintegral"
-#
-# #_iRnonlinear = np.arange(Cosmo_Parameters.indexminNL,Cosmo_Parameters.indexmaxNL)
-# _iRnonlinear = np.arange(Cosmo_Parameters.indexmaxNL)
-# corrdNL = Correlations.xi_RR_CF[np.ix_(_iRnonlinear,_iRnonlinear)]
-#
-# #for R= 0 and _indexRbub < len(_iRnonlinear)
-# #all these things have to be true for us to run the nonlinear+bubble part
-#
-# if(_flag_doEoRNL):
-# _eminusQstar = np.exp(-T21_coefficients.Qstar[izp1])
-# gammaeffxHI = -T21_coefficients.Qstar[izp1] * self.bias_bub_avg[izp1] * growthRlist1[0] #effective bias of the xion term. includes growth
-#
-# self._deltaxi_xaxi[izp1] = np.sum(coeffR1xa * ((np.exp(gammaR1 * gammaeffxHI * corr_deltaR1R2z0[:,_indexRbub])-1.0) - gammaR1 * gammaeffxHI * corr_deltaR1R2z0[:,_indexRbub]) , axis=(1))
-# self._deltaxi_xaxi[izp1] *= coeffzp1xa * _eminusQstar #brings it to xa units
-#
-# self._deltaxi_dxi[izp1] = (1.0 - np.exp(gammaeffxHI * growthRlist1[0] * corr_deltaR1R2z0[:,0,_indexRbub]) ) - gammaeffxHI * growthRlist1[0] * corr_deltaR1R2z0[:,0,_indexRbub]
-# self._deltaxi_dxi[izp1] *= _eminusQstar
-#
-# #for autocorrelation we have a density and a bubble/random term. first density
-# self._deltaxi_xi[izp1] = (np.exp(-2.0 * gammaeffxHI * growthRlist1[0] * corr_deltaR1R2z0[:,_indexRbub,_indexRbub]) -1.0) - (-2.0) * gammaeffxHI * growthRlist1[0] * corr_deltaR1R2z0[:,_indexRbub,_indexRbub]
-# #plus the bubble part, fully nonlinear, no "correction wrt linear"
-# self._deltaxi_xi[izp1] += (np.exp(self.Qo_tab[izp1]) - 1.0)
-#
-# self._deltaxi_xi[izp1] *= _eminusQstar**2
-#
-#
-# for izp2,zp2 in reversed(list(enumerate(T21_coefficients.zintegral))): #double loop because nonlocal in time sum.
-#
-# _factorzp1equalzp2 = 2.0 #factor for 2 or 1 depending on whether they are the same for the sum below
-# if (izp2 < izp1): #sum only for z >= zp1, not below
-# continue
-# elif (izp2 == izp1):
-# _factorzp1equalzp2 = 1.0
-#
-#
-# coeffzp2Tx = T21_coefficients.coeff1Xzp[izp2] #inside zp2 it's always Tx since it's the nonlocal-in-time one
-# zpRlist2 = T21_coefficients.ztabRsmoo[izp2,_iRnonlinear]
-# growthRlist2 = cosmology.growth(Cosmo_Parameters,zpRlist2)
-#
-# gammaR2 = T21_coefficients.gamma_index2D[izp2,_iRnonlinear] * growthRlist2
-# gammamatrixR1R2 = np.outer(gammaR1,gammaR2)
-#
-#
-# coeffR2Tx = T21_coefficients.coeff2XzpRR[izp2,_iRnonlinear]
-# coeffmatrixTxTx = np.outer(coeffR1Tx,coeffR2Tx)
-# coeffmatrixxaTx = np.outer(coeffR1xa,coeffR2Tx)
-#
-# self._deltaxi_Tx[izp1] += _factorzp1equalzp2 * coeffzp1Tx * coeffzp2Tx * np.sum(coeffmatrixTxTx * ((np.exp(gammamatrixR1R2 * corr_deltaR1R2z0)-1.0) - gammamatrixR1R2 * corr_deltaR1R2z0) , axis=(1,2))
-#
-# self._deltaxi_xaTx[izp1] += coeffzp2Tx * np.sum(coeffmatrixxaTx * ((np.exp(gammamatrixR1R2 * corr_deltaR1R2z0)-1.0) - gammamatrixR1R2 * corr_deltaR1R2z0) , axis=(1,2))
-#
-# if(User_Parameters.FLAG_DO_DENS_NL):
-# self._deltaxi_dTx[izp1] += coeffzp2Tx * np.sum(coeffR2Tx * ((np.exp(gammaR2* growthRlist1[0] * corr_deltaR1R2z0[:,0])-1.0) - gammaR2* growthRlist1[0] * corr_deltaR1R2z0[:,0]) , axis=(1))
-#
-# if(_flag_doEoRNL):
-# self._deltaxi_Txxi[izp1] += coeffzp2Tx * np.sum(coeffR2Tx * ((np.exp(gammaR2 * gammaeffxHI * corr_deltaR1R2z0[:,_indexRbub])-1.0) - gammaR2 * gammaeffxHI * corr_deltaR1R2z0[:,_indexRbub]) , axis=(1))
-#
-#
-# self._deltaxi_xaTx[izp1]*= coeffzp1xa
-# self._deltaxi_xaTx[izp1]*=_coeffTx_units[izp1]
-#
-# if(User_Parameters.FLAG_DO_DENS_NL):
-# self._deltaxi_dTx[izp1]*=_coeffTx_units[izp1]
-#
-# if(_flag_doEoRNL):
-# self._deltaxi_Txxi[izp1]*=_coeffTx_units[izp1] * _eminusQstar
-#
-#
-#
-# self._deltaxi_Tx=(self._deltaxi_Tx.T*_coeffTx_units**2).T #we cannot easily do this in the loop because it sums over previous ones
-#
-# return 1
-#
-# def calculate_barrier(self, Cosmo_Parameters, T21_coefficients):
-# "Caclulate the barrier B(z, sigmaR) that the density \delta has to cross to ionize"
-#
-# self.Barrier0list = np.zeros_like(T21_coefficients.zintegral)
-# self.Barrier1list = np.zeros_like(T21_coefficients.zintegral)
-#
-# sigmaminsqlist = (T21_coefficients.sigmaMatom * self._lingrowthd/self._lingrowthd[0])**2
-# sigmapivotsqlist = (T21_coefficients.sigmaMpivot * self._lingrowthd/self._lingrowthd[0])**2
-# #notice sigmaMatom depends on z and sigmaMpivot doesn't. For now at least. Code doesn't care since _lingrowthd does depend on z anyway
-#
-#
-# sigmaRref = np.sqrt(sigmaminsqlist/20.)
-# #pick this one for reference to take d/dsigmaR^2
-#
-# alphaeff = T21_coefficients._alphaeff #note that if alpha_eff = 0 you recover erfc. For negative it can behave weird so beware (for instance voids reionize first. Not physical)
-#
-# plindex = -T21_coefficients.dlogMdlogsigma
-# #M~sigma^-plindex
-#
-# totalindex = plindex * alphaeff
-# sindex = 1./2. + totalindex
-#
-# for izp, zp in enumerate(T21_coefficients.zintegral):
-#
-# if zp>constants.ZMAX_Bubbles:
-# continue
-#
-# _invQbar = 1.0/T21_coefficients.Qion_avg[izp] #we need Nion/ > 1/invQbar to ionize the region. larger delta at higher z
-#
-#
-#
-# dtab = np.linspace(-3.0 * sigmaRref[izp] , 3.0 * sigmaRref[izp] , 99)
-# dtabhi = np.linspace(3.3 * sigmaRref[izp], 1.5, 30)
-# dtab = np.append(dtab, dtabhi)
-#
-# dtildetabsq = (constants.delta_crit_ST - dtab)**2
-#
-#
-# tabsigmasqit = [0.8*sigmaRref[izp]**2, 1.4*sigmaRref[izp]**2] #to get derivatives wrt sigma^2
-#
-# barrier = np.zeros_like(tabsigmasqit)
-#
-# for isigma, sigmaRRsq in enumerate(tabsigmasqit):
-#
-# mumintildesq = dtildetabsq/(sigmaminsqlist[izp] - sigmaRRsq)
-# mupivottildesq = dtildetabsq/sigmapivotsqlist[izp]
-#
-#
-# NionEPS = pow(dtildetabsq, - totalindex) * (gammaincc(sindex,mumintildesq/2.0) - gammaincc(sindex,mupivottildesq/2.0))
-#
-# Probdtab = np.exp(-dtab**2/sigmaRRsq/2.0)
-#
-# norm = np.trapezoid(NionEPS * Probdtab, dtab)
-# NionEPS/=norm
-#
-# bindex = min(range(len(NionEPS)), key=lambda i: abs(NionEPS[i]-_invQbar))
-#
-# barrier[isigma] = dtab[bindex]
-#
-# self.Barrier0list[izp] = np.sum(barrier)/len(barrier) #sigma-indep
-# self.Barrier1list[izp] = (barrier[-1] - barrier[0])/(tabsigmasqit[-1] - tabsigmasqit[0]) #linear in sigmaR^2
-#
-# def get_bubbles(self, Cosmo_Parameters, Correlations, T21_coefficients):
-# "Returns the Bubble mass function for EoR"
-#
-#
-# _Rtab = T21_coefficients.Rtabsmoo
-# _rhob0 = cosmology.rho_baryon(Cosmo_Parameters, 0.)
-# _Mtab = _rhob0 * 4.0 * np.pi * _Rtab**3/3.0 #at z=0 because comoving
-# _dMdR = _rhob0 * 4.0 * np.pi * _Rtab**2 #at z=0 because comoving
-# _dlogMdlogR = 3.0
-# _dlog_Mtab = _dlogMdlogR * T21_coefficients.dlogRR
-#
-#
-# self.BMF_array = np.zeros_like(T21_coefficients.gamma_Niondot_index2D)
-# #bubble mass function, dn/dm in 1/cMpc^3/Msun
-#
-# self.Qo_tab = np.zeros_like(self.BMF_array)
-# #Q_overlap, integral of [BMF * Voverlap(r)] at _Rtab
-# _Voverlap = np.array([[Voverlap(Rbb, rr) for Rbb in _Rtab] for rr in _Rtab])
-# #index is [ir, iRb]
-#
-#
-# self.Q_infer_BMF = np.zeros(T21_coefficients.Nzintegral)
-#
-#
-# self.Rbub_star = np.zeros(T21_coefficients.Nzintegral) #peak of BMF
-# self._Rbub_star_index = np.zeros(T21_coefficients.Nzintegral, dtype=int) #its index in Rsmoo
-# self.bias_bub_avg = np.zeros(T21_coefficients.Nzintegral) #avg (mass-weighted) bias
-#
-#
-# for izp, zp in enumerate(T21_coefficients.zintegral):
-#
-# if (zp > constants.ZMAX_Bubbles or T21_coefficients.Qion_avg[izp] >= 1.0): #only do below a threshold and before EoR is complete to avoid numerical noise
-# continue
-#
-# sigmaofRtab = T21_coefficients.sigmaofRtab[izp]
-# logsigmaoflogR_f = UnivariateSpline(np.log(_Rtab),np.log(sigmaofRtab) )
-# dlogsigmadlogR_f = logsigmaoflogR_f.derivative()
-# dlogsigmadlogRtab = dlogsigmadlogR_f(np.log(_Rtab) )
-#
-#
-#
-# B0 = self.Barrier0list[izp] #Fit is Barrier = B0 + B1 sigma^2
-# B1 = self.Barrier1list[izp]
-# Btab = B0 + B1 * sigmaofRtab**2
-#
-# dlogsigmadlogMtab = dlogsigmadlogRtab / _dlogMdlogR
-#
-# self.BMF_array[izp] = np.sqrt(2.0/np.pi) * _rhob0/(_Mtab**2) * np.abs(dlogsigmadlogMtab) * B0/sigmaofRtab * np.exp(-Btab**2/(2.0 * sigmaofRtab**2))
-#
-#
-# self.Q_infer_BMF[izp] = np.sum(self.BMF_array[izp] * _Mtab/_rhob0 * _Mtab)*_dlog_Mtab
-#
-#
-# self.BMF_array[izp] *= T21_coefficients.Qstar[izp]/self.Q_infer_BMF[izp] #renormalized now
-#
-# self._bias_bubbles_zp = 1.0 + B0**2/(Btab * sigmaofRtab**2) #Eulerian bias of a bubble of some mass/radius at zp
-#
-# self.bias_bub_avg[izp] = np.sum(self.BMF_array[izp] * self._bias_bubbles_zp * _Mtab/_rhob0 * _Mtab)*_dlog_Mtab/T21_coefficients.Qstar[izp]
-# #average bias
-#
-#
-# _dimlessBMF = _Mtab**2 * self.BMF_array[izp]
-# self._Rbub_star_index[izp] = max(range(len(_Mtab)), key=lambda i: _dimlessBMF[i])
-# self.Rbub_star[izp] = _Rtab[self._Rbub_star_index[izp]] #the maximum of the BMF
-#
-#
-# self.Qo_tab[izp] = np.array([np.sum(self.BMF_array[izp] * Vtab * _Mtab)*_dlog_Mtab for Vtab in _Voverlap])
-# self.Rbub_star = np.fmax(self.Rbub_star, 1e-3) #to avoid Nans in other functions
-#
-#
-# def Voverlap(Rb, r):
-# "Overlapping volume of two bubbles of radius Rb separated by r. From FZH04"
-# return ((4 * np.pi/3.0) * Rb**3 - np.pi * r * (Rb**2 - r**2/12.)) * np.heaviside( 2*Rb - r , 0.5)
+
\ No newline at end of file
diff --git a/zeus21/cosmology.py b/zeus21/cosmology.py
index c468dea..6b9a03a 100644
--- a/zeus21/cosmology.py
+++ b/zeus21/cosmology.py
@@ -1,302 +1,539 @@
"""
+Cosmology functions and helper tools related with cosmology.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
-Cosmology helper functions and other tools
+import numpy as np
+from scipy.interpolate import RegularGridInterpolator, interp1d
-Author: Julian B. Muñoz
-UT Austin and Harvard CfA - January 2023
+from . import constants
-Edited by Hector Afonso G. Cruz
-JHU - July 2024
-"""
+def time_at_redshift(ClassyCosmo,z):
+ """
+ Returns the age of the Universe (in Gyrs) corresponding to a given redshift.
+
+ Parameters
+ ----------
+ ClassyCosmo: zeus21.runclass class
+ Sets up Class cosmology.
+ z: float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Age of the Universe in Gyrs.
+ """
-import numpy as np
-from classy import Class
-from scipy.interpolate import RegularGridInterpolator
-from scipy.interpolate import interp1d
+ background = ClassyCosmo.get_background()
+ classy_t, classy_z = background['proper time [Gyr]'], background['z']
+ classy_tinterp = interp1d(classy_z, classy_t)
-import mcfit
+ return classy_tinterp(z)
-from . import constants
-from .inputs import Cosmo_Parameters, Cosmo_Parameters_Input
-from .correlations import Correlations
-def cosmo_wrapper(User_Parameters, Cosmo_Parameters_Input):
+def redshift_at_time(ClassyCosmo,t):
"""
- Wrapper function for all the cosmology. It takes Cosmo_Parameters_Input and returns:
- Cosmo_Parameters, Class_Cosmo, Correlations, HMF_interpolator
+ Returns the redshift corresponding to a given age of the Universe (in Gyrs).
+
+ Parameters
+ ----------
+ ClassyCosmo: zeus21.runclass class
+ Sets up Class cosmology.
+ t: float
+ Age in Gyrs.
+
+ Returns
+ -------
+ float
+ Redshift corresponding to the given age of the Universe.
"""
- ClassCosmo = Class()
- ClassCosmo.compute()
+ background = ClassyCosmo.get_background()
+ classy_t, classy_z = background['proper time [Gyr]'], background['z']
+ classy_tinterp = interp1d(classy_t, classy_z)
+
+ return classy_tinterp(t)
- ClassyCosmo = runclass(Cosmo_Parameters_Input)
- CosmoParams = Cosmo_Parameters(User_Parameters, Cosmo_Parameters_Input, ClassyCosmo)
- CorrFClass = Correlations(User_Parameters, CosmoParams, ClassyCosmo)
- HMFintclass = HMF_interpolator(User_Parameters,CosmoParams,ClassyCosmo)
- return CosmoParams, ClassyCosmo, CorrFClass, HMFintclass
+def Hub(CosmoParams, z):
+ """
+ Hubble parameter H(z).
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Hubble parameter H(z) in km/s/Mpc.
+ """
+ return CosmoParams.h_fid * 100 * np.sqrt(CosmoParams.OmegaM * pow(1+z,3.)+CosmoParams.OmegaR * pow(1+z,4.)+CosmoParams.OmegaL)
-def runclass(CosmologyIn):
- "Set up CLASS cosmology. Takes CosmologyIn class input and returns CLASS Cosmology object"
- ClassCosmo = Class()
- ClassCosmo.set({'omega_b': CosmologyIn.omegab,'omega_cdm': CosmologyIn.omegac,
- 'h': CosmologyIn.h_fid,'A_s': CosmologyIn.As,'n_s': CosmologyIn.ns,'tau_reio': CosmologyIn.tau_fid})
- ClassCosmo.set({'output':'mPk','lensing':'no','P_k_max_1/Mpc':CosmologyIn.kmax_CLASS, 'z_max_pk': CosmologyIn.zmax_CLASS}) ###HAC: add vTK to outputs
- ClassCosmo.set({'gauge':'synchronous'})
- #hfid = ClassCosmo.h() # get reduced Hubble for conversions to 1/Mpc
+def HubinvMpc(CosmoParams, z):
+ """
+ Converts Hubble parameter H(z) in inverse length units (1/Mpc).
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Hubble parameter H(z) in 1/Mpc.
+ """
- # and run it (see warmup for their doc)
- ClassCosmo.compute()
-
- ClassCosmo.pars['Flag_emulate_21cmfast'] = CosmologyIn.Flag_emulate_21cmfast
-
- ###HAC: Adding VCB feedback via a second run of CLASS:
- if CosmologyIn.USE_RELATIVE_VELOCITIES == True:
-
- kMAX_VCB = 50.0
- ###HAC: getting z_rec from first CLASS run
- z_rec = ClassCosmo.get_current_derived_parameters(['z_rec'])['z_rec']
- z_drag = ClassCosmo.get_current_derived_parameters(['z_d'])['z_d']
-
- ###HAC: Running CLASS a second time just to get velocity transfer functions at recombination
- ClassCosmoVCB = Class()
- ClassCosmoVCB.set({'omega_b': CosmologyIn.omegab,'omega_cdm': CosmologyIn.omegac,
- 'h': CosmologyIn.h_fid,'A_s': CosmologyIn.As,'n_s': CosmologyIn.ns,'tau_reio': CosmologyIn.tau_fid})
- ClassCosmoVCB.set({'output':'vTk'})
- ClassCosmoVCB.set({'P_k_max_1/Mpc':kMAX_VCB, 'z_max_pk':12000})
- ClassCosmoVCB.set({'gauge':'newtonian'})
- ClassCosmoVCB.compute()
- velTransFunc = ClassCosmoVCB.get_transfer(z_drag)
-
- kVel = velTransFunc['k (h/Mpc)'] * CosmologyIn.h_fid
- theta_b = velTransFunc['t_b']
- theta_c = velTransFunc['t_cdm']
-
- sigma_vcb = np.sqrt(np.trapezoid(CosmologyIn.As * (kVel/0.05)**(CosmologyIn.ns-1) /kVel * (theta_b - theta_c)**2/kVel**2, kVel)) * constants.c_kms
- ClassCosmo.pars['sigma_vcb'] = sigma_vcb
-
- ###HAC: now computing average velocity assuming a Maxwell-Boltzmann distribution of velocities
- velArr = np.geomspace(0.01, constants.c_kms, 1000) #in km/s
- vavgIntegrand = (3 / (2 * np.pi * sigma_vcb**2))**(3/2) * 4 * np.pi * velArr**2 * np.exp(-3 * velArr**2 / (2 * sigma_vcb**2))
- ClassCosmo.pars['v_avg'] = np.trapezoid(vavgIntegrand * velArr, velArr)
-
- ###HAC: Computing Vcb Power Spectrum
- ClassCosmo.pars['k_vcb'] = kVel
- ClassCosmo.pars['theta_b'] = theta_b
- ClassCosmo.pars['theta_c'] = theta_c
- P_vcb = CosmologyIn.As * (kVel/0.05)**(CosmologyIn.ns-1) * (theta_b - theta_c)**2/kVel**2 * 2 * np.pi**2 / kVel**3
-
- p_vcb_intp = interp1d(np.log(kVel), P_vcb)
- ClassCosmo.pars['P_vcb'] = P_vcb
-
- ###HAC: Computing Vcb^2 (eta) Power Spectra
- kVelIntp = np.geomspace(1e-4, kMAX_VCB, 512)
- rVelIntp = 2 * np.pi / kVelIntp
-
- j0bessel = lambda x: np.sin(x)/x
- j2bessel = lambda x: (3 / x**2 - 1) * np.sin(x)/x - 3*np.cos(x)/x**2
-
- psi0 = 1 / 3 / (sigma_vcb/constants.c_kms)**2 * np.trapezoid(kVelIntp**2 / 2 / np.pi**2 * p_vcb_intp(np.log(kVelIntp)) * j0bessel(kVelIntp * np.transpose([rVelIntp])), kVelIntp, axis = 1)
- psi2 = -2 / 3 / (sigma_vcb/constants.c_kms)**2 * np.trapezoid(kVelIntp**2 / 2 / np.pi**2 * p_vcb_intp(np.log(kVelIntp)) * j2bessel(kVelIntp * np.transpose([rVelIntp])), kVelIntp, axis = 1)
-
- k_eta, P_eta = mcfit.xi2P(rVelIntp, l=0, lowring = True)((6 * psi0**2 + 3 * psi2**2), extrap = False)
-
- ClassCosmo.pars['k_eta'] = k_eta[P_eta > 0]
- ClassCosmo.pars['P_eta'] = P_eta[P_eta > 0]
-
-# print("HAC: Finished running CLASS a second time to get velocity transfer functions")
-
- else:
- ClassCosmo.pars['v_avg'] = 0.0
- ClassCosmo.pars['sigma_vcb'] = 1.0 #Avoids excess computation, but doesn't matter what value we set it to because the flag in inputs.py sets all feedback parameters to zero
-
- return ClassCosmo
+ return Hub(CosmoParams,z)/constants.c_kms
-def Hub(Cosmo_Parameters, z):
-#Hubble(z) in km/s/Mpc
- return Cosmo_Parameters.h_fid * 100 * np.sqrt(Cosmo_Parameters.OmegaM * pow(1+z,3.)+Cosmo_Parameters.OmegaR * pow(1+z,4.)+Cosmo_Parameters.OmegaL)
-def HubinvMpc(Cosmo_Parameters, z):
-#H(z) in 1/Mpc
- return Hub(Cosmo_Parameters,z)/constants.c_kms
+def Hubinvyr(CosmoParams, z):
+ """
+ Converts Hubble parameter H(z) in inverse time units (1/yr).
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Hubble parameter H(z) in 1/yr.
+ """
-def Hubinvyr(Cosmo_Parameters,z):
-#H(z) in 1/yr
- return Hub(Cosmo_Parameters,z)*constants.KmToMpc*constants.yrTos
+ return Hub(CosmoParams,z)*constants.KmToMpc*constants.yrTos
-def rho_baryon(Cosmo_Parameters,z):
-#\rho_baryon in Msun/Mpc^3 as a function of z
- return Cosmo_Parameters.OmegaB * Cosmo_Parameters.rhocrit * pow(1+z,3.0)
+
+def rho_baryon(CosmoParams, z):
+ """
+ Baryon density rho_baryon(z).
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Baryon density rho_baryon(z) in Msun/Mpc^3.
+ """
+
+ return CosmoParams.OmegaB * CosmoParams.rhocrit * pow(1+z,3.0)
-def n_H(Cosmo_Parameters, z):
-#density of hydrogen nuclei (neutral or ionized) in 1/cm^3
- return rho_baryon(Cosmo_Parameters, z) *( 1- Cosmo_Parameters.Y_He)/(constants.mH_GeV/constants.MsuntoGeV) / (constants.Mpctocm**3.0)
-#def n_baryon(Cosmo_Parameters, z):
-##density of baryons in 1/cm^3
-# return rho_baryon(Cosmo_Parameters, z) / Cosmo_Parameters.mu_baryon_Msun / (constants.Mpctocm**3.0)
+def n_H(CosmoParams, z):
+ """
+ Number density of hydrogen nuclei (including both neutral or ionized).
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Number density of hydrogen nuclei in 1/cm^3.
+ """
+ return rho_baryon(CosmoParams, z) *( 1- CosmoParams.Y_He)/(constants.mH_GeV/constants.MsuntoGeV) / (constants.Mpctocm**3.0)
def Tcmb(ClassCosmo, z):
+ """
+ CMB temperature T(z).
+
+ Parameters
+ ----------
+ ClassCosmo : ClassCosmo
+ CLASS cosmology object.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ CMB temperature T(z) in K.
+ """
+
T0CMB = ClassCosmo.T_cmb()
+
return T0CMB*(1+z)
+
def Tadiabatic(CosmoParams, z):
- "Returns T_adiabatic as a function of z from thermodynamics in CLASS"
+ """
+ Returns T_adiabatic as a function of z from thermodynamics in CLASS.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Adiabatic temperature T_adiabatic(z).
+ """
+
return CosmoParams.Tadiabaticint(z)
+
+
def xefid(CosmoParams, z):
- "Returns fiducial x_e(z) w/o any sources. Uses thermodynamics in CLASS for z>15, and fixed below to avoid the tanh approx."
+ """
+ Electron fraction x_e(z) without any sources.
+ Uses thermodynamics in CLASS for z>15, and fixed below to avoid the tanh approximation.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Fiducial x_e(z).
+ """
+
_zcutCLASSxe = 15.
_xecutCLASSxe = CosmoParams.xetanhint(_zcutCLASSxe)
+
return CosmoParams.xetanhint(z) * np.heaviside(z - _zcutCLASSxe, 0.5) + _xecutCLASSxe * np.heaviside(_zcutCLASSxe - z, 0.5)
+
def adiabatic_index(z):
- "Returns adiabatic index (delta_Tad/delta) as a function of z. Fit from 1506.04152. to ~3% on z = 6 − 50)."
+ """
+ Returns adiabatic index (delta_Tad/delta) as a function of z. Fit from 1506.04152. to ~3% on z = 6 − 50).
+
+ Parameters
+ ----------
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Adiabatic index (delta_Tad/delta).
+ """
+
return 0.58 - 0.005*(z-10.)
-def MhofRad(Cosmo_Parameters,R):
- #convert input Radius in Mpc comoving to Mass in Msun
- return Cosmo_Parameters.constRM *pow(R, 3.0)
+def MhofRad(CosmoParams, R):
+ """
+ Convert input comoving Radius to virial Mass.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ R : float
+ Comoving radius in cMpc.
+
+ Returns
+ -------
+ float
+ Mass in Msun.
+ """
+
+ return CosmoParams.constRM *pow(R, 3.0)
-def RadofMh(Cosmo_Parameters,M):
- #convert input M halo in Msun radius in cMpc
- return pow(M/Cosmo_Parameters.constRM, 1/3.0)
+def RadofMh(CosmoParams, M):
+ """
+ Convert input virial Mass to comoving Radius.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ M : float
+ Virial mass in Msun.
+
+ Returns
+ -------
+ float
+ Comoving radius in cMpc.
+ """
+
+ return pow(M/CosmoParams.constRM, 1/3.0)
-def ST_HMF(Cosmo_Parameters, Mass, sigmaM, dsigmadM):
- A_ST = Cosmo_Parameters.Amp_ST
- a_ST = Cosmo_Parameters.a_ST
- p_ST = Cosmo_Parameters.p_ST
- delta_crit_ST = Cosmo_Parameters.delta_crit_ST
+def ST_HMF(CosmoParams, Mass, sigmaM, dsigmadM):
+ """
+ Sheth-Tormen Halo Mass Function.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ Mass : float
+ Halo mass in Msun.
+ sigmaM : float
+ Variance of the density field on the scale of the halo mass.
+ dsigmadM : float
+ Derivative of sigmaM with respect to Mass.
+
+ Returns
+ -------
+ float
+ HMF value in 1/Mpc^3/Msun.
+ """
+
+ A_ST = CosmoParams.Amp_ST
+ a_ST = CosmoParams.a_ST
+ p_ST = CosmoParams.p_ST
+ delta_crit_ST = CosmoParams.delta_crit_ST
nutilde = np.sqrt(a_ST) * delta_crit_ST/sigmaM
- return -A_ST * np.sqrt(2./np.pi) * nutilde * (1. + nutilde**(-2.0*p_ST)) * np.exp(-nutilde**2/2.0) * (Cosmo_Parameters.rho_M0 / (Mass * sigmaM)) * dsigmadM
+ return -A_ST * np.sqrt(2./np.pi) * nutilde * (1. + nutilde**(-2.0*p_ST)) * np.exp(-nutilde**2/2.0) * (CosmoParams.rho_M0 / (Mass * sigmaM)) * dsigmadM
-def Tink_HMF(Cosmo_Parameters, Mass, sigmaM, dsigmadM,z):
- #Tinker08 form of the HMF. All in physical (no h) units. Form from App.A of Yung+23 (2309.14408)
- f = f_GUREFT_physical(sigmaM,z)
- return f*(Cosmo_Parameters.rho_M0 / (Mass)) * np.abs(dsigmadM/sigmaM)
+def Tink_HMF(CosmoParams, Mass, sigmaM, dsigmadM, z):
+ """
+ Tinker 2008 Halo Mass Function.
+ All in physical (no h) units.
+ Form from App.A of Yung+23 (2309.14408).
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ Mass : float
+ Halo mass in Msun.
+ sigmaM : float
+ Variance of the density field on the scale of the halo mass at redshift z.
+ dsigmadM : float
+ Derivative of sigmaM with respect to Mass at redshift z.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ HMF value in 1/Mpc^3/Msun.
+ """
+
+ f = f_GUREFT_physical(sigmaM, z)
-def f_GUREFT_physical(sigma,z):
- #Fit in eq A2 in Yung+23 (2309.14408), fit to z<20 (Implementation thanks to Aaron Yung). Physical because no h.
- #sigma(M,z) is the input, no growth here bc we use class with full sigma evolution
+ return f*(CosmoParams.rho_M0 / (Mass)) * np.abs(dsigmadM/sigmaM)
+
+
+def f_GUREFT_physical(sigmaM, z):
+ """
+ Fit in eq A2 in Yung+23 (2309.14408) to z < 20.
+ Required by the Tinker 2008 HMF; all in physical units (no h).
+ Implementation thanks to Aaron Yung.
+
+ Parameters
+ ----------
+ sigmaM : float
+ Variance of the density field on the scale of the halo mass at redshift z.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ HMF value in 1/Mpc^3/Msun.
+ """
+
k = np.array([ 1.37657725e-01, -1.00382125e-02, 1.02963559e-03, 1.06641384e+00,
2.47557563e-02, -2.83342017e-03, 4.86693806e+00, 9.21235623e-02,
-1.42628278e-02, 1.19837952e+00, 1.42966892e-03, -3.30740460e-04])
+
A = lambda x: k[0] + k[1]*x + k[2]*(x**2)
a = lambda x: k[3] + k[4]*x + k[5]*(x**2)
b = lambda x: k[6] + k[7]*x + k[8]*(x**2)
c = lambda x: k[9] + k[10]*x + k[11]*(x**2)
- sig = sigma
+
#cap coefficients at z=20 to avoid extrapolation
zuse = np.fmin(z,20.0)
- return A(zuse) * (((sig/b(zuse))**(-a(zuse))) + 1.0 ) * np.exp(-c(zuse)/(sig**2))
-def PS_HMF_unnorm(Cosmo_Parameters, Mass, nu, dlogSdM):
- 'Returns the Press-Schechter HMF (unnormalized since we will take ratios), given a halo Mass [Msun], nu = delta_tilde/S_tilde, with delta_tilde = delta_crit - delta_R, and variance S = sigma(M)^2 - sigma(R)^2. Used for 21cmFAST mode.'
+ return A(zuse) * (((sigmaM/b(zuse))**(-a(zuse))) + 1.0 ) * np.exp(-c(zuse)/(sigmaM**2))
- return nu * np.exp(-Cosmo_Parameters.a_corr_EPS*nu**2/2.0) * dlogSdM* (1.0 / Mass)
- #written so that dsigmasq/dM appears directly, since that is not modified by EPS, whereas sigma_tot^2 = sigma^2(M) - sigma^2(R). The sigma in denominator will be sigma_tot
+def PS_HMF_unnorm(CosmoParams, Mass, nu, dlogSdM):
+ """
+ Unnormalized Press-Schechter HMF.
+ Used to emulate 21cmFAST.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters.
+ Mass : float
+ Halo mass in Msun.
+ nu : float
+ Peak height, defined as nu = delta_tilde/S_tilde, with delta_tilde = delta_crit - delta_R, and variance S = sigma(M)^2 - sigma(R)^2.
+ dlogSdM : float
+ Derivative of log(S) with respect to Mass, where S = sigma(M)^2 - sigma(R)^2.
+
+ Returns
+ -------
+ float
+ HMF value in 1/Mpc^3/Msun.
+ """
+
+ return nu * np.exp(-CosmoParams.a_corr_EPS*nu**2/2.0) * dlogSdM* (1.0 / Mass)
class HMF_interpolator:
- "Class that builds an interpolator of the HMF. Returns an interpolator"
+ """
+ Class that builds an interpolator of the HMF as function of the halo mass and redshift.
+
+ Parameters
+ ----------
- def __init__(self, User_Parameters, Cosmo_Parameters, ClassCosmo):
+ UserParams : UserParams
+ User parameters, used to set the resolution of the HMF table.
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the HMF table with CLASS.
+
+ Attributes
+ -------
+ HMF_int : RegularGridInterpolator
+ Interpolator for HMF value, takes (Mass, z) as arguments
+ sigma_int : RegularGridInterpolator
+ Interpolator for sigma value, takes (Mass, z) as arguments
+ sigmaR_int : RegularGridInterpolator
+ Interpolator for sigma(R) value, takes (R, z) as arguments
+ dsigmadM_int : RegularGridInterpolator
+ Interpolator for dsigma/dM value, takes (Mass, z) as arguments
+ """
- self._Mhmin = 1e5 #originally 1e5
- self._Mhmax = 1e14
- self._NMhs = np.floor(35*User_Parameters.precisionboost).astype(int)
- self.Mhtab = np.logspace(np.log10(self._Mhmin),np.log10(self._Mhmax),self._NMhs) # Halo mases in Msun
- self.RMhtab = RadofMh(Cosmo_Parameters, self.Mhtab)
+ def __init__(self, UserParams, CosmoParams):
- self.logtabMh = np.log(self.Mhtab)
+ self._Mhmin = CosmoParams._Mhmin # minimum halo mass in Msun
+ self._Mhmax = CosmoParams._Mhmax # maximum halo mass in Msun
+ self._NMhs = np.floor(35*UserParams.precisionboost).astype(int) # number of halo mass points in the table, set by precisionboost
+ self.Mhtab = np.logspace(np.log10(self._Mhmin),np.log10(self._Mhmax),self._NMhs) # halo mass table in Msun
+ self.logtabMh = np.log(self.Mhtab) # log of halo mass table, used for interpolation since the HMF varies more smoothly in log(M)
+
+ self.RMhtab = RadofMh(CosmoParams, self.Mhtab) # comoving radius corresponding to the halo mass table, in cMpc
- self._zmin=Cosmo_Parameters.zmin_CLASS
- self._zmax = Cosmo_Parameters.zmax_CLASS
- self._Nzs=np.floor(100*User_Parameters.precisionboost).astype(int)
- self.zHMFtab = np.linspace(self._zmin,self._zmax,self._Nzs)
+ self._zmin=CosmoParams.zmin_CLASS # minimum redshift for the HMF table, set by CLASS
+ self._zmax = CosmoParams.zmax_CLASS # maximum redshift for the HMF table, set by CLASS
+ self._Nzs=np.floor(100*UserParams.precisionboost).astype(int) # number of redshift points in the table, set by precisionboost. Note that the HMF is very steep at high z, so we need more points than for other tables to get good interpolation.
+ self.zHMFtab = np.linspace(self._zmin,self._zmax,self._Nzs) # redshift table for the HMF
- #check resolution
- if (Cosmo_Parameters.kmax_CLASS < 1.0/self.RMhtab[0]):
+ # check resolution: make sure that the kmax_CLASS is high enough to resolve the small scales corresponding to the smallest halos. If not, warn the user
+ if (CosmoParams.kmax_CLASS < 1.0/self.RMhtab[0]):
print('Warning! kmax_CLASS may be too small! Run CLASS with higher kmax')
- self.sigmaMhtab = np.array([[ClassCosmo.sigma(RR,zz) for zz in self.zHMFtab] for RR in self.RMhtab])
+ # sigma(M,z) table, computed from CLASS
+ self.sigmaMhtab = np.array([[CosmoParams.ClassCosmo.sigma(RR,zz) for zz in self.zHMFtab] for RR in self.RMhtab])
- self._depsM=0.01 #for derivatives, relative to M
- self.dsigmadMMhtab = np.array([[(ClassCosmo.sigma(RadofMh(Cosmo_Parameters, MM*(1+self._depsM)),zz)-ClassCosmo.sigma(RadofMh(Cosmo_Parameters, MM*(1-self._depsM)),zz))/(MM*2.0*self._depsM) for zz in self.zHMFtab] for MM in self.Mhtab])
+ # derivative of sigma with respect to M
+ self._depsM = 0.01 # step
+ self.dsigmadMMhtab = np.array([[(CosmoParams.ClassCosmo.sigma(RadofMh(CosmoParams, MM*(1+self._depsM)),zz)-CosmoParams.ClassCosmo.sigma(RadofMh(CosmoParams, MM*(1-self._depsM)),zz))/(MM*2.0*self._depsM) for zz in self.zHMFtab] for MM in self.Mhtab])
+ if(CosmoParams.Flag_emulate_21cmfast==True):
+ print('WARNING!' \
+ 'You set Flag_emulate_21cmfast == True.' \
+ 'HMF_interpolator applyies corrections to sigma(M) and growth(z) to match the 21cmFAST cosmology. ' \
+ 'These corrections are only valid for a Planck2018 cosmology, and may be different if you use a different cosmology.')
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- #ADJUST BY HAND adjust sigmas to match theirs, since the CLASS TF they use is at a fixed cosmology from 21cmvFAST but the input cosmology is different
- self.sigmaMhtab*=np.sqrt(0.975)#/0.9845
- self.dsigmadMMhtab*=np.sqrt(0.975)#/0.9845
+ # CORRECTION #1
+ # 21cmFAST uses a fixed cosmology to compute the transfer function, which is different from our input Planck2018 cosmology. This leads to a mismatch in sigma(M); to fix it, we adjust our sigma(M) in a redshift-independent way to match theirs
+ # NOTE! This factor should be corrected if your cosmology is not Planck2018
+ self.sigmaMhtab*=np.sqrt(0.975)
+ self.dsigmadMMhtab*=np.sqrt(0.975)
- #this correction is because 21cmFAST uses the dicke() function to compute growth, which is ~0.5% offset at high z. This offset makes our growth the same as dicke() for a Planck2018 cosmology. Has to be added separately to the growth(z) correction above since they come in different places
+ # CORRECTION #2
+ # 21cmFAST uses the dicke() function to compute growth, which is ~0.5% offset at high z. This offset makes our growth the same as dicke() for a Planck2018 cosmology
+ # NOTE! This factor should be corrected if your cosmology is not Planck2018
_offsetgrowthdicke21cmFAST = 1-0.000248*(self.zHMFtab-5.)
self.sigmaMhtab*=_offsetgrowthdicke21cmFAST
self.dsigmadMMhtab*=_offsetgrowthdicke21cmFAST
- #Note that these two changes may be different if away from Planck2018
-
-
self.HMFtab = np.zeros_like(self.sigmaMhtab)
-
-
-
-
+ # fill HMF table (Mh,z) using either ST or Tinker, depending on the choice in CosmoParams, using the sigma(M,z) and dsigma/dM(M,z) from CLASS.
for iM, MM in enumerate(self.Mhtab):
for iz, zz in enumerate(self.zHMFtab):
sigmaM = self.sigmaMhtab[iM,iz]
dsigmadM = self.dsigmadMMhtab[iM,iz]
- if(Cosmo_Parameters.HMF_CHOICE == 'ST'):
- self.HMFtab[iM,iz] = ST_HMF(Cosmo_Parameters, MM, sigmaM, dsigmadM)
- elif(Cosmo_Parameters.HMF_CHOICE == 'Yung'):
- self.HMFtab[iM,iz] = Tink_HMF(Cosmo_Parameters, MM, sigmaM, dsigmadM,zz)
+ if(CosmoParams.HMF_CHOICE == 'ST'):
+ self.HMFtab[iM,iz] = ST_HMF(CosmoParams, MM, sigmaM, dsigmadM)
+ elif(CosmoParams.HMF_CHOICE == 'Yung'):
+ self.HMFtab[iM,iz] = Tink_HMF(CosmoParams, MM, sigmaM, dsigmadM,zz)
else:
- print('ERROR, use a correct Cosmo_Parameters.HMF_CHOICE')
+ print('ERROR, use a correct CosmoParams.HMF_CHOICE')
self.HMFtab[iM,iz] = 0.0
-
-
-
-
- _HMFMIN = np.exp(-300.) #min HMF to avoid overflowing
+ # set min HMF to avoid overflowing
+ _HMFMIN = np.exp(-300.)
logHMF_ST_trim = self.HMFtab
logHMF_ST_trim[np.array(logHMF_ST_trim <= 0.)] = _HMFMIN
logHMF_ST_trim = np.log(logHMF_ST_trim)
-
+ # interpolator for log(HMF) as a function of log(Mh) and z, with bounds_error=False and fill_value=-inf to avoid extrapolation issues
self.fitMztab = [np.log(self.Mhtab), self.zHMFtab]
- self.logHMFint = RegularGridInterpolator(self.fitMztab, logHMF_ST_trim, bounds_error = False, fill_value = -np.inf) ###HAC: Changed to -np.inf so HMFint = exp(-np.inf)= zero to fix nans in sfrd.py
+ self.logHMFint = RegularGridInterpolator(self.fitMztab, logHMF_ST_trim, bounds_error = False, fill_value = -np.inf)
- self.sigmaintlog = RegularGridInterpolator(self.fitMztab, self.sigmaMhtab, bounds_error = False, fill_value = np.nan)# no need to log since it doesnt vary dramatically
+ # interpolator for sigma(M,z) as a function of log(Mh) and z, with bounds_error=False and fill_value=np.nan to avoid extrapolation issues
+ self.sigmaintlog = RegularGridInterpolator(self.fitMztab, self.sigmaMhtab, bounds_error = False, fill_value = np.nan)
+ # interpolator for dsigma/dM(M,z) as a function of log(Mh) and z, with bounds_error=False and fill_value=np.nan to avoid extrapolation issues
self.dsigmadMintlog = RegularGridInterpolator(self.fitMztab, self.dsigmadMMhtab, bounds_error = False, fill_value = np.nan)
-
- #also build an interpolator for sigma(R) of the R we integrate over (for CD and EoR). These R >> Rhalo typically, so need new table.
- self.sigmaofRtab = np.array([[ClassCosmo.sigma(RR,zz) for zz in self.zHMFtab] for RR in Cosmo_Parameters._Rtabsmoo])
- self.fitRztab = [np.log(Cosmo_Parameters._Rtabsmoo), self.zHMFtab]
- self.sigmaRintlog = RegularGridInterpolator(self.fitRztab, self.sigmaofRtab, bounds_error = False, fill_value = np.nan) #no need to log either
-
-
+ # interpolator for sigma(R); typically, R >> Rhalo, so we need a new table
+ self.sigmaofRtab = np.array([[CosmoParams.ClassCosmo.sigma(RR,zz) for zz in self.zHMFtab] for RR in CosmoParams._Rtabsmoo])
+ self.fitRztab = [np.log(CosmoParams._Rtabsmoo), self.zHMFtab]
+ self.sigmaRintlog = RegularGridInterpolator(self.fitRztab, self.sigmaofRtab, bounds_error = False, fill_value = np.nan)
def HMF_int(self, Mh, z):
- "Interpolator to find HMF(M,z), designed to take a single z but an array of Mh in Msun"
+ """
+ Interpolator to find HMF(M,z).
+
+ Parameters
+ ----------
+ Mh : float or array
+ Halo mass in Msun. Can be a single value or an array of values.
+ z : float
+
+ Returns
+ -------
+ float
+ Interpolator for HMF value, takes (Mass, z) as arguments.
+ """
+
_logMh = np.log(Mh)
logMhvec = np.asarray([_logMh]) if np.isscalar(_logMh) else np.asarray(_logMh)
@@ -305,72 +542,238 @@ def HMF_int(self, Mh, z):
return np.exp(self.logHMFint(inarray) )
+ def sigma_int(self, Mh, z):
+ """
+ Interpolator to find sigma(M,z).
+
+ Parameters
+ ----------
+ Mh : float or array
+ Halo mass in Msun. Can be a single value or an array of values.
+ z : float
+
+ Returns
+ -------
+ float
+ Interpolator for sigma value, takes (Mass, z) as arguments.
+ """
- def sigma_int(self,Mh,z):
- "Interpolator to find sigma(M,z), designed to take a single z but an array of Mh in Msun"
_logMh = np.log(Mh)
logMhvec = np.asarray([_logMh]) if np.isscalar(_logMh) else np.asarray(_logMh)
inarray = np.array([[LM,z] for LM in logMhvec])
+
return self.sigmaintlog(inarray)
- def sigmaR_int(self,RR,z):
- "Interpolator to find sigma(RR,z), designed to take a single z but an array of RR in cMpc"
+
+ def sigmaR_int(self, RR, z):
+ """
+ Interpolator to find sigma(R,z).
+
+ Parameters
+ ----------
+ RR : float or array
+ Comoving distance in Mpc. Can be a single value or an array of values.
+ z : float
+
+ Returns
+ -------
+ float
+ Interpolator for sigma value, takes (R, z) as arguments.
+ """
_logRR = np.log(RR)
logRRvec = np.asarray([_logRR]) if np.isscalar(_logRR) else np.asarray(_logRR)
inarray = np.array([[LR,z] for LR in logRRvec])
+
return self.sigmaRintlog(inarray)
- def dsigmadM_int(self,Mh,z):
- "Interpolator to find dsigma/dM(M,z), designed to take a single z but an array of Mh in Msun. Used in 21cmFAST mode"
+ def dsigmadM_int(self, Mh, z):
+ """
+ Interpolator to find dsigma/dM.
+
+ Parameters
+ ----------
+ Mh : float or array
+ Halo mass in Msun. Can be a single value or an array of values.
+ z : float
+
+ Returns
+ -------
+ float
+ Interpolator for dsigma/dM value, takes (Mass, z) as arguments.
+ """
+
_logMh = np.log(Mh)
logMhvec = np.asarray([_logMh]) if np.isscalar(_logMh) else np.asarray(_logMh)
inarray = np.array([[LM,z] for LM in logMhvec])
+
return self.dsigmadMintlog(inarray)
-def growth(Cosmo_Parameters, z):
- "Scale-independent growth factor, interpolated from CLASS"
+def growth(CosmoParams, z):
+ """
+ Interpolator to find the scale-independent growth factor.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the growth factor with CLASS.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Interpolator for the scale-independent growth factor, takes z as argument.
+ """
+
zlist = np.asarray([z]) if np.isscalar(z) else np.asarray(z)
- if (Cosmo_Parameters.Flag_emulate_21cmfast==True):
- _offsetgrowthdicke21cmFAST = 1-0.000248*(zlist-5.) #as in HMF, to fix growth. have to do it independently since it depends on z.
- return Cosmo_Parameters.growthint(zlist) * _offsetgrowthdicke21cmFAST
+ if (CosmoParams.Flag_emulate_21cmfast==True):
+ print('WARNING!' \
+ 'You set Flag_emulate_21cmfast == True.' \
+ 'growth() applyies corrections to match the 21cmFAST cosmology. ' \
+ 'These corrections are only valid for a Planck2018 cosmology, and may be different if you use a different cosmology.')
+
+ # 21cmFAST uses the dicke() function to compute growth, which is ~0.5% offset at high z. This offset makes our growth the same as dicke() for a Planck2018 cosmology
+ # NOTE! This factor should be corrected if your cosmology is not Planck2018
+ _offsetgrowthdicke21cmFAST = 1-0.000248*(zlist-5.)
+
+ return CosmoParams.growthint(zlist) * _offsetgrowthdicke21cmFAST
+
else:
- return Cosmo_Parameters.growthint(zlist)
+ return CosmoParams.growthint(zlist)
def dgrowth_dz(CosmoParams, z):
- "Derivative of growth factor growth() w.r.t. z"
+ """
+ Derivative of growth factor w.r.t. z.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the growth factor with CLASS.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ dgrowth/dz
+ """
+
zlist = np.asarray([z]) if np.isscalar(z) else np.asarray(z)
dzlist = zlist*0.001
+
return (growth(CosmoParams, z+dzlist)-growth(CosmoParams, z-dzlist))/(2.0*dzlist)
-def redshift_of_chi(CosmoParams, z):
- "Returns z(chi) for any input comoving distance from today chi in Mpc"
- return CosmoParams.zfofRint(z)
+def redshift_of_chi(CosmoParams, chi):
+ """
+ Redshift associated with the given comoving distance in the input cosmology.
+ This function is not used inside the code but is provided for users
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the growth factor with CLASS.
+ chi : float
+ Comoving distance from today in Mpc
+
+ Returns
+ -------
+ z : float
+ Redshift
+ """
+ return CosmoParams.zfofRint(chi)
-def T021(Cosmo_Parameters, z):
- "Prefactor in mK to T21 that only depends on cosmological parameters and z. Eg Eq.(21) in 2110.13919"
- return 34 * pow((1+z)/16.,0.5) * (Cosmo_Parameters.omegab/0.022) * pow(Cosmo_Parameters.omegam/0.14,-0.5)
+def chi_of_redshift(CosmoParams, z):
+ """
+ Comoving distance associated with given redshift in the input cosmology.
+ This function is not used inside the code but is provided for users
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the growth factor with CLASS.
+ z : float
+ Redshift
+
+ Returns
+ -------
+ chi : float
+ Comoving distance from today in Mpc
+ """
+
+ return CosmoParams.chiofzint(z)
+
+
+def T021(CosmoParams, z):
+ """
+ Prefactor in mK to T21 that only depends on cosmological parameters and z. See Eq.(21) in 2110.13919
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the growth factor with CLASS.
+ z : float
+ Redshift.
+
+ Returns
+ -------
+ float
+ Prefactor in mK to T21
+ """
+ return 34 * pow((1+z)/16.,0.5) * (CosmoParams.omegab/0.022) * pow(CosmoParams.omegam/0.14,-0.5)
-#UNUSED bias, just for reference
-def bias_ST(Cosmo_Parameters, sigmaM):
- # from https://arxiv.org/pdf/1007.4201.pdf Table 1
- a_ST = Cosmo_Parameters.a_ST
- p_ST = Cosmo_Parameters.p_ST
- delta_crit_ST = Cosmo_Parameters.delta_crit_ST
+
+def bias_ST(CosmoParams, sigmaM):
+ """
+ Bias of halos in the Sheth-Tormen model.
+ See https://arxiv.org/pdf/1007.4201.pdf Table 1
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the growth factor with CLASS.
+ sigmaM : float
+ Variance of the matter density field smoothed on a scale corresponding to the halo mass.
+
+ Returns
+ -------
+ float
+ Halo bias
+ """
+
+ a_ST = CosmoParams.a_ST
+ p_ST = CosmoParams.p_ST
+ delta_crit_ST = CosmoParams.delta_crit_ST
nu = delta_crit_ST/sigmaM
nutilde = np.sqrt(a_ST) * nu
return 1.0 + (nutilde**2 - 1.0 + 2. * p_ST/(1.0 + nutilde**(2. * p_ST) ) )/delta_crit_ST
-def bias_Tinker(Cosmo_Parameters, sigmaM):
- #from https://arxiv.org/pdf/1001.3162.pdf, Delta=200
- delta_crit_ST = Cosmo_Parameters.delta_crit_ST
+
+def bias_Tinker(CosmoParams, sigmaM):
+ """
+ Bias of halos in the Tinker model. See https://arxiv.org/pdf/1001.3162.pdf for Delta = 200
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams
+ Cosmological parameters, used to compute the growth factor with CLASS.
+ sigmaM : float
+ Variance of the matter density field smoothed on a scale corresponding to the halo mass.
+
+ Returns
+ -------
+ float
+ Halo bias
+ """
+
+ delta_crit_ST = CosmoParams.delta_crit_ST # critical density for collapse
nu = delta_crit_ST/sigmaM
#Tinker fit
@@ -385,29 +788,3 @@ def bias_Tinker(Cosmo_Parameters, sigmaM):
return 1.0 - _Abias*(nu**_abias/(nu**_abias + delta_crit_ST**_abias)) + _Bbias * nu**_bbias + _Cbias * nu**_cbias
-#UNUSED:
-# def interp2Dlinear_only_y(arrayxy, arrayz, x, y):
-# "2D interpolator where the x axis is assumed to be an array identical to the trained x. That is, an array of 1D linear interpolators. arrayxy is [x,y]. arrayz is result. x is the x input (=arrayxy[0]), and y the y input. Returns z result (array)"
-# if((x != arrayxy[0]).all()):
-# print('ERROR on interp2Dlinear_only_y, x need be the same in interp and input')
-# return -1
-# Ny = len(arrayxy[1])
-# ymin, ymax = arrayxy[1][[0,-1]]
-# if((y > ymax or y>> zeus21.User_Parameters(precisionboost=0.5)
Parameters can also be changed afterwards:
+
>>> UserParams = zeus21.User_Parameters()
+
>>> UserParams.precisionboost = 0.5
-
Parameters
----------
precisionboost: float
- Make integrals take more points for boost in precision, the baseline being 1.0.
- FLAG_FORCE_LINEAR_CF: int (0 or 1)
- 0 to do standard calculation, 1 to force linearization of correlation function.
+ Make integrals take more points for boost in precision. Default is 1.0.
+ dlogzint_target:
+ Target number of redshift bins for the redsfhit arrays in log space. Default is 0.02.
+ FLAG_FORCE_LINEAR_CF: bool
+ False to do standard calculation, True to force linearization of correlation function. Default is False.
MIN_R_NONLINEAR: float
- Minimum radius R/cMpc in which we start doing the nonlinear calculation.
- Below ~1 it will blow up because sigma > 1 eventually, and our exp(\delta) approximation breaks.
+ Minimum radius R/cMpc in which we start doing the nonlinear calculation. Default is 2.0.
+ Below ~1 it will blow up because sigma > 1 eventually, and our exp(delta) approximation breaks.
Check if you play with it and if you change Window().
MAX_R_NONLINEAR: float
- Maximum radius R/cMpc in which we start doing the nonlinear calculation (above this it is very linear)
+ Maximum radius R/cMpc in which we start doing the nonlinear calculation (above this it is very linear). Default is 100.0.
FLAG_DO_DENS_NL: bool
- Whether to do the nonlinear (ie lognormal) calculation for the density field itself and its cross correlations.
+ Whether to do the nonlinear (ie lognormal) calculation for the density field itself and its cross correlations. Default is False.
Small (<3%) correction in dd, but non trivial (~10%) in d-xa and d-Tx
FLAG_WF_ITERATIVE: bool
- Whether to iteratively do the WF correction as in Hirata2006.
+ Whether to iteratively do the WF correction as in Hirata2006. Default is True.
+ zmin: float
+ Minimum redshift to which we compute the T21 signals. Default is 5.0.
+ DO_ONLY_GLOBAL: bool
+ Whether zeus21 only runs the global T21 signal (and not fluctuations). Default is False.
+ USE_BARYON_FLAG: bool
+ Whether zeus21 computes 21-cm power spectra with (1+delta_b) prefactor instead of (1+delta)
+ This means LSS terms use P_baryon(k) and P_baryon_x_cdm(k). Default is True.
Attributes
----------
- C2_RENORMALIZATION_FLAG: int (0 or 1)
- Whether to renormalize the C2 oefficients (appendix in 2302.08506).
+ C2_RENORMALIZATION_FLAG: bool
+ Whether to renormalize the C2 oefficients (appendix in 2302.08506). Default is True.
"""
- def __init__(self, precisionboost = 1.0, FLAG_FORCE_LINEAR_CF = 0,
- MIN_R_NONLINEAR = 2.0, MAX_R_NONLINEAR = 100.0,
- FLAG_DO_DENS_NL = False, FLAG_WF_ITERATIVE = True):
-
- self.precisionboost = precisionboost
- self.FLAG_FORCE_LINEAR_CF = FLAG_FORCE_LINEAR_CF
- self.C2_RENORMALIZATION_FLAG = 1 - FLAG_FORCE_LINEAR_CF
-
- self.MIN_R_NONLINEAR = MIN_R_NONLINEAR
- self.MAX_R_NONLINEAR = MAX_R_NONLINEAR
-
- self.FLAG_DO_DENS_NL = FLAG_DO_DENS_NL
-
- self.FLAG_WF_ITERATIVE = FLAG_WF_ITERATIVE
+ precisionboost: float = 1.0
+ dlogzint_target: float = 0.02
+ FLAG_FORCE_LINEAR_CF: bool = False
+ MIN_R_NONLINEAR: float = 2.0
+ MAX_R_NONLINEAR: float = 100.0
+ FLAG_DO_DENS_NL: bool = False
+ FLAG_WF_ITERATIVE: bool = True
+ zmin: float = 5.
+ DO_ONLY_GLOBAL: bool = False
+ USE_BARYON_FLAG: bool = True
+ C2_RENORMALIZATION_FLAG: int = _field(init=False)
+ def __post_init__(self):
+ schema = {
+ "FLAG_FORCE_LINEAR_CF": (bool, None),
+ "FLAG_DO_DENS_NL": (bool, None),
+ "FLAG_WF_ITERATIVE": (bool, None),
+ "DO_ONLY_GLOBAL": (bool, None),
+ }
+ validate_fields(self, schema)
-class Cosmo_Parameters_Input:
- "Class to pass the 6 LCDM parameters as input"
-
- def __init__(self, omegab = 0.0223828, omegac = 0.1201075, h_fid = 0.67810, As = 2.100549e-09, ns = 0.9660499,
- tau_fid = 0.05430842, kmax_CLASS = 500., zmax_CLASS = 50.,zmin_CLASS = 5., Flag_emulate_21cmfast = False,
- USE_RELATIVE_VELOCITIES = False, HMF_CHOICE= "ST"):
-
- self.omegab = omegab
- self.omegac = omegac
- self.h_fid = h_fid
- self.As = As
- self.ns = ns
- self.tau_fid = tau_fid
-
- #other params for CLASS
- self.kmax_CLASS = kmax_CLASS
- self.zmax_CLASS = zmax_CLASS
- self.zmin_CLASS = zmin_CLASS
- #and whether to emulate 21cmFAST
- self.Flag_emulate_21cmfast = Flag_emulate_21cmfast #whether to emulate 21cmFAST in HMF, LyA, and X-ray opacity calculations
-
- ###HAC: Flag whether to use v_cb
- self.USE_RELATIVE_VELOCITIES = USE_RELATIVE_VELOCITIES
-
- #which HMF we use
- self.HMF_CHOICE = HMF_CHOICE #which HMF functional form we use.
- #options are "ST" the classic Sheth-Tormen (f(nu)), "Yung" for the Tinker08 (f(sigma)) calibrated to Yung+23. Default ST
-
+ self.C2_RENORMALIZATION_FLAG = not self.FLAG_FORCE_LINEAR_CF
+@dataclass(kw_only=True)
class Cosmo_Parameters:
- "Class that will keep the cosmo parameters throughout"
-
- def __init__(self, UserParams, CosmoParams_input, ClassCosmo):
+ """
+ Cosmological parameters for zeus21.
+ This class also runs and saves an instance of CLASS.
+
+ Parameters
+ ----------
+ UserParams: User_Parameters
+ zeus21 class for the user parameters. Default is the default instance of the User_Parameters class.
+ omegab: float
+ Baryon density * h^2. Default is 0.0223828.
+ omegac: float
+ CDM density * h^2. Default is 0.1201075.
+ h_fid: float
+ Hubble constant / 100. Default is 0.67810.
+ As: float
+ Amplitude of initial fluctuations. Default is 2.100549e-09.
+ ns: float
+ Spectral index. Default is 0.9660499.
+ tau_fid: float
+ Optical depth to reionization. Default is 0.05430842.
+ kmax_CLASS: float
+ Maximum wavenumber to be passed to CLASS. Default is 500.0.
+ zmax_CLASS: float
+ Maximum redshift to be passed to CLASS. Default is 50.0.
+ zmin_CLASS: float
+ Minimum redshift to be passed to CLASS. Default is 5.0.
+ Rs_min: float
+ Minimum radius to be passed to CLASS. Default is 0.05.
+ Set to 0.929 when Flag_emulate_21cmfast is True.
+ Rs_max: float
+ Maximum radius to be passed to CLASS. Default is 2000.0.
+ Set to 500 when Flag_emulate_21cmfast is True.
+ Flag_emulate_21cmfast: bool
+ Whether zeus21 emulates 21cmFAST cosmology (used in HMF, LyA, and X-ray opacity calculations). Default is False.
+ When False, sets the Star Formation Rate model to GALLUMI-like, and when True to 21cmfast-like (ignores Mc and beta and has a t* later in SFR()).
+ USE_RELATIVE_VELOCITIES: bool
+ Whether to use v_cb. Default is False.
+ HMF_CHOICE: str
+ Which HMF to use. Default is "ST".
+ "ST" for the classic Sheth-Tormen (f(nu)), "Yung" for the Tinker08 (f(sigma)) calibrated to Yung+23.
+ _Mhmin: float
+ Minimum halo mass in Msun to compute the HMF. Default is 1e5.
+ _Mhmax: float
+ Maximum halo mass in Msun to compute the HMF. Default is 1e14.
+
+ Attributes
+ ----------
+ ClassCosmo: Class
+ CLASS instance to compute cosmology.
+ It is set with the 6 LCDM parameters set in Cosmo_Parameters.
+ omegam: float
+ Matter density * h^2. Default is 0.1424903.
+ OmegaM: float
+ Matter density. Default is 0.3098830430481206.
+ rhocrit: float
+ Critical density. Default is 127339073085.43648.
+ OmegaR: float
+ Radiation density. Default is 9.096145657179167e-05.
+ OmegaL: float
+ Dark energy density. Default is 0.6900259954953076.
+ OmegaB: float
+ Baryon density. Default is 0.048677349798108865.
+ rho_M0: float
+ Actual matter density. Default is 39460219466.64208.
+ z_rec: float
+ Recombination reshift. Default is 1088.7722850526861.
+ sigma_vcb: float
+ Square root of the variance of the relative velocity field. Default is 1.
+ vcb_avg: float
+ Average of the relative velocity field. Default is 0.0.
+ Y_He: float
+ Helium mass fraction. Default is 0.24527956117097657.
+ x_He:
+ Helium-to-hydrogen number density ratio. Default is 0.08124848240215174.
+ f_H: float
+ Hydrogen number density ratio relative to baryons. Default is 0.924856789420276.
+ f_He: float
+ Helium number density ratio relative to baryons. Default is 0.07514321057972385.
+ mu_baryon: float
+ Mean baryonic weight. Default is 1.149786421719843.
+ mu_baryon_Msun: float
+ Mean baryonic weight relative to the solar mass. Default is 1.0305080308672013e-57.
+ constRM: float
+ Radius-to-mass conversions for HMF. Used for CLASS input so assumes tophat. Default is 165290580780.5916.
+ zfofRint: interp1d
+ Interpolation for the redshift as a function of the comoving distance.
+ chiofzint: interp1d
+ Interpolation for the comoving distance as a function of the redshift.
+ Tadiabaticint:
+ Interpolation for the adiabatic temperature as a function of redshift.
+ xetanhint: interp1d
+ Interpolation for the electron fraction as a function of redshift.
+ growthint: interp1d
+ Interpolation for the growth faction as a function of redshift.
+ NRs: np.ndarray
+ Number of radii. Default is 45.
+ indexminNL: np.ndarray
+ Index of the minimum radius R/cMpc in which we start doing the nonlinear calculation.
+ indexmaxNL: np.ndarray
+ Index of the maximum radius R/cMpc in which we start doing the nonlinear calculation.
+ a_ST: float
+ Rescaling of the HMF barrier. Default is 0.707.
+ Set to 0.73 when Flag_emulate_21cmfast is True.
+ p_ST: float
+ Correction factor for the abundance of small mass objects. Default is 0.3.
+ Set to 0.175 when Flag_emulate_21cmfast is True.
+ Amp_ST: float
+ Normalization factor for the halo mass function. Default is 0.3222.
+ Set to 0.353 when Flag_emulate_21cmfast is True.
+ delta_crit_ST: float
+ Barrier for halo to collapse in Sheth-Tormen formalism. Default is 1.686.
+ Set to 1.68 when Flag_emulate_21cmfast is True.
+ a_corr_EPS: float
+ Correction to the EPS relation between nu and nu' when doing extended PS. Follows hi-z simulation results from Schneider+21. Default is 0.707.
+ Set to 1.0 when Flag_emulate_21cmfast is True.
+ """
+ ### Non-default parameters
+ UserParams: InitVar[User_Parameters]
+
+ ### Default parameters
+ # 6 LCDM parameters
+ omegab: float = 0.0223828
+ omegac: float = 0.1201075
+ h_fid: float = 0.67810
+ As: float = 2.100549e-09
+ ns: float = 0.9660499
+ tau_fid: float = 0.05430842
+
+ # Other params for CLASS
+ kmax_CLASS: float = 500.
+ zmax_CLASS: float = 50.
+ zmin_CLASS: float = 5.
+
+ # Shells that we integrate over at each z.
+ Rs_min: float = 0.5 #TODO: Set to 0.5 if not doing reionization, 0.05 if doing reionization. Otherwise BMF doesn't converge
+ Rs_max: float = 2000.
+
+ # Flags
+ Flag_emulate_21cmfast: bool = False
+ USE_RELATIVE_VELOCITIES: bool = False
+ HMF_CHOICE: str = "ST"
+
+ # HMF mass integral
+ _Mhmin: float = 1e5 # minimum halo mass in Msun
+ _Mhmax: float = 1e14 # maximum halo mass in Msun
+
+ ### Additional parameters and attributes set in the following
+ # LCDM parameters
+ ClassCosmo: Class = _field(init=False)
+ omegam: float = _field(init=False)
+ OmegaM: float = _field(init=False)
+ rhocrit: float = _field(init=False)
+ OmegaR: float = _field(init=False)
+ OmegaL: float = _field(init=False)
+ OmegaB: float = _field(init=False)
+ rho_M0: float = _field(init=False)
+ z_rec: float = _field(init=False)
+
+ # v_cb parameters
+ sigma_vcb: float = _field(init=False)
+ vcb_avg: float = _field(init=False)
+
+ # Number densities and mass fractions
+ Y_He: float = _field(init=False)
+ x_He: float = _field(init=False)
+ f_H: float = _field(init=False)
+ f_He: float = _field(init=False)
+ mu_baryon: float = _field(init=False)
+ mu_baryon_Msun: float = _field(init=False)
+
+ # R->M conversions for HMF
+ constRM: float = _field(init=False)
+
+ # Redshifts and comoving distances
+ _ztabinchi: np.ndarray = _field(init=False)
+ _chitab: Any = _field(init=False)
+ _Hztab: Any = _field(init=False)
+ zfofRint: interp1d = _field(init=False)
+ chiofzint: interp1d = _field(init=False)
+
+ # Thermodynamics
+ Tadiabaticint: interp1d = _field(init=False)
+ xetanhint: interp1d = _field(init=False)
+
+ # Growth
+ growthint: interp1d = _field(init=False)
+
+ # Radii
+ NRs: np.ndarray = _field(init=False)
+ _Rtabsmoo: np.ndarray = _field(init=False)
+ _dlogRR: np.ndarray = _field(init=False)
+ indexminNL: np.ndarray = _field(init=False)
+ indexmaxNL: np.ndarray = _field(init=False)
+
+ # HMF-related constants
+ a_ST: float = _field(init=False)
+ p_ST: float = _field(init=False)
+ Amp_ST: float = _field(init=False)
+ delta_crit_ST: float = _field(init=False)
+ a_corr_EPS: float = _field(init=False)
+
+ tageofzMyr: interp1d = _field(init=False)
+ zfoftageMyr: interp1d = _field(init=False)
+
+ def __post_init__(self, UserParams):
+
+ schema = {
+ "Flag_emulate_21cmfast": (bool, None),
+ "USE_RELATIVE_VELOCITIES": (bool, None),
+ "HMF_CHOICE": (str, {'ST','Yung'}),
+ }
+ validate_fields(self, schema)
+
+ # run CLASS
+ self.ClassCosmo = self.runclass()
+
+ # derived params
+ self.omegam = self.omegab + self.omegac
+ self.OmegaM = self.ClassCosmo.Omega_m()
+ self.rhocrit = 3 * 100**2 / (8 * np.pi* constants.MsunToKm * constants.c_kms**2 * constants.KmToMpc) * self.h_fid**2 # Msun/Mpc^3
+ self.OmegaR = self.ClassCosmo.Omega_r()
+ self.OmegaL = self.ClassCosmo.Omega_Lambda()
+ self.OmegaB = self.ClassCosmo.Omega_b()
+ self.rho_M0 = self.OmegaM * self.rhocrit
+
+ _zlistforage = np.logspace(5,-3,10000)
+ _zlistforage[-1]=0.0
+ _Hztab = self.ClassCosmo.z_of_r(_zlistforage)[1] #chi and dchi/dz
+
+ ### TODO: check if this is the same as cosmic time in cosmology
+ tagetabyr = -cumulative_trapezoid(constants.Mpctoyr/_Hztab/(1+_zlistforage),_zlistforage)
+ tagetabyr = np.insert(tagetabyr,0,0)
- self.omegab = CosmoParams_input.omegab
- self.omegac = CosmoParams_input.omegac
- self.h_fid = CosmoParams_input.h_fid
- self.As = CosmoParams_input.As
- self.ns = CosmoParams_input.ns
- self.tau_fid = CosmoParams_input.tau_fid
+ self.tageofzMyr = interp1d(_zlistforage,tagetabyr/1e6) #interpolators for age in Myr as a function of z
+ self.zfoftageMyr = interp1d(tagetabyr/1e6,_zlistforage) #and it's inverse, z for age t in Myr
- #other params in the input
- self.kmax_CLASS = CosmoParams_input.kmax_CLASS
- self.zmax_CLASS = CosmoParams_input.zmax_CLASS
- self.zmin_CLASS = CosmoParams_input.zmin_CLASS #when to start the HMF calcs., not an input strictly
- self.Flag_emulate_21cmfast = CosmoParams_input.Flag_emulate_21cmfast #whether to emulate 21cmFAST in HMF, LyA, and X-ray opacity calculations
- #derived params
- self.omegam = self.omegab + self.omegac
- self.OmegaM = ClassCosmo.Omega_m()
- self.rhocrit = 2.78e11*self.h_fid**2 #Msun/Mpc^3
- self.OmegaR = ClassCosmo.Omega_r()
- self.OmegaL = ClassCosmo.Omega_Lambda()
- self.OmegaB = ClassCosmo.Omega_b()
+ self.z_rec = self.ClassCosmo.get_current_derived_parameters(['z_rec'])['z_rec']
- self.z_rec = ClassCosmo.get_current_derived_parameters(['z_rec'])['z_rec']
-
- ###HAC: added v_cb flag. JBM: moved to CosmoParams so user does not have to pass Class Cosmo all the time
- self.USE_RELATIVE_VELOCITIES = CosmoParams_input.USE_RELATIVE_VELOCITIES
- if self.USE_RELATIVE_VELOCITIES == True:
- self.sigma_vcb = ClassCosmo.pars['sigma_vcb']
- self.vcb_avg = ClassCosmo.pars['v_avg']
- else: #set but not to random values, just something sensible in case the user wants pop3 but not relvel
- self.sigma_vcb = 30.0
- self.vcb_avg = 27.5
+ ### v_cb flag
+ self.sigma_vcb = self.ClassCosmo.pars['sigma_vcb']
+ self.vcb_avg = self.ClassCosmo.pars['v_avg']
- ###n_H() stuff
- self.Y_He = ClassCosmo.get_current_derived_parameters(['YHe'])['YHe']
+ ### number densities and mass fractions
+ self.Y_He = self.ClassCosmo.get_current_derived_parameters(['YHe'])['YHe']
self.x_He = self.Y_He/4.0/(1.0 - self.Y_He) #=nHe/nH
self.f_H = (1.0 - self.Y_He)/(1.0 - 3.0/4.0 * self.Y_He) #=nH/nb
self.f_He = self.Y_He/4.0/(1.0 - 3.0/4.0 * self.Y_He) #=nHe/nb
self.mu_baryon = (1 + self.x_He * 4.)/(1 + self.x_He) * constants.mH_GeV #mproton ~ 0.94 GeV
- self.mu_baryon_Msun = self.mu_baryon/constants.MsuntoGeV
+ self.mu_baryon_Msun = self.mu_baryon / constants.MsuntoGeV
-# ###old dependencies of n_baryon() instead of n_H()
-# self.Y_He = ClassCosmo.get_current_derived_parameters(['YHe'])['YHe']
-# self.f_He = self.Y_He/4.0/(1.0 - 3.0/4.0 * self.Y_He) #=nHe/nb
-# self.f_H = (1.0 - self.Y_He)/(1.0 - 3.0/4.0 * self.Y_He) #=nH/nb
-# self.mu_baryon = (self.f_H + self.f_He * 4.) * 0.94 #mproton ~ 0.94 GeV
-
-
-
- #for R->M conversions for HMF. Used for CLASS input so assumes tophat.
+ # for R->M conversions for HMF. Used for CLASS input so assumes tophat.
self.constRM = self.OmegaM*self.rhocrit * 4.0 * np.pi/3.0
- self.rho_M0 = self.OmegaM*self.rhocrit
-
-
-
+ # redshifts and comoving distances
self._ztabinchi = np.linspace(0.0, 1100. , 10000) #cheap so do a lot
- # self._chitab = ClassCosmo.z_of_r(self._ztabinchi)[0]
- # self.zfofRint = interp1d(self._chitab, self._ztabinchi)
- self._chitab, self._Hztab = ClassCosmo.z_of_r(self._ztabinchi) #chi and dchi/dz
+ self._chitab, self._Hztab = self.ClassCosmo.z_of_r(self._ztabinchi) #chi and dchi/dz
self.zfofRint = interp1d(self._chitab, self._ztabinchi)
self.chiofzint = interp1d(self._ztabinchi,self._chitab)
- self.Hofzint = interp1d(self._ztabinchi,self._Hztab)
- _thermo = ClassCosmo.get_thermodynamics()
+ # thermodynamics
+ _thermo = self.ClassCosmo.get_thermodynamics()
self.Tadiabaticint = interp1d(_thermo['z'], _thermo['Tb [K]'])
self.xetanhint = interp1d(_thermo['z'], _thermo['x_e'])
+ # growth
_ztabingrowth = np.linspace(0., 100. , 2000)
- _growthtabint = np.array([ClassCosmo.scale_independent_growth_factor(zz) for zz in _ztabingrowth])
-
+ _growthtabint = np.array([self.ClassCosmo.scale_independent_growth_factor(zz) for zz in _ztabingrowth])
self.growthint = interp1d(_ztabingrowth,_growthtabint)
-
- #and define the shells that we integrate over at each z.
- self.Rsmmin = 0.5
- self.Rsmmax = 2000.
-
- if(self.Flag_emulate_21cmfast==True):
- self.Rsmmin = 0.62*1.5 #same as minmum R in 21cmFAST for their standard 1.5 Mpc cell resolution. 0.62 is their 'L_FACTOR'
- self.Rsmmax = 500. #same as R_XLy_MAX in 21cmFAST. Too low?
+ # shells that we integrate over at each z.
+ if self.Flag_emulate_21cmfast:
+ self.Rs_min = 0.62*1.5 #same as minmum R in 21cmFAST for their standard 1.5 Mpc cell resolution. 0.62 is their 'L_FACTOR'
+ self.Rs_max = 500. #same as R_XLy_MAX in 21cmFAST. Too low?
+ # radii
self.NRs = np.floor(45*UserParams.precisionboost).astype(int)
- self._Rtabsmoo = np.logspace(np.log10(self.Rsmmin), np.log10(self.Rsmmax), self.NRs) # Smoothing Radii in Mpc com
- self._dlogRR = np.log(self.Rsmmax/self.Rsmmin)/(self.NRs-1.0)
+ self._Rtabsmoo = np.logspace(np.log10(self.Rs_min), np.log10(self.Rs_max), self.NRs) # Smoothing Radii in Mpc com
+ self._dlogRR = np.log(self.Rs_max/self.Rs_min)/(self.NRs-1.0)
- self.indexminNL = (np.log(UserParams.MIN_R_NONLINEAR/self.Rsmmin)/self._dlogRR).astype(int)
- self.indexmaxNL = (np.log(UserParams.MAX_R_NONLINEAR/self.Rsmmin)/self._dlogRR).astype(int) + 1 #to ensure it captures MAX_R
+ self.indexminNL = (np.log(UserParams.MIN_R_NONLINEAR/self.Rs_min)/self._dlogRR).astype(int)
+ self.indexmaxNL = (np.log(UserParams.MAX_R_NONLINEAR/self.Rs_min)/self._dlogRR).astype(int) + 1 #to ensure it captures MAX_R
-
- #HMF-related constants
- self.HMF_CHOICE = CosmoParams_input.HMF_CHOICE
- if(self.Flag_emulate_21cmfast == False): #standard, best fit ST from Schneider+
- self.a_ST = 0.707 #OG ST fit, or 0.85 to fit 1805.00021
+ # HMF-related constants
+ if not self.Flag_emulate_21cmfast: # standard, best fit ST from Schneider+21
+ self.a_ST = 0.707 # OG ST fit, or 0.85 to fit 1805.00021
self.p_ST = 0.3
self.Amp_ST = 0.3222
self.delta_crit_ST = 1.686
- self.a_corr_EPS = self.a_ST #correction to the eps relation between nu and nu' when doing extended PS. Follows hi-z simulation results from Schneider+
- elif(self.Flag_emulate_21cmfast == True): #emulate 21cmFAST, including HMF from Jenkins 2001
- self.HMF_CHOICE = 'ST' #forced to match their functional form
+ self.a_corr_EPS = self.a_ST
+ else: # emulate 21cmFAST, including HMF from Jenkins 2001
+ self.HMF_CHOICE = 'ST' # forced to match their functional form
+ print('Since Flag_emulate_21cmfast==True, the code set HMF_CHOICE==ST')
self.a_ST = 0.73
self.p_ST = 0.175
self.Amp_ST = 0.353
self.delta_crit_ST = 1.68
self.a_corr_EPS = 1.0
+
+ # Run matter and relative velocities correlations
+ self.run_correlations()
+
+ def runclass(self):
+ "Set up CLASS cosmology. Takes CosmologyIn class input and returns CLASS Cosmology object"
+ ClassCosmo = Class()
+ ClassCosmo.set({'omega_b': self.omegab,'omega_cdm': self.omegac,
+ 'h': self.h_fid,'A_s': self.As,'n_s': self.ns,'tau_reio': self.tau_fid})
+ ClassCosmo.set({'output':'mPk,mTk','lensing':'no','P_k_max_1/Mpc':self.kmax_CLASS, 'z_max_pk': self.zmax_CLASS})
+ ClassCosmo.set({'gauge':'synchronous'})
+ #hfid = ClassCosmo.h() # get reduced Hubble for conversions to 1/Mpc
+
+ # and run it (see warmup for their doc)
+ ClassCosmo.compute()
+
+ ClassCosmo.pars['Flag_emulate_21cmfast'] = self.Flag_emulate_21cmfast
+
+ ###HAC: Adding VCB feedback via a second run of CLASS:
+ if self.USE_RELATIVE_VELOCITIES:
+
+ kMAX_VCB = 100.0
+ ###HAC: getting z_rec from first CLASS run
+ z_rec = ClassCosmo.get_current_derived_parameters(['z_rec'])['z_rec']
+ z_drag = ClassCosmo.get_current_derived_parameters(['z_d'])['z_d']
+
+ ###HAC: Running CLASS a second time just to get velocity transfer functions at recombination
+ ClassCosmoVCB = Class()
+ ClassCosmoVCB.set({'omega_b': self.omegab,'omega_cdm': self.omegac,
+ 'h': self.h_fid,'A_s': self.As,'n_s': self.ns,'tau_reio': self.tau_fid})
+ ClassCosmoVCB.set({'output':'vTk'})
+ ClassCosmoVCB.set({'P_k_max_1/Mpc':kMAX_VCB, 'z_max_pk':12000})
+ ClassCosmoVCB.set({'gauge':'newtonian'})
+ ClassCosmoVCB.compute()
+ velTransFunc = ClassCosmoVCB.get_transfer(50)
+
+ kVel = velTransFunc['k (h/Mpc)'] * self.h_fid
+ theta_b = velTransFunc['t_b']
+ theta_c = velTransFunc['t_cdm']
+
+ sigma_vcb = np.sqrt(np.trapezoid(self.As * (kVel/0.05)**(self.ns-1) /kVel * (theta_b - theta_c)**2/kVel**2, kVel)) * constants.c_kms
+ ClassCosmo.pars['sigma_vcb'] = sigma_vcb
+
+ ###HAC: now computing average velocity assuming a Maxwell-Boltzmann distribution of velocities
+ velArr = np.geomspace(0.01, constants.c_kms, 1000) #in km/s
+ vavgIntegrand = (3 / (2 * np.pi * sigma_vcb**2))**(3/2) * 4 * np.pi * velArr**2 * np.exp(-3 * velArr**2 / (2 * sigma_vcb**2))
+ ClassCosmo.pars['v_avg'] = np.trapezoid(vavgIntegrand * velArr, velArr)
+
+ ###HAC: Computing Vcb Power Spectrum
+ ClassCosmo.pars['k_vcb'] = kVel
+ ClassCosmo.pars['theta_b'] = theta_b
+ ClassCosmo.pars['theta_c'] = theta_c
+ P_vcb = self.As * (kVel/0.05)**(self.ns-1) * (theta_b - theta_c)**2/kVel**2 * 2 * np.pi**2 / kVel**3
+
+ p_vcb_intp = interp1d(np.log(kVel), P_vcb)
+ ClassCosmo.pars['P_vcb'] = P_vcb
+
+ ###HAC: Computing Vcb^2 (eta) Power Spectra
+ kVelIntp = np.geomspace(1e-4, kMAX_VCB, 512)
+ rVelIntp = 2 * np.pi / kVelIntp
+
+ j0bessel = lambda x: np.sin(x)/x
+ j2bessel = lambda x: (3 / x**2 - 1) * np.sin(x)/x - 3*np.cos(x)/x**2
+
+ psi0 = 1 / 3 / (sigma_vcb/constants.c_kms)**2 * np.trapezoid(kVelIntp**2 / 2 / np.pi**2 * p_vcb_intp(np.log(kVelIntp)) * j0bessel(kVelIntp * np.transpose([rVelIntp])), kVelIntp, axis = 1)
+ psi2 = -2 / 3 / (sigma_vcb/constants.c_kms)**2 * np.trapezoid(kVelIntp**2 / 2 / np.pi**2 * p_vcb_intp(np.log(kVelIntp)) * j2bessel(kVelIntp * np.transpose([rVelIntp])), kVelIntp, axis = 1)
+
+ k_eta, P_eta = mcfit.xi2P(rVelIntp, l=0, lowring = True)((6 * psi0**2 + 3 * psi2**2), extrap = False)
+
+ ClassCosmo.pars['k_eta'] = k_eta[P_eta > 0]
+ ClassCosmo.pars['P_eta'] = P_eta[P_eta > 0]
+
+ # print("HAC: Finished running CLASS a second time to get velocity transfer functions")
else:
- print("Error! Have to set either Flag_emulate_21cmfast = True or False")
+ ClassCosmo.pars['v_avg'] = 0.0
+ ClassCosmo.pars['sigma_vcb'] = 1.0 #Avoids excess computation, but doesn't matter what value we set it to because the flag in inputs.py sets all feedback parameters to zero
+
+ return ClassCosmo
+
+ def run_correlations(self):
+ #we choose the k to match exactly the log FFT of input Rtabsmoo.
+ self._klistCF, _dummy_ = mcfit.xi2P(self._Rtabsmoo, l=0, lowring=True)(0*self._Rtabsmoo, extrap=False)
+ self.NkCF = len(self._klistCF)
+
+ self._PklinCF = np.zeros(self.NkCF) # P(k) in 1/Mpc^3
+ for ik, kk in enumerate(self._klistCF):
+ self._PklinCF[ik] = self.ClassCosmo.pk(kk, 0.0) # function .pk(k,z)
-class Astro_Parameters:
- "Class to pass the astro parameters as input"
-
- def __init__(self, UserParams, Cosmo_Parameters,
- astromodel = 0,
- accretion_model = 0,
-
- alphastar = 0.5,
- betastar = -0.5,
- epsstar = 0.1,
- Mc = 3e11,
- dlog10epsstardz = 0.0,
-
- fesc10 = 0.1,
- alphaesc = 0.0,
- L40_xray = 3.0,
- E0_xray = 500.,
- alpha_xray = -1.0,
- Emax_xray_norm=2000,
-
- Nalpha_lyA_II = 9690,
- Nalpha_lyA_III = 17900,
-
- Mturn_fixed = None,
- FLAG_MTURN_SHARP= False,
-
- C0dust = 4.43,
- C1dust = 1.99,
-
- sigmaUV=0.5,
-
- USE_POPIII = False,
-
- alphastar_III = 0,
- betastar_III = 0,
- fstar_III = 10**(-2.5),
- Mc_III = 1e7,
- dlog10epsstardz_III = 0.0,
-
- fesc7_III = 10**(-1.35),
- alphaesc_III = -0.3,
- L40_xray_III = 3.0,
- alpha_xray_III = -1.0,
-
- USE_LW_FEEDBACK = True,
- A_LW = 2.0,
- beta_LW = 0.6,
-
- A_vcb = 1.0,
- beta_vcb = 1.8,
-
- quadratic_SFRD_lognormal = False, # Sarah Libanore, use second order in lognormal
- min_t_formation_Myr = None
-
- ):
-
- #for internal functions in SED_LyA
- self.Flag_emulate_21cmfast = Cosmo_Parameters.Flag_emulate_21cmfast
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True and astromodel == 0):
- print('ERROR, picked astromodel = 0 but tried to emulate 21cmFAST. They use astromodel = 1. Changing it!')
- self.astromodel = 1
+ self._xif = mcfit.P2xi(self._klistCF, l=0, lowring=True)
+
+
+ self.xi_RR_CF = self.get_xi_R1R2(field = 'delta')
+ self.ClassCosmo.pars['xi_RR_CF'] = np.copy(self.xi_RR_CF) #store correlation function for gamma_III correction in SFRD
+
+ ###HAC: Interpolated object for eta power spectrum
+ if self.USE_RELATIVE_VELOCITIES == True:
+ P_eta_interp = interp1d(self.ClassCosmo.pars['k_eta'], self.ClassCosmo.pars['P_eta'], bounds_error = False, fill_value = 0)
+ self._PkEtaCF = P_eta_interp(self._klistCF)
+ self.xiEta_RR_CF = self.get_xi_R1R2(field = 'vcb')
else:
- self.astromodel = astromodel # which SFR model we use. 0=Gallumi-like, 1=21cmfast-like
+ self._PkEtaCF = np.zeros_like(self._PklinCF)
+ self.xiEta_RR_CF = np.zeros_like(self.xi_RR_CF)
- ###HAC: PopIII parameters:
- self.USE_POPIII = USE_POPIII
+
+ def get_xi_R1R2 (self, field = None):
+ "Get correlation function of density, linearly extrapolated to z=0, smoothed over two different radii with Window(k,R)"
- self.alphastar_III = alphastar_III
- self.betastar_III = betastar_III
- self.fstar_III = fstar_III
- self.Mc_III = Mc_III
- self.dlog10epsstardz_III = dlog10epsstardz_III
- self._zpivot_III = 8.0 #fixed, at which z we evaluate eps and dlogeps/dz
+ lengthRarray = self.NRs
+ windowR1 = z21_utilities.Window(self._klistCF.reshape(lengthRarray, 1, 1), self._Rtabsmoo.reshape(1, 1, lengthRarray))
+ windowR2 = z21_utilities.Window(self._klistCF.reshape(1, lengthRarray,1), self._Rtabsmoo.reshape(1, 1, lengthRarray))
- self.fesc7_III = fesc7_III
- self.alphaesc_III = alphaesc_III
- self.L40_xray_III = L40_xray_III
- self.alpha_xray_III = alpha_xray_III
+ if field == 'delta':
+ _PkRR = np.array([[self._PklinCF]]) * windowR1 * windowR2
+ elif field == 'vcb':
+ _PkRR = np.array([[self._PkEtaCF]]) * windowR1 * windowR2
+ else:
+ raise ValueError('field has to be either delta or vcb in get_xi_R1R2')
- ###HAC: Using LW feedback and fixing parameters
- self.USE_LW_FEEDBACK = USE_LW_FEEDBACK
+ self.rlist_CF, xi_RR_CF = self._xif(_PkRR, extrap = False)
+
+ return xi_RR_CF
+
+
+
+@dataclass(kw_only=True)
+class Astro_Parameters:
+ """
+ Astrophysical parameters for zeus21.
+
+ Parameters
+ ----------
+ CosmoParams: Cosmo_Parameters
+ zeus21 class for the cosmological parameters. Needs to be inputed.
+ accretion_model: str
+ Accretion model. "exp" for exponential, "EPS" for EPS. "RP16" for the dynamically averaged fitting function in Rodríguez-Puebla+16. Default is "exp".
+ USE_POPIII: bool
+ Whether to use Pop III. Default is False.
+ USE_LW_FEEDBACK: bool
+ Whether to use the Lyman-Werner feedback. Default is True.
+ quadratic_SFRD_lognormal: bool
+ Whether to use the second order correction to the SFRD approximation. Default is True.
+ epsstar: float
+ Amplitude of the star formation efficiency (at M_pivot). Default is 0.1.
+ dlog10epsstardz: float
+ Derivative of epsstar with respect to z. Default is 0.0.
+ alphastar: float
+ Power law index of the star formation efficiency at low masses. Default 0.5.
+ betastar: float
+ Power law index of the star formation efficiency at high masses. Not used if Flag_emulate_21cmfast = True. Default -0.5.
+ Mc: float
+ Mass at which the star formation efficiency cuts. Not used if Flag_emulate_21cmfast=True. Default 3e11.
+ epsstar_III: float
+ Amplitude of the star formation efficiency (at M_pivot) for Pop III. Default is 10**(-2.5).
+ dlog10epsstardz_III: float
+ Derivative of epsstar with respect to z for Pop III. Default is 0.0.
+ alphastar_III: float
+ Power law index of the Pop III star formation efficiency at low masses. Default 0.0.
+ betastar_III: float
+ Power law index of the Pop III star formation efficiency at high masses. Default 0.0.
+ Mc_III: float
+ Mass at which the Pop III star formation efficiency cuts. Default 1e7.
+ Mup_III: str, float, None
+ High-mass cutoff for Pop III star formation efficiency. Default "Matom" for Pop III star formation confined to molecular-cooling minihalos; also accepts custom cutoff value or None for no cutoff
+ DETACH_III_ACH: bool
+ Whether to have a separate set of parameters for star formation efficiency for the (ACH) component for Pop III. Default is False.
+ epsstar_III_ACH: float
+ Amplitude of the star formation efficiency (at M_pivot) for the (ACH) component for Pop III. Default is 0.0.
+ dlog10epsstardz_III_ACH: float
+ Derivative of epsstar with respect to z for the (ACH) component for Pop III. Default is 0.0.
+ alphastar_III_ACH: float
+ Power law index of the (ACH) component of Pop III star formation efficiency at low masses. Default 0.0.
+ betastar_III_ACH: float
+ Power law index of the (ACH) component of Pop III star formation efficiency at high masses. Default 0.0.
+ Mc_III_ACH: float
+ Mass at which the (ACH) component of Pop III star formation efficiency cuts. Default 1e7.
+ N_alpha_perbaryon_II: float
+ Number of photons between LyA and Ly Continuum per baryon (from LB05). Default is 9690.
+ N_alpha_perbaryon_III: float
+ Number of photons between LyA and Ly Continuum per baryon (from LB05) for Pop III. Default is 17900.
+ L40_xray: float
+ Soft-band (E<2 keV) lum/SFR in Xrays in units of 10^40 erg/s/(Msun/yr). Default is 3.0.
+ E0_xray: float
+ Minimum energy in eV. Default is 500.
+ alpha_xray: float
+ Xray SED power-law index. Default is -1.0.
+ L40_xray_III: float
+ Soft-band (E<2 keV) lum/SFR in Xrays in units of 10^40 erg/s/(Msun/yr) for Pop III. Default is 3.0.
+ alpha_xray_III: float
+ Xray SED power-law index. Default is -1.0.
+ Emax_xray_norm: float
+ Max energy in eV to normalize SED. Default at 2000.0 eV.
+ fesc10: float
+ Amplitude of the escape fraction. Default is 0.1.
+ Escape fraction assumed to be a power law normalized (fesc10) at M=1e10 Msun with index alphaesc.
+ alphaesc: float
+ Index for the escape fraction. Default is 0.0.
+ Escape fraction assumed to be a power law normalized (fesc10) at M=1e10 Msun with index alphaesc.
+ fesc7_III: float
+ Amplitude of the Pop III escape fraction. Default is 10**(-1.35).
+ Escape fraction assumed to be a power law normalized (fesc10) at M=1e10 Msun with index alphaesc.
+ alphaesc_III: float
+ Index for the Pop III escape fraction. Default is -0.3.
+ Escape fraction assumed to be a power law normalized (fesc10) at M=1e10 Msun with index alphaesc.
+ clumping: float
+ Clumping factor, which is z-independent and fixed for now. Default is 3.0, changed to 2.0 when Flag_emulate_21cmfast=True.
+ R_linear_sigma_fit_input: float
+ Initial guess radius at which the linear fit of the barrier is computed. Default is 10.0.
+ FLAG_BMF_converge: bool
+ Whether zeus21 allow the BMF to try and make the average ionized fraction converge. Default is True.
+ max_iter: int
+ Maximum iteration allowed for the convergence of the BMF. Default is 10.
+ ZMAX_REION: float
+ Maximum redshift to which the reionization quantities are computed. Default is 30.0.
+ Rbub_min: float
+ Minimum bubble radius. Default is 0.05.
+ A_LW: float
+ Parameters controlling the LW feedback factor (see Munoz+22, eq 13). Default is 2.0.
+ beta_LW: float
+ Parameters controlling the LW feedback factor (see Munoz+22, eq 13). Default is 0.6.
+ A_vcb: float
+ Normalization for the relative velocity feedback parameter. Default is 1.0.
+ beta_vcb: float
+ Spectral index for the relative velocity feedback parameter. Default 1.8.
+ Mturn_fixed: float | None
+ Turn-over halo mass at which the star formation rate cuts. Default is None.
+ FLAG_MTURN_SHARP: bool
+ Whether to do sharp cut at Mturn_fixed or regular exponential cutoff. Only active if FLAG_MTURN_FIXED and turned on by hand. Default is False.
+ FLAG_USE_PSD: bool
+ Whether to derive MUV and sigmaUV from integrating SFH. Default is False.
+ FLAG_COMPARE_BAGPIPES: bool
+ Whethher to compare with bagpipes. Default is False.
+ SEDMODEL: str = "BPASS"
+ Which SED model to use for the Greens functions. Default is "BPASS".
+ Can be set to "bagpipes", "BPASS_binaries", and "BPASS".
+ normLHa_ZIMF: float
+ Floating normalization of the LHa luminosity compared to the baseline SEDMODEL to account for HMF or metallicity changes. Default is 1.0
+ alphanormLHa_ZIMF:
+ Power-law index of normLHa_ZIMF against halo mass. Default is 0.0
+ sigmaPSD: float
+ Amplitude of fluctuations in SFR arising from the power spectral density (PSD) model of SFR variability. Default is 0.5.
+ This is the baseline scatter in ln(SFR) at a reference halo mass of 10^10 Msun.
+ dsigmaPSDdlog10Mh: float
+ Slope of the scatter with respect to halo mass. Default is 0.0.
+ tauPSD: float
+ Characteristic timescale (in Myr) that enters the power spectral density (PSD) of ln(SFR). Default is 10.0.
+ dlog10tauPSDdlog10Mh: float
+ Slope of the timescale with respect to halo mass. Default is 0.0.
+ _tcut_LUV_short: float
+ Sets where the LUV short and long are separated in Myr. Default is 30.0.
+ FLAG_RENORMALIZE_AVG_SFH: bool
+ Whether to normalize the SFR in Msun/yr at each Mh. Default is True.
- if self.USE_LW_FEEDBACK == True:
- self.A_LW = A_LW
- self.beta_LW = beta_LW
+ Attributes
+ ----------
+ fstarmax: float
+ Peak amplitude for the star formation efficiency. Set by zeus21 to 1.
+ Emax_xray_integral: float
+ Max energy in eV that zeus21 integrate up to. Higher than Emax_xray_norm since photons can redshift from higher z. Set by zeus21 to 10000.
+ Nen_xray: int
+ Number of energies to do the xray integrals. Set by zeus21 to 30.
+ Energylist: np.ndarray
+ Energies, in eV.
+ dlogEnergy: float
+ Used to get dlog instead of dlog10.
+ N_ion_perbaryon_II: int
+ Number of ionizing photons per baryon. Fixed for PopII-type (Salpeter) by zeus21 to 5000.
+ N_ion_perbaryon_III: int
+ Number of ionizing photons per baryon for Pop III. Fixed for PopIII-type to 44000 (or 52480 when Flag_emulate_21cmfast=True), from Klessen & Glover 2023 Table A2 (2303.12500).
+ N_LW_II: float
+ Number of LW photons per baryon.
+ Assuming BL05 stellar spectrum, equal to N_alpha_perbaryon_II * fraction of photons that fall in the LW band.
+ N_LW_III: float
+ Number of LW photons per baryon.
+ Assuming Intermediate IMF from 2202.02099, equal to 4.86e-22 / (11.9 * u.eV).to(u.erg).value * 5.8e14.
+ FLAG_MTURN_FIXED: bool
+ Whether to fix Mturn or use Matom(z) at each z. Set by zeus21 depending on Mturn_fixed.
+
+ """
+ ### Non-default parameters
+ CosmoParams: InitVar[Cosmo_Parameters]
+
+ ### Default and init=False parameters
+ # Flags
+ accretion_model: str = "exp"
+ USE_POPIII: bool = False
+ USE_LW_FEEDBACK: bool = True
+ quadratic_SFRD_lognormal: bool = True
+
+ # SFR(Mh) parameters - popII
+ epsstar: float = 0.1
+ dlog10epsstardz: float = 0.0
+ alphastar: float = 0.5
+ betastar: float = -0.5
+ Mc: float = 3e11
+ _zpivot: float = _field(init=False) # Redshift at which the eps and dlogeps/dz are evaluated. Set by zeus21 to 8.0.
+ fstarmax: float = _field(init=False)
+
+ # SFR(Mh) parameters - popIII main component --> by default, this only includes the molecular-cooling minihalo component extended up to the atomic-cooling limit, but it can be extended to a custom high-mass cutoff value by changing the value of Mup_III
+ epsstar_III: float = 10**(-2.5)
+ dlog10epsstardz_III: float = 0.0
+ alphastar_III: float = 0.
+ betastar_III: float = 0.
+ Mc_III: float = 1e7
+ Mup_III: str | float | None = "Matom"
+ Mup3TEMP: float = 10**8.387007493446207#HAC TEMPORARY: Delete!!! Only for BAO/VAO comparison
+ _zpivot_III: float = _field(init=False) # Redshift at which the eps and dlogeps/dz are evaluated for Pop III. Set by zeus21 to 8.0.
+
+ # SFR(Mh) parameters - popIII deatched atomic-cooling component
+ DETACH_III_ACH: bool = False
+ epsstar_III_ACH: float = 0.
+ dlog10epsstardz_III_ACH: float = 0.0
+ alphastar_III_ACH: float = 0.
+ betastar_III_ACH: float = 0.
+ Mc_III_ACH: float = 1e7
+ _zpivot_III_ACH: float = _field(init=False) # Redshift at which the eps and dlogeps/dz are evaluated for the (ACH) component for Pop III. Set by zeus21 to 8.0.
+
+ # Lyman-alpha parameters
+ N_alpha_perbaryon_II: float = 9690
+ N_alpha_perbaryon_III: float = 17900
+
+ # Xray parameters, assumed power-law for now
+ L40_xray: float = 3.0
+ E0_xray: float = 500.
+ alpha_xray: float = -1.0
+ L40_xray_III: float = 3.0
+ alpha_xray_III: float = -1.0
+ Emax_xray_norm: float = 2000
+ Emax_xray_integral: float = _field(init=False) # Max energy in eV that we integrate up to. Higher than Emax_xray_norm since photons can redshift from higher z
+
+ # table with how many energies we integrate over
+ Nen_xray: int = _field(init=False)
+ _log10EMIN_INTEGRATE: float = _field(init=False) # Minimum energy zeus21 integrates to, to account for photons coming from higher z that redshift.
+ _log10EMAX_INTEGRATE: float = _field(init=False) # Maximum energy zeus21 integrates to, to account for photons coming from higher z that redshift.
+ Energylist: np.ndarray = _field(init=False) # in eV
+ dlogEnergy: float = _field(init=False) # to get dlog instead of dlog10
+
+ # Reionization parameters
+ fesc10: float = 0.1
+ alphaesc: float = 0.0
+ fesc7_III: float = 10**(-1.35)
+ alphaesc_III: float = -0.3
+ clumping: float = 3.
+ N_ion_perbaryon_II: int = _field(init=False) # fixed for PopII-type (Salpeter)
+ N_ion_perbaryon_III: int = _field(init=False) # fixed for PopIII-type, from Klessen & Glover 2023 Table A2 (2303.12500)
+ R_linear_sigma_fit_input: float = 10.
+ FLAG_BMF_converge: bool = True
+ max_iter: int = 10
+ ZMAX_REION: float = 30
+ Rbub_min: float = 0.05
+
+ # Lyman-Werner feedback paramters
+ A_LW: float = 2.0
+ beta_LW: float = 0.6
+ N_LW_II: float = _field(init=False) # number of LW photons per baryon #assuming BL05 stellar spectrum, equal to N_alpha_perbaryon_II * fraction of photons that fall in the LW band
+ N_LW_III: float = _field(init=False) # number of LW photons per baryon #assuming Intermediate IMF from 2202.02099, equal to 4.86e-22 / (11.9 * u.eV).to(u.erg).value * 5.8e14
+
+ # relative velocity
+ A_vcb: float = 1.0
+ beta_vcb: float = 1.8
+
+ # 21cmFAST emulation: SFE parameters
+ Mturn_fixed: float | None = None
+ FLAG_MTURN_SHARP: bool = False
+ FLAG_MTURN_FIXED: bool = _field(init=False) # whether to fix Mturn or use Matom(z) at each z
+
+ # BURSTINESS
+ FLAG_USE_PSD: bool = False
+ FLAG_COMPARE_BAGPIPES: bool = False
+ SEDMODEL: str = "BPASS"
+ normLHa_ZIMF: float = 1.0
+ alphanormLHa_ZIMF: float = 0.0
+ sigmaPSD: float = 0.5,
+ dsigmaPSDdlog10Mh: float = 0.0,
+ tauPSD: float = 10.0,
+ dlog10tauPSDdlog10Mh: float = 0.0,
+ _tcut_LUV_short: float = 30.0
+ FLAG_RENORMALIZE_AVG_SFH: bool = True
+ _minsigmaPSD: float = _field(init=False)
+ _maxsigmaPSD: float = _field(init=False)
+ _mintauPSD: float = _field(init=False)
+ _maxtauPSD: float = _field(init=False)
+ _tagesMyr: float = _field(init=False)
+ _dt_FFT: float = _field(init=False)
+ _N_FFT: float = _field(init=False)
+ _omegamin: float = _field(init=False)
+ _omegamax: float = _field(init=False)
+
+ def __post_init__(self, CosmoParams):
+
+ schema = {
+ "accretion_model": (str, {"EPS", "exp"}),
+ "USE_POPIII": (bool, None),
+ "DETACH_III_ACH": (bool, None),
+ "USE_LW_FEEDBACK": (bool, None),
+ "quadratic_SFRD_lognormal": (bool, None),
+ "FLAG_MTURN_SHARP": (bool, None),
+ "FLAG_USE_PSD": (bool, None),
+ "FLAG_COMPARE_BAGPIPES": (bool, None),
+ "FLAG_RENORMALIZE_AVG_SFH": (bool, None),
+ "SEDMODEL": (str, {"bagpipes", "BPASS_binaries", "BPASS"}),
+ }
+ validate_fields(self, schema)
+
+ ### which SFR model we use. 0=Gallumi-like, 1=21cmfast-like
+ if not CosmoParams.Flag_emulate_21cmfast: # GALLUMI-like
+ self.accretion_model = self.accretion_model # choose the accretion model: 0 = exponential, 1= EPS. Default = EPS.
+ else: # 21cmfast-like, ignores Mc and beta and has a t* later in SFR()
+ self.tstar = 0.5
+ self.fstar10 = self.epsstar
+
+ # SFR(Mh) parameters
+ self._zpivot = 8.0 # fixed, at which z we evaluate eps and dlogeps/dz
+ self._zpivot_III = 8.0 # fixed, at which z we evaluate eps and dlogeps/dz
+ self._zpivot_III_ACH = 8.0 # fixed, at which z we evaluate eps and dlogeps/dz
+ self.fstarmax = 1.0 # where we cap it
+
+ # Xray parameters
+ self.Emax_xray_integral = 10000. # Max energy in eV that we integrate up to. Higher than Emax_xray_norm since photons can redshift from higher z
+ if(self.E0_xray < constants.EN_ION_HI):
+ print("What the heck? How can E0_XRAY < EN_ION_HI?")
+
+ # table with how many energies we integrate over
+ self.Nen_xray = 30
+ self._log10EMIN_INTEGRATE = np.log10(self.E0_xray/2.0) # to account for photons coming from higher z that redshift
+ self._log10EMAX_INTEGRATE = np.log10(self.Emax_xray_integral)
+ self.Energylist = np.logspace(self._log10EMIN_INTEGRATE,self._log10EMAX_INTEGRATE,self.Nen_xray) # in eV
+ self.dlogEnergy = (self._log10EMAX_INTEGRATE - self._log10EMIN_INTEGRATE)/(self.Nen_xray-1.0)*np.log(10.) # to get dlog instead of dlog10
+
+ # Reionization parameters
+ if CosmoParams.Flag_emulate_21cmfast:
+ self.clumping = 2.0 # this is the 21cmFAST value
+ # number of ionizing photons per baryon
+ self.N_ion_perbaryon_II = 5000 # fixed for PopII-type (Salpeter)
+ if CosmoParams.Flag_emulate_21cmfast:
+ self.N_ion_perbaryon_III = 44000 # fixed for PopIII-type, from Klessen & Glover 2023 Table A2 (2303.12500)
else:
+ self.N_ion_perbaryon_III = 52480
+
+ ### HAC: LW feedback parameters
+ if not self.USE_LW_FEEDBACK:
self.A_LW = 0.0
self.beta_LW = 0.0
-
- ###HAC: Using Relative Velocities and fixing parameters
- if Cosmo_Parameters.USE_RELATIVE_VELOCITIES == True:
- self.A_vcb = A_vcb
- self.beta_vcb = beta_vcb
+ # number of LW photons per baryon
+ if not CosmoParams.Flag_emulate_21cmfast:
+ self.N_LW_II = 6200.0 #assuming BL05 stellar spectrum, equal to N_alpha_perbaryon_II * fraction of photons that fall in the LW band
+ self.N_LW_III = 12900.0 #assuming Intermediate IMF from 2202.02099, equal to 4.86e-22 / (11.9 * u.eV).to(u.erg).value * 5.8e14
else:
+ popIIcorrection = 0.6415670418531249/2.5 #scaling used by 21cmfast to get correct number of Pop II LW photons per baryon
+ self.N_LW_II = popIIcorrection * self.N_alpha_perbaryon_II
+ popIIIcorrection = 0.7184627927009317/6.5 #scaling used by 21cmfast to get correct number of Pop III LW photons per baryon
+ self.N_LW_III = popIIIcorrection * self.N_alpha_perbaryon_III
+
+ ### HAC: Relative Velocities parameters
+ if not CosmoParams.USE_RELATIVE_VELOCITIES:
self.A_vcb = 0.0
self.beta_vcb = 0.0
-
- #SFR(Mh) parameters:
- self.epsstar = epsstar #epsilon_* = f* at Mc
- self.dlog10epsstardz = dlog10epsstardz #dlog10epsilon/dz
- self._zpivot = 8.0 #fixed, at which z we evaluate eps and dlogeps/dz
- self.alphastar = alphastar #powerlaw index for lower masses
- self.betastar = betastar #powerlaw index for higher masses, only for model 0
- self.Mc = Mc # mass at which the power law cuts, only for model 0
- self.sigmaUV = sigmaUV #stochasticity (gaussian rms) in the halo-galaxy connection P(MUV | Mh) - TODO: only used in UVLF not sfrd
-
- self.fstarmax = 1.0 #where we cap it
-
- if self.astromodel == 0: #GALUMI-like
- self.accretion_model = accretion_model #0 = exponential, 1= EPS #choose the accretion model. Default = EPS
- elif self.astromodel == 1: #21cmfast-like, ignores Mc and beta and has a t* later in SFR()
- self.tstar = 0.5
- self.fstar10 = self.epsstar
+ ### 21cmFAST emulation: SFE parameters
+ if(self.Mturn_fixed == None): #The FIXED/SHARP routine below only applies to Pop II, not to Pop III
+ self.FLAG_MTURN_FIXED = False # whether to fix Mturn or use Matom(z) at each z
else:
- print('ERROR, need to pick astromodel')
+ self.FLAG_MTURN_FIXED = True # whether to fix Mturn or use Matom(z) at each z
- #fesc(M) parameter. Power law normalized (fesc10) at M=1e10 Msun with index alphaesc
- self.fesc10 = fesc10
- self.alphaesc = alphaesc
- self._clumping = 3.0 #clumping factor, z-independent and fixed for now
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- self._clumping = 2.0 #this is the 21cmFAST value
+ self._minsigmaPSD = 0.1 # Minimum sigma for the PSD, to avoid numerical issues in the FFT
+ self._maxsigmaPSD = 4.0 # Maximum sigma for the PSD, there'll never be enough samples if sigma>~6-10
+ self._mintauPSD = 1.0 # in Myr. Minimum tau for the PSD, to avoid numerical issues in the FFT
+ self._maxtauPSD = 300.0
+ self._tagesMyr = np.logspace(-2, 3, 79) #times (ages) we integrate over at each z, Mh, in Myr (TODO: add precisionboost)
- #xray parameters here, assumed power-law for now
- self.L40_xray = L40_xray # soft-band (E<2 keV) lum/SFR in Xrays in units of 10^40 erg/s/(Msun/yr)
- self.E0_xray = E0_xray #minimum energy in eV
- self.Emax_xray_norm = Emax_xray_norm #max energy in eV to normalize SED. Keep at 2000 eV normally
- self.Emax_xray_integral = 10000. #max energy in eV that we integrate up to. Higher than Emax_xray_norm since photons can redshift from higher z
- self.alpha_xray = alpha_xray #Xray SED power-law index
- if(self.E0_xray < constants.EN_ION_HI):
- print('What the heck? How can E0_XRAY < EN_ION_HI ?')
+ self._dt_FFT = 0.3 # FFT timescale resolution, Myr, high to resolve the PS_SFR and window functions well (TODO: add UserParams precisionboost here)
+ self._N_FFT = int(512/(self._dt_FFT/0.3)) # Recommend to use power of 2 for efficient FFT, resolve up to ~0.5Gyr at least
+ self._omegamin = 2*np.pi/1e3
+ self._omegamax = np.pi/1.0
- #table with how many energies we integrate over
- self.Nen_xray = 30
- self._log10EMIN_INTEGRATE = np.log10(self.E0_xray/2.0) # to account for photons coming from higher z that redshift
- self._log10EMAX_INTEGRATE = np.log10(self.Emax_xray_integral)
- self.Energylist = np.logspace(self._log10EMIN_INTEGRATE,self._log10EMAX_INTEGRATE,self.Nen_xray) #in eV
- self.dlogEnergy = (self._log10EMAX_INTEGRATE - self._log10EMIN_INTEGRATE)/(self.Nen_xray-1.0)*np.log(10.) #to get dlog instead of dlog10
- self.N_alpha_perbaryon_II=Nalpha_lyA_II #number of photons between LyA and Ly Cont. per baryon (from LB05)
- self.N_alpha_perbaryon_III=Nalpha_lyA_III #number of photons between LyA and Ly Cont. per baryon (from LB05)
-
- #number of ionizing photons per baryon
- self.N_ion_perbaryon_II = 5000 #fixed for PopII-type (Salpeter)
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- self.N_ion_perbaryon_III = 44000 #fixed for PopIII-type, from Klessen & Glover 2023 Table A2 (2303.12500)
- elif(Cosmo_Parameters.Flag_emulate_21cmfast==False):
- self.N_ion_perbaryon_III = 52480 #fixed for PopIII-type, from Klessen & Glover 2023 Table A2 (2303.12500)
-
- #number of LW photons per baryon
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False):
- self.N_LW_II = 6200.0 #assuming BL05 stellar spectrum, equal to N_alpha_perbaryon_II * fraction of photons that fall in the LW band
- self.N_LW_III = 12900.0 #assuming Intermediate IMF from 2202.02099, equal to 4.86e-22 / (11.9 * u.eV).to(u.erg).value * 5.8e14
-
- elif(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- popIIIcorrection = 0.7184627927009317/6.5 #scaling used by 21cmfast to get correct number of Pop III LW photons per baryon
- self.N_LW_III = popIIIcorrection * self.N_alpha_perbaryon_III
-
- popIIcorrection = 0.6415670418531249/2.5 #scaling used by 21cmfast to get correct number of Pop II LW photons per baryon
- self.N_LW_II = popIIcorrection * self.N_alpha_perbaryon_II
+@dataclass(kw_only=True)
+class LF_Parameters:
+ """
+ Luminosity functions parameters for zeus21.
+ Parameters
+ ----------
+ zcenter: float
+ Redshift bin center at which to compute the luminosity functions. Default is 6.0.
+ zwidth: float
+ Redshift bin width at which to compute the luminosity functions. Default is 0.5
+ RETURNLF: bool
+ Whether to compute LFs. Default is True.
+ RETURNBIAS: bool
+ Whether to compute bias. Default is False.
+ SKIP_POPII : bool
+ If True, skip the Pop II component. Default is False.
+ SKIP_POPIII : bool
+ If True, skip the Pop III component. Default is True.
+ SKIP_TOT : bool
+ If True, skip the summed component. Default is False.
+ FLAG_COMPUTE_UVLF: bool
+ Whether to compute the UV LF/bias. Default is True.
+ MUVcenters: np.ndarray | float
+ M_UV bin centers at which to compute the luminosity functions. Default is np.linspace(-23,-14,100).
+ MUVwidths: np.ndarray | float
+ M_UV bin width at which to compute the luminosity functions. Default is 0.5.
+ FLAG_RENORMALIZE_LUV
+ Whether to renormalize the lognormal LUV with sigmaUV to recover or otherwise . Default is False (recommended).
+ _kappaUV : float = 1.15e-28.
+ SFR-to-UV conversion factor in Msun/yr per erg/s/Hz.
+ sigmaUV: float
+ Stochasticity (gaussian rms) in the halo-galaxy connection P(MUV | Mh). Default is 0.5.
+ UV_boost_III : float
+ Pop III main-component UV conversion factor relative to Pop II. Default is 1.
+ _kappaUV_III : float = kappaUV/UV_boost_III.
+ SFR-to-UV conversion factor in Msun/yr per erg/s/Hz for Pop III main component.
+ sigmaUV_III : float
+ MUV scatter for the Pop III main component. Default is 0.5.
+ DUST_FLAG_III: bool
+ Whether to include dust attenuation to the LF calculations for Pop III main component. Default is False.
+ UV_boost_III_ACH : float
+ Pop III detached atomic-cooling-halo UV conversion factor relative to Pop II. Default is 1.
+ _kappaUV_III_ACH : float = kappaUV/UV_boost_III_ACH.
+ SFR-to-UV conversion factor in Msun/yr per erg/s/Hz for Pop III ACH component.
+ sigmaUV_III_ACH : float
+ MUV scatter for the detached Pop III ACH component. Default is 0.5.
+ DUST_FLAG_III_ACH: bool
+ Whether to include dust attenuation to the LF calculations for Pop III ACH component. Default is False.
+ FLAG_COMPUTE_HaLF: bool
+ Whether to compute the Ha LF/bias. Default is False.
+ log10LHacenters: np.ndarray | float
+ Ha bin centers at which to compute the luminosity functions, given in log10. Default is np.linspace(38,45,10).
+ log10LHawidths: np.ndarray | float
+ Ha bin width at which to compute the luminosity functions, given in log10. Default is 0.5.
+ DUST_FLAG: bool
+ Whether to include dust attenuation to the LF calculations. Default is True.
+ DUST_model: str
+ Which dust model to use. Default is "Bouwens13". Can also be "Zhao24" (https://arxiv.org/pdf/2401.07893.pdf, table 1).
+ HIGH_Z_DUST: bool
+ Whether to do dust at higher z than 0 or set to 0. Fix at beta(z=_zmaxdata) result if so. Default is True.
+ _zmaxdata : float
+ Maximum calibration redshift for the dust model. Default is 8.0.
+ C0dust: float
+ Calibration parameter for the dust correction for UVLF. Default is 4.43 (following Meurer+99). Input 4.54 for Overzier+01.
+ C1dust: float
+ Calibration parameter for the dust correction for UVLF. Default 1.99 for Meurer99. Input 2.07 for Overzier+01.
+ sigma_times_AUV_dust: float
+ If not 0, normalization factor to the sigma UV of dust. Default is 0.0.
+ """
- if(Mturn_fixed == None): #The FIXED/SHARP routine below only applies to Pop II, not to Pop III
- self.FLAG_MTURN_FIXED = False #whether to fix Mturn or use Matom(z) at each z
- else:
- self.FLAG_MTURN_FIXED = True #whether to fix Mturn or use Matom(z) at each z
- self.Mturn_fixed = Mturn_fixed
- self.FLAG_MTURN_SHARP = FLAG_MTURN_SHARP #whether to do sharp cut at Mturn_fixed or regular exponential cutoff. Only active if FLAG_MTURN_FIXED and turned on by hand.
-
- #dust parameters for UVLFs:
- self.C0dust, self.C1dust = C0dust, C1dust #4.43, 1.99 is Meurer99; 4.54, 2.07 is Overzier01
- self._kappaUV = 1.15e-28 #SFR/LUV, value from Madau+Dickinson14, fully degenerate with epsilon
- self._kappaUV_III = self._kappaUV #SFR/LUV for PopIII. Assume X more efficient than PopII
-
- # SarahLibanore - to use second order in SFR lognormal
- if not quadratic_SFRD_lognormal:
- self.quadratic_SFRD_lognormal = quadratic_SFRD_lognormal
- else:
- if not USE_POPIII and not Cosmo_Parameters.Flag_emulate_21cmfast:
- self.quadratic_SFRD_lognormal = quadratic_SFRD_lognormal
- else:
- if USE_POPIII:
- print('Quadratic SFRD not yet implemented when USE_POPIII = True; the code will use quadratic_SFRD_lognormal = False')
- if Cosmo_Parameters.Flag_emulate_21cmfast:
- print('Quadratic SFRD not yet implemented when Flag_emulate_21cmfast = True; the code will use quadratic_SFRD_lognormal = False')
- self.quadratic_SFRD_lognormal = False
-
- if min_t_formation_Myr is not None:
- if (not np.isscalar(min_t_formation_Myr)
- or not np.isfinite(min_t_formation_Myr)
- or min_t_formation_Myr <= 0):
- raise ValueError("min_t_formation_Myr must be None or a strictly positive finite number.")
- self.min_t_formation_Myr = min_t_formation_Myr #Minimum formation time of galaxies in Myr for UVLF, sets a minimum M*dot = M*/t_formation with fstar = 1
-
-
- def SED_XRAY(self, En, pop = 0): #pop set to zero as default, but it must be set to either 2 or 3
- "SED of our Xray sources, normalized to integrate to 1 from E0_xray to Emax_xray (int dE E * SED(E), and E*SED is the power-law with index alpha_xray, so the output is divided by 1/E at the end to return number). Takes energy En in eV"
- if pop == 2:
- alphaX = self.alpha_xray
- elif pop == 3:
- alphaX = self.alpha_xray_III
- else:
- print("Must set pop to either 2 or 3!")
-
- if np.abs(alphaX + 1.0) < 0.01: #log
- norm = 1.0/np.log(self.Emax_xray_norm/self.E0_xray) / self.E0_xray
- else:
- norm = (1.0 + alphaX)/((self.Emax_xray_norm/self.E0_xray)**(1 + alphaX) - 1.0) / self.E0_xray
-
- return np.power(En/self.E0_xray, alphaX)/En * norm * np.heaviside(En - self.E0_xray, 0.5)
- #do not cut at higher energies since they redshift into <2 keV band
-
- def SED_LyA(self, nu_in, pop = 0): #default pop set to zero so python doesn't complain, but must be 2 or 3 for this to work
- "SED of our Lyman-alpha-continuum sources, normalized to integrate to 1 (int d nu SED(nu), so SED is number per units energy (as opposed as E*SED, what was for Xrays) "
-
- nucut = constants.freqLyB #above and below this freq different power laws
- if pop == 2:
- amps = np.array([0.68,0.32]) #Approx following the stellar spectra of BL05. Normalized to unity
- indexbelow = 0.14 #if one of them zero worry about normalization
- normbelow = (1.0 + indexbelow)/(1.0 - (constants.freqLyA/nucut)**(1 + indexbelow)) * amps[0]
- indexabove = -8.0
- normabove = (1.0 + indexabove)/((constants.freqLyCont/nucut)**(1 + indexabove) - 1.0) * amps[1]
- elif pop == 3:
- amps = np.array([0.56,0.44]) #Approx following the stellar spectra of BL05. Normalized to unity
- indexbelow = 1.29 #if one of them zero worry about normalization
- normbelow = (1.0 + indexbelow)/(1.0 - (constants.freqLyA/nucut)**(1 + indexbelow)) * amps[0]
- indexabove = 0.2
- normabove = (1.0 + indexabove)/((constants.freqLyCont/nucut)**(1 + indexabove) - 1.0) * amps[1]
+ zcenter: float = 6.
+ zwidth: float = 0.5
+
+ ### Flags for computing LFs and bias for available populations
+ RETURNLF: bool = True
+ RETURNBIAS: bool = False
+ SKIP_POPII: bool = False
+ SKIP_POPIII: bool = True
+ SKIP_TOT: bool = False
+
+ ### General UVLF parameters
+ FLAG_COMPUTE_UVLF: bool = True
+ MUVcenters: np.ndarray | float = _field(default_factory=lambda: np.linspace(-23,-14,100))
+ MUVwidths: np.ndarray | float = 0.5
+ FLAG_RENORMALIZE_LUV: bool = False # Whether to renormalize the lognormal LUV with sigmaUV to recover or otherwise . Recommend False.
+ _kappaUV: float = _field(init=False) # in SFR/LUV. Set by zeus21 to the value from Madau+Dickinson14, fully degenerate with epsilon
+ sigmaUV: float = 0.5
+
+ ### PopIII UVLF parameters (main component)
+ UV_boost_III: float = 1.
+ _kappaUV_III: float = _field(init=False) # in SFR/LUV for PopIII. Set by zeus21 to be a factor UV_boost_III times more efficient than PopII.
+ sigmaUV_III: float = 0.5
+ DUST_FLAG_III: bool = False
+
+ ### PopIII UVLF parameters (ACH component)
+ UV_boost_III_ACH: float = 1.
+ _kappaUV_III_ACH: float = _field(init=False) # in SFR/LUV for PopIII. Set by zeus21 to be a factor UV_boost_III_ACH times more efficient than PopII.
+ sigmaUV_III_ACH: float = 0.5
+ DUST_FLAG_III_ACH: bool = False
+
+ ### Halpha LF parameters
+ log10LHacenters: np.ndarray | float = _field(default_factory=lambda: np.linspace(38,45,10))
+ log10LHawidths: np.ndarray | float = 0.5
+ FLAG_COMPUTE_HaLF: bool = False
+
+ ### Dust parameters for UVLFs
+ DUST_FLAG: bool = True
+ DUST_model: str = 'Bouwens13'
+ HIGH_Z_DUST: bool = True
+ _zmaxdata: float = 8.0
+ C0dust: float = 4.43
+ C1dust: float = 1.99 #4.43, 1.99 is Meurer99; 4.54, 2.07 is Overzier01
+ sigma_times_AUV_dust: float = 0.
+
+ def __post_init__(self):
+ schema = {
+ "RETURNLF": (bool, None),
+ "RETURNBIAS": (bool, None),
+ "FLAG_COMPUTE_UVLF": (bool, None),
+ "FLAG_COMPUTE_HaLF": (bool, None),
+ "FLAG_RENORMALIZE_LUV": (bool, None),
+ "DUST_FLAG": (bool, None),
+ "HIGH_Z_DUST": (bool, None),
+ "DUST_model": (str, {"Bouwens13", "Zhao24"}),
+ }
+ validate_fields(self, schema)
+
+
+ # --- normalize MUV ---
+ if np.isscalar(self.zcenter):
+ self.MUVcenters = np.array(self.MUVcenters, dtype=float)
else:
- print("Must set pop to 2 or 3!")
-
- nulist = np.asarray([nu_in]) if np.isscalar(nu_in) else np.asarray(nu_in)
+ self.MUVcenters = np.atleast_1d(self.MUVcenters).astype(float)
- result = np.zeros_like(nulist)
- for inu, currnu in enumerate(nulist):
- if (currnu=constants.freqLyCont):
- result[inu] = 0.0
- elif (currnu < nucut): #between LyA and LyB
- result[inu] = normbelow * (currnu/nucut)**indexbelow
- elif (currnu >= nucut): #between LyB and Continuum
- result[inu] = normabove * (currnu/nucut)**indexabove
- else:
- print("Error in SED_LyA, whats the frequency Kenneth?")
+ # --- normalize MUVwidth ---
+ if np.isscalar(self.MUVwidths):
+ # broadcast scalar to same length as zcenter
+ self.MUVwidths = np.full_like(self.MUVcenters, self.MUVwidths, dtype=float)
+ else:
+ self.MUVwidths = np.atleast_1d(self.MUVwidths).astype(float)
+ # --- consistency check ---
+ if self.MUVwidths.shape != self.MUVcenters.shape:
+ raise ValueError(
+ f"MUVwidth shape {self.MUVwidths.shape} does not match MUVcenter shape {self.MUVcenters.shape}"
+ )
- return result/nucut #extra 1/nucut because dnu, normalizes the integral
-
+ # --- normalize logLHa ---
+ if np.isscalar(self.log10LHacenters):
+ self.log10LHacenters = np.array([self.log10LHacenters], dtype=float)
+ else:
+ self.log10LHacenters = np.atleast_1d(self.log10LHacenters).astype(float)
-
-###HAC: Original SED_LyA
-# def SED_LyA(self, nu_in):
-# "SED of our Lyman-alpha-continuum sources, normalized to integrate to 1 (int d nu SED(nu), so SED is number per units energy (as opposed as E*SED, what was for Xrays) "
-#
-# nucut = constants.freqLyB #above and below this freq different power laws
-# amps = np.array([0.68,0.32]) #Approx following the stellar spectra of BL05. Normalized to unity
-#
-# indexbelow = 0.14 #if one of them zero worry about normalization
-# normbelow = (1.0 + indexbelow)/(1.0 - (constants.freqLyA/nucut)**(1 + indexbelow)) * amps[0]
-# indexabove = -8.0
-# normabove = (1.0 + indexabove)/((constants.freqLyCont/nucut)**(1 + indexabove) - 1.0) * amps[1]
-#
-# nulist = np.asarray([nu_in]) if np.isscalar(nu_in) else np.asarray(nu_in)
-#
-# result = np.zeros_like(nulist)
-# for inu, currnu in enumerate(nulist):
-# if (currnu=constants.freqLyCont):
-# result[inu] = 0.0
-# elif (currnu < nucut): #between LyA and LyB
-# result[inu] = normbelow * (currnu/nucut)**indexbelow
-# elif (currnu >= nucut): #between LyB and Continuum
-# result[inu] = normabove * (currnu/nucut)**indexabove
-# else:
-# print("Error in SED_LyA, whats the frequency Kenneth?")
-#
-#
-# return result/nucut #extra 1/nucut because dnu, normalizes the integral
+ # --- normalize logHazwidth ---
+ if np.isscalar(self.log10LHawidths):
+ # broadcast scalar to same length as zcenter
+ self.log10LHawidths = np.full_like(self.log10LHacenters, self.log10LHawidths, dtype=float)
+ else:
+ self.log10LHawidths = np.atleast_1d(self.log10LHawidths).astype(float)
+
+ # --- consistency check ---
+ if self.log10LHawidths.shape != self.log10LHacenters.shape:
+ raise ValueError(
+ f"log10Hawidth shape {self.log10LHawidths.shape} does not match log10Hacenter shape {self.log10LHacenters.shape}"
+ )
+
+ ### Parameters for SFR-to-LUV conversion
+ self._kappaUV = 1.15e-28 # SFR/LUV, value from Madau+Dickinson14, fully degenerate with epsilon
+ self._kappaUV_III = self._kappaUV / self.UV_boost_III # SFR/LUV for PopIII main component
+ self._kappaUV_III_ACH = self._kappaUV / self.UV_boost_III_ACH # SFR/LUV for PopIII ACH component
+
+
+def validate_fields(obj, schema: dict):
+ """ Helper function to check whether the input parameters are set with the proper values. """
+ for field, (expected_type, allowed_values) in schema.items():
+ value = getattr(obj, field)
+
+ if not isinstance(value, expected_type):
+ raise TypeError(
+ f"{field} must be of type {expected_type.__name__}, got {type(value).__name__}"
+ )
+
+ if allowed_values is not None and value not in allowed_values:
+ raise ValueError(
+ f"{field} must be one of {allowed_values}, got '{value}'"
+ )
diff --git a/zeus21/maps.py b/zeus21/maps.py
index e8bcd4c..2c7ff04 100644
--- a/zeus21/maps.py
+++ b/zeus21/maps.py
@@ -1,125 +1,794 @@
"""
-
-Make maps! For fun and science
-
-Author: Julian B. Muñoz
-UT Austin - August 2024
-
+Make maps! For fun and science.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
"""
from . import cosmology
-from . import constants
+from . import z21_utilities
+from . import inputs
+from . import T21coefficients
+from . import correlations
import numpy as np
import powerbox as pbox
from scipy.interpolate import interp1d
-from pyfftw import empty_aligned as empty
-
-
-class CoevalMaps:
- "Class that calculates and keeps coeval maps, one z at a time."
-
- def __init__(self, T21_coefficients, Power_Spectrum, z, Lbox=600, Nbox=200, KIND=None, seed=1605):
- 'the KIND flag determines the kind of map you make. Options are:'
- 'KIND = 0, only T21 lognormal. OK approximation'
- 'KIND = 1, density and T21 correlated. T21 has a gaussian and a lognormal component. Decent approximation'
- 'KIND = 2, all maps'
- 'KIND = 3, same as 2 but integrating over all R. Slow but most accurate'
-
- zlist = T21_coefficients.zintegral
- _iz = min(range(len(zlist)), key=lambda i: np.abs(zlist[i]-z)) #pick closest z
- self.T21global = T21_coefficients.T21avg[_iz]
- self.Nbox = Nbox
- self.Lbox = Lbox
+from scipy.interpolate import InterpolatedUnivariateSpline as spline
+from tqdm import trange
+import time
+from dataclasses import dataclass, field as _field, InitVar
+import copy
+
+
+@dataclass(kw_only=True)
+class ReioMapsConfig:
+ """
+ All arguments of reionization_maps that have default values
+ """
+ input_boxlength: float = 300.
+ ncells: int = 300
+ seed: int = 1234
+ r_precision: float = 1.
+ Rs: list | np.ndarray | None = None
+ barrier: np.ndarray = None
+ PRINT_TIMER: bool = True
+ LOGNORMAL_DENSITY: bool = False
+ COMPUTE_DENSITY_AT_ALLZ: bool = False
+ COMPUTE_MASSWEIGHTED: bool = False
+ lowres_massweighting: int = 1
+ COMPUTE_PARTIAL_IONIZATIONS: bool = False
+ COMPUTE_ZREION: bool = False
+
+
+
+class reionization_maps:
+ """
+ Generates 3D maps of the reionization fields.
+
+ Uses a density threshold barrier determined from a converged bubble mass function. With default parameters, the code takes about 20 minutes on laptop to run.
+
+ Parameters
+ ----------
+ CosmoParams: zeus21.Cosmo_Parameters class
+ Stores cosmology.
+ CoeffStructure: zeus21.get_T21_coefficients class
+ Stores sfrd and 21cm coefficients.
+ input_z: 1D np.array
+ The redshifts at which to compute output maps. Narrowed down later to select available redshifts from CoeffStructure.zintegral.
+ input_boxlength: float
+ Comoving physical side length of the box. Default is 300 cMpc.
+ ncells: int
+ Number of cells on a side. Default is 300 cells.
+ seed: int
+ Sets the predetermined generation of maps. Default is 1234.
+ r_precision: float
+ Allows to change the steps of the radii for faster computation. Default (and max) is 1, lower values make the computation faster at the cost of accuracy.
+ barrier: function
+ Input density barrier to be used as the threshold for map generation. Takes z value as input and returns np.array of shape. Default is None.
+ PRINT_TIMER: bool
+ Whether to print the time elapsed along the process. Default is True.
+ LOGNORMAL_DENSITY: bool
+ Whether to use lognormal (True) or Gaussian (False) density fields. Default is False.
+ COMPUTE_DENSITY_AT_ALLZ: bool
+ Whether to output the density field at all redshifts. If False, only the density at the lower input redshift is computed. If True, the computation time and memory usage dramatically increases. Default is False.
+ COMPUTE_MASSWEIGHTED: bool
+ Whether to compute the mass weighted ionized field and fraction. If True, COMPUTE_DENSITY_AT_ALLZ will be forced to True, thus increasing computation time dramatically. Default is False.
+ lowres_massweighting: int
+ Compute the mass-weighted ionized field and fraction more efficiently by using lower resolution density and ionized fields. Has to be >=1 and an integer. Default is 1.
+ COMPUTE_PARTIAL_IONIZATIONS: bool
+ Whether to compute the subpixel ionizations in the field and the ionized fractions.
+
+ Attributes
+ ----------
+ dx: float
+ Cell resolution of a side of the boxes.
+ z: 1D np.array
+ Redshifts at which the output maps are computed. Selected to be the closest to the input redshifts from the available ones in zeus21.
+ r: 1D np.array
+ Radii at which the density field is smoothed. Selected using r_precision from the available ones in zeus21.
+ z_of_density: float
+ Redshift at which the density is computed.
+ density: 3D np.array
+ Overdensity field at the lowest redshift asked by the user.
+ density_allz: 4D np.array
+ Overdensity field at all the redshifts asked by the user. First dimension correponds to redshifts. Only computed if COMPUTE_DENSITY_AT_ALLZ is True.
+ ion_field_allz: 4D np.array
+ Ionized fraction field at all the redshifts asked by the user. First dimension correponds to redshifts.
+ ion_frac: 1D np.array
+ Volume weighted ionized fraction at all the redshifts asked by the user.
+ ion_frac_massweighted: 1D np.array
+ Mass weighted ionized fraction at all the redshifts asked by the user. Only computed if COMPUTE_MASSWEIGHTED is True.
+ """
+
+ def __init__(self, CosmoParams, CoeffStructure, input_z,
+ input_boxlength=300., ncells=300, seed=1234, r_precision=1., Rs=None, barrier=None,
+ PRINT_TIMER=True,
+ LOGNORMAL_DENSITY=False, COMPUTE_DENSITY_AT_ALLZ=False,
+ COMPUTE_MASSWEIGHTED=False, lowres_massweighting=1, COMPUTE_PARTIAL_IONIZATIONS=False,
+ COMPUTE_ZREION=False
+ ):
+ #Measure time elapsed from start
+ self._start_time = time.time()
+
+ ### boxes parameters
+ self.input_z = input_z
+ self.ncells = ncells
+ self.boxlength = input_boxlength
+ self.dx = self.boxlength/self.ncells
+
+ # radii
+ if Rs is None:
+ default_len = len(CosmoParams._Rtabsmoo)
+ self.r_precision = r_precision
+ self.r = np.logspace(np.log10(self.dx * (3/4/np.pi)**(1/3)), np.log10(self.boxlength), int(default_len*self.r_precision))
+ self._r_idx = np.arange(int(default_len*self.r_precision))
+ else:
+ self.r_precision = r_precision
+ self.r = Rs
+ if self.r_precision > 1:
+ raise ValueError('r_precision cannot be greater than 1 if you input your own radii.')
+ self._r_idx = np.floor(np.arange(len(self.r), step=self.r_precision)).astype(int)
+ smallest_r = self.dx * (3/4/np.pi)**(1/3)
+ if self.r[0] < smallest_r:
+ print(f'WARNING: Your input radii are too small for the pixel size. The code will still run now.\nIn the future, for best performance and physical accuracy on this boxlength and ncells, the smallest smoothing radius should be no less than R=L/N * (4pi/3)^(-1/3), or approximately {smallest_r:.2f} cMpc.')
+
self.seed = seed
- self.z = zlist[_iz] #will be slightly different from z input
-
- klist = Power_Spectrum.klist_PS
- k3over2pi2 = klist**3/(2*np.pi**2)
-
-
- if (KIND == 0): #just T21, ~gaussian
-
- P21 = Power_Spectrum.Deltasq_T21_lin[_iz]/k3over2pi2
- P21norminterp = interp1d(klist,P21/self.T21global**2,fill_value=0.0,bounds_error=False)
+ ### FLAGS
+ self.PRINT_TIMER = PRINT_TIMER
+ self.LOGNORMAL_DENSITY = LOGNORMAL_DENSITY
+ self.COMPUTE_DENSITY_AT_ALLZ = COMPUTE_DENSITY_AT_ALLZ
+ self._has_density = COMPUTE_DENSITY_AT_ALLZ
+ self.COMPUTE_MASSWEIGHTED = COMPUTE_MASSWEIGHTED
+ self.COMPUTE_PARTIAL_IONIZATIONS = COMPUTE_PARTIAL_IONIZATIONS
+ self.COMPUTE_PARTIAL_AND_MASSWEIGHTED = False
+ if self.COMPUTE_MASSWEIGHTED and self.COMPUTE_PARTIAL_IONIZATIONS:
+ self.COMPUTE_PARTIAL_AND_MASSWEIGHTED = True
+ self.COMPUTE_ZREION = COMPUTE_ZREION
+ if self.COMPUTE_MASSWEIGHTED or self.COMPUTE_PARTIAL_IONIZATIONS or self.COMPUTE_PARTIAL_AND_MASSWEIGHTED:
+ self.COMPUTE_DENSITY_AT_ALLZ = True
+
+ ### selecting redshifts and radii from available redshifts
+ # redshifts
+ self._z_idx = np.arange(len(np.atleast_1d(input_z))) #z21_utilities.find_nearest_idx(CoeffStructure.zintegral, self.input_z)
+ self.z = np.atleast_1d(input_z) #CoeffStructure.zintegral[self._z_idx]
+
+ ### generating the density field at the closest redshift to the lower one inputed
+ self.z_of_density = self.z[0]
+ self.density = self.generate_density(CosmoParams)
+ self.sig_corr = self.sigma_correction(CosmoParams)
+ self.density /= self.sig_corr #non-ergodicity correction
+
+ ### smoothing the density field
+ self._k = self.compute_k()
+ self.density_smoothed_allr = self.smooth_density()
+
+ ### evolving density
+ self.density_allz = np.empty((len(self.z), self.ncells, self.ncells, self.ncells), dtype=np.float32)
+ if self.COMPUTE_DENSITY_AT_ALLZ:
+ self.generate_density_allz(CosmoParams)
+
+ ### generating the ionized field, and computing the ionized fraction
+ self.barrier = barrier
+ if self.barrier is None:
+ self.barrier = CoeffStructure.B(self.z, self.r) #BMF linear barrier
+ self.ion_field_allz, self.ion_frac = self.generate_xHII(CosmoParams)
+
+ ### computing the mass weighted ionized fraction
+
+ self._has_mw = False
+ self.lowres_massweighting = lowres_massweighting
+ if self.COMPUTE_MASSWEIGHTED:
+ self.compute_massweighted(CosmoParams, self.lowres_massweighting)
+
+ self._has_p = False
+ if self.COMPUTE_PARTIAL_IONIZATIONS:
+ self.compute_partial(CosmoParams, CoeffStructure)
+
+ self._has_mwp = False
+ if self.COMPUTE_PARTIAL_AND_MASSWEIGHTED:
+ self.compute_partial_massweighted(CosmoParams, CoeffStructure)
+
+ if self.COMPUTE_ZREION:
+ self.zreion = self.compute_zreion_frombinaryxHII()
+ self.treion = self.compute_treion(CosmoParams)
+
+
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(self._start_time, text_before="Total computation time: ")
+
+
+ def generate_density(self, CosmoParams):
+ """
+ Generates the initial density field at the lowest redshift.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+
+ Returns
+ -------
+ density_field : array
+ Three-dimensional delta field evaluated at self.z_of_density.
+ """
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Generating density field...")
+ #generating matter power spectrum at the lowest redshift
+ klist = CosmoParams._klistCF
+ pk_matter = np.zeros_like(klist)
+ for i, k in enumerate(klist):
+ pk_matter[i] = CosmoParams.ClassCosmo.pk(k, self.z_of_density)
+ pk_spl = spline(np.log(klist), np.log(pk_matter))
+
+ #generating density map
+ if self.LOGNORMAL_DENSITY:
+ pb = pbox.LogNormalPowerBox(N=self.ncells, dim=3, pk=(lambda k: np.exp(pk_spl(np.log(k)))), boxlength=self.boxlength, seed=self.seed)
+ else:
+ pb = pbox.PowerBox(N=self.ncells, dim=3, pk=(lambda k: np.exp(pk_spl(np.log(k)))), boxlength=self.boxlength, seed=self.seed)
+ density_field = pb.delta_x().astype(np.float32, copy=False)
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+ return density_field
+
+ def generate_density_allz(self, CosmoParams):
+ """
+ Evolves the density field to all redshifts using the linear growth factor.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+
+ Returns
+ -------
+ density_allz : array
+ Four-dimensional delta field. The first dimension is z.
+ """
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print('Evolving density field...')
+ Dg = CosmoParams.growthint(self.z)
+ growthfactor_ratio = (Dg/Dg[0])[:, np.newaxis, np.newaxis, np.newaxis]
+ density_lastz = np.copy(self.density)
+ self.density_allz = density_lastz[np.newaxis]*growthfactor_ratio
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+
+ self._has_density = True
+
+ return self.density_allz
+
+ def compute_k(self):
+ """
+ Computes the Fourier-space wavenumber grid for the box.
+
+ Returns
+ -------
+ k : array
+ Three-dimensional array of wavenumber magnitudes.
+ """
+ klistfftx = np.fft.fftfreq(self.ncells,self.dx)*2*np.pi
+ k = np.sqrt(np.sum(np.meshgrid(klistfftx**2, klistfftx**2, klistfftx**2, indexing='ij'), axis=0))
+ return k
+
+ def smooth_density(self):
+ """
+ Smooths the density field over all smoothing radii.
+
+ Returns
+ -------
+ density_smoothed_allr : array
+ Density field smoothed at each radius in self.r.
+ """
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Smoothing density field...")
+
+ #smooth by FFT convolution with a tophat
+ density_fft = np.fft.fftn(self.density)
+ density_smoothed_allr = np.array([z21_utilities.tophat_smooth(rr, self._k, density_fft) for rr in self.r])
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+ return density_smoothed_allr
+
+ def sigma_correction(self, CosmoParams):
+ """
+ Computes the non-ergodicity correction to the generated density variance.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+
+ Returns
+ -------
+ sigma_ratio : float
+ Ratio between the measured and theoretical sigma.
+ """
+ sigma_ratio = np.std(self.density)/CosmoParams.ClassCosmo.sigma(self.r[0], self.z_of_density)
+ return sigma_ratio
+
+ def generate_xHII(self, CosmoParams):
+ """
+ Generates ionized fraction fields and volume-weighted ionized fractions.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+
+ Returns
+ -------
+ ion_field_allz : array
+ Ionized fraction field at each redshift.
+ ion_frac : array
+ Volume-weighted ionized fraction at each redshift.
+ """
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Generating ionized field...")
+ ion_field_allz = np.zeros((len(self.z),self.ncells,self.ncells,self.ncells))
+ ion_frac = np.zeros(len(self.z))
+
+ #choose iterator based on if the user wants to print progress or not.
+ iterator = trange(len(self.z)) if self.PRINT_TIMER else range(len(self.z))
+
+ for i in iterator:
+ curr_z_idx = self._z_idx[i]
+ ion_field = self.ionize(CosmoParams, curr_z_idx)
+ ion_field_allz[i] = ion_field
+ ion_frac[i] = np.sum(ion_field)/(self.ncells**3)
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+ return ion_field_allz, ion_frac
+
+ def ionize(self,CosmoParams, curr_z_idx):
+ """
+ Computes the binary ionized field at a single redshift.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ curr_z_idx : int
+ Index of the redshift at which to compute the ionized field.
+
+ Returns
+ -------
+ ion_field : array
+ Binary ionized field at curr_z.
+ """
+ Dg0 = CosmoParams.growthint(self.z[0])
+ Dg = CosmoParams.growthint(self.z[curr_z_idx])
+ Dg0_Dg = Dg0/Dg
+ ion_field = np.any(self.density_smoothed_allr > (Dg0_Dg)*self.barrier[curr_z_idx, self._r_idx][:, None, None, None], axis=0)
+
+ #Earlier versions of this code contained a spherize method in addition to this central pixel flagging, where spheres are ionized instead of just the central pixel.
+ #We found that central pixel flagging is generally more consistent with the bubble mass function than spherizing, so future versions will not include this.
+
+ return ion_field
+
+ def compute_massweighted(self, CosmoParams, lowres_massweighting=1):
+ """
+ Computes the mass-weighted ionized field and ionized fraction.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ lowres_massweighting : int, optional
+ Factor by which to downsample the density and ionized fields for mass weighting. Default is 1.
+
+ Returns
+ -------
+ ion_frac_massweighted : array
+ Mass-weighted ionized fraction at each redshift.
+ ion_field_massweighted_allz : array
+ Mass-weighted ionized field at each redshift.
+ """
+ if not self._has_mw:
+ self.ion_frac_massweighted = np.empty(len(self.z))
+ self.ion_field_massweighted_allz = np.empty_like(self.ion_field_allz)
+ if not self._has_density:
+ self.generate_density_allz(CosmoParams)
+ self.lowres_massweighting = lowres_massweighting
+ if self.lowres_massweighting < 1:
+ raise Exception('lowres_massweighting should be >=1.')
+ if not isinstance(self.lowres_massweighting, (int, np.int32, np.int64)):
+ raise Exception('lowres_massweighting should be an integer.')
+ d_allz = self.density_allz[:, ::self.lowres_massweighting, ::self.lowres_massweighting, ::self.lowres_massweighting]
+ ion_allz = self.ion_field_allz[:, ::self.lowres_massweighting, ::self.lowres_massweighting, ::self.lowres_massweighting]
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Computing mass-weighted field...")
+ #where the magic happens
+ self.ion_field_massweighted_allz = (1+d_allz) * ion_allz
+ if self.PRINT_TIMER:
+ print("Computing mass-weighted ionized fraction...")
+ self.ion_frac_massweighted = np.average(self.ion_field_massweighted_allz, axis=(1, 2, 3))
+
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+
+ self._has_mw = True
+
+ return self.ion_frac_massweighted, self.ion_field_massweighted_allz
+
+ def compute_partial(self, CosmoParams, CoeffStructure, r=None):
+ """
+ Computes the partially ionized field and volume-weighted partially ionized fraction.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ CoeffStructure : get_T21_coefficients class
+ r : float, optional
+ Smoothing radius in cMpc used to evaluate the prebarrier ionized fraction. Default is None, in which case self.r[0] is used.
+
+ Returns
+ -------
+ ion_frac_partial : array
+ Volume-weighted partially ionized fraction at each redshift.
+ ion_field_partial_allz : array
+ Partially ionized field at each redshift.
+ """
+ if r is None:
+ r = self.r[0]
+ if not self._has_p:
+ self.ion_frac_partial = np.empty(len(self.z))
+ self.ion_field_partial_allz = np.empty_like(self.ion_field_allz)
+ if not self._has_density:
+ self.generate_density_allz(CosmoParams)
+ sample_d = np.linspace(-5, 5, 51)
+
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Computing partially ionized field...")
+
+ #loop over each z.
+ out_shape = self.density.shape
+ iterator = trange(len(self.z)) if self.PRINT_TIMER else range(len(self.z))
+ for i in iterator:
+ #evaluate sample grid, and then input the actual density field into an interpolator.
+ tempgrid = CoeffStructure.prebarrier_xHII_int_grid(sample_d, self.z[i], r)
+
+ partialfield = np.interp(self.density.ravel(), sample_d, tempgrid).reshape(out_shape)
+
+ np.abs(partialfield, out=partialfield)#abs just in case, beacuse negative numbers here are unphysical
+ #add partials to binaries and then clip to 1.
+ np.add(self.ion_field_allz[i], partialfield, out=self.ion_field_partial_allz[i])
+ np.clip(self.ion_field_partial_allz[i], 0, 1, out=self.ion_field_partial_allz[i])
- pb = pbox.PowerBox(
- N=self.Nbox,
- dim=3,
- pk = lambda k: P21norminterp(k),
- boxlength = self.Lbox,
- seed = self.seed
- )
+ if self.PRINT_TIMER:
+ print("Computing partial ionized fraction...")
- self.T21map = self.T21global * (1 + pb.delta_x() )
- self.deltamap = None
+ self.ion_frac_partial = np.average(self.ion_field_partial_allz, axis=(1, 2, 3))
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+ self._has_p = True
- elif (KIND == 1):
- Pd = Power_Spectrum.Deltasq_d_lin[_iz,:]/k3over2pi2
- Pdinterp = interp1d(klist,Pd,fill_value=0.0,bounds_error=False)
-
+ return self.ion_frac_partial, self.ion_field_partial_allz
+
+ def compute_partial_massweighted(self, CosmoParams, CoeffStructure, r=None):
+ """
+ Computes the mass-weighted partially ionized field and fraction.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ CoeffStructure : get_T21_coefficients class
+ r : float, optional
+ Smoothing radius in cMpc used to evaluate the prebarrier ionized fraction. Default is None, in which case self.r[0] is used.
+
+ Returns
+ -------
+ ion_frac_partial_massweighted : array
+ Mass-weighted partially ionized fraction at each redshift.
+ ion_field_partial_massweighted_allz : array
+ Mass-weighted partially ionized field at each redshift.
+ """
+ if not self._has_p:
+ self.compute_partial(CosmoParams, CoeffStructure, r)
+
+ if not self._has_mwp:
+ self.ion_frac_partial_massweighted = np.empty(len(self.z))
+ self.ion_field_partial_massweighted_allz = np.empty_like(self.ion_field_allz)
+
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Computing mass-weighted partially ionized field...")
+
+ #where the magic happens
+ iterator = trange(len(self.z)) if self.PRINT_TIMER else range(len(self.z))
+ for i in iterator:
+ self.ion_field_partial_massweighted_allz[i] = (1+self.density_allz[i]) * self.ion_field_partial_allz[i]
+
+ if self.PRINT_TIMER:
+ print("Computing mass-weighted partial ionized fraction...")
+
+ iterator = trange(len(self.z)) if self.PRINT_TIMER else range(len(self.z))
+ for i in iterator:
+ self.ion_frac_partial_massweighted[i] = np.average(self.ion_field_partial_massweighted_allz[i])
+
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+
+ self._has_mwp = True
+
+ return self.ion_frac_partial_massweighted, self.ion_field_partial_massweighted_allz
+
+ def compute_zreion_frombinaryxHII(self):
+ """
+ Computes the redshift-of-reionization map from the binary ionized fraction field.
+
+ Returns
+ -------
+ zreion : array
+ Three-dimensional map of the z at which each cell is first ionized.
+ """
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Computing zreion map...")
+
+ vectorized_zlist = np.vectorize(lambda iz: self.z[iz])
+ zreion = vectorized_zlist(np.argmin(self.ion_field_allz,axis=0)-1).reshape((self.ncells,self.ncells,self.ncells))
+
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+ return zreion
+
+ def compute_treion(self,CosmoParams):
+ """
+ Computes the time-of-reionization map from the redshift-of-reionization map.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+
+ Returns
+ -------
+ treion : array
+ Three-dimensional map of the time at which each cell becomes ionized.
+ """
+ if self.PRINT_TIMER:
+ start_time = time.time()
+ print("Computing treion map...")
+
+ treion = cosmology.time_at_redshift(CosmoParams.ClassCosmo,self.zreion)
+
+ if self.PRINT_TIMER:
+ z21_utilities.print_timer(start_time, text_before=" done in ")
+ return treion
+
+ def _compute_ionfrac_from_zreion(self):
+ """
+ Way to compute the volume ionized fraction from zreion. Currently not used but there if needed.
+ """
+ zvalues = np.unique(self.zreion)
+ neutfrac = np.zeros(len(zvalues))
+ for i in range(len(zvalues)):
+ neutfrac[i] = np.sum(self.zreiontvalues[i]) / self.ncells**3
+ return 1-neutfrac, tvalues
+
+
+@dataclass()
+class T21_maps:
+ # arguments to pass
+ CosmoParams: InitVar[inputs.Cosmo_Parameters]
+ CoeffStructure: InitVar[T21coefficients.get_T21_coefficients]
+ PowerSpectra: InitVar[correlations.Power_Spectra]
+ input_z: np.ndarray
+
+ # reionization
+ ReioMaps_config: ReioMapsConfig = _field(default_factory=ReioMapsConfig)
+ ReioMaps: reionization_maps = _field(init=False)
+
+ # flag
+ USE_xHII_MAPS: bool = _field(default=True)
+ COMPUTE_TAU: bool = _field(default=False)
+
+ # box params
+ input_boxlength: float = _field(default=300.)
+ ncells: int = _field(default=300)
+ seed: int = _field(default=1234)
+ input_Resolution: float = _field(default=0.5)
+
+ # boxes
+ density: np.ndarray = _field(init=False)
+ xHI: np.ndarray = _field(init=False)
+ xHI_massweighted: np.ndarray = _field(init=False)
+ tau: np.ndarray = _field(init=False)
+ T21_lin: np.ndarray = _field(init=False)
+ T21_NL: np.ndarray = _field(init=False)
+ T21: np.ndarray = _field(init=False)
+ smooth_box: bool = _field(default=False)
+ xHI_smooth: np.ndarray = _field(init=False)
+ T21_smooth: np.ndarray = _field(init=False)
+
+ # other attributes
+ _klist: np.ndarray = _field(init=False)
+ _k3over2pi2: np.ndarray = _field(init=False)
+ T21avg: np.ndarray = _field(init=False)
+ _Dsq_T21_lin: np.ndarray = _field(init=False)
+ _Dsq_T21: np.ndarray = _field(init=False)
+ _PdT21: np.ndarray = _field(init=False)
+ _Pd: np.ndarray = _field(init=False)
+
+
+ def __post_init__(self, CosmoParams, CoeffStructure, PowerSpectra):
+ """
+ Generates 21cm maps.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ CoeffStructure : get_T21_coefficients class
+ PowerSpectra : Power_Spectra class
+
+ Returns
+ -------
+ None
+ """
+
+ ### z and k
+ _iz = z21_utilities.find_nearest_idx(CoeffStructure.zlist, self.input_z)
+ self._klist = PowerSpectra.klist_PS
+ self._k3over2pi2 = self._klist**3/(2*np.pi**2)
+
+ ### get T21 avg
+ if self.USE_xHII_MAPS:
+ # in this case, we will use the simulated xHI with reionization_maps
+ # so, we need to remove the xHI contribution from T21avg
+ self.T21avg = (CoeffStructure.T21avg / (CoeffStructure.xHI_avg + 1e-15))[_iz]
+ else:
+ self.T21avg = CoeffStructure.T21avg[_iz]
+
+ ### get power spectra
+ self._Dsq_T21_lin = ((PowerSpectra.Deltasq_T21_lin[_iz].T / CoeffStructure.T21avg[_iz]**2) * self.T21avg**2).T
+ self._Dsq_T21 = ((PowerSpectra.Deltasq_T21[_iz].T / CoeffStructure.T21avg[_iz]**2) * self.T21avg**2).T
+ self._PdT21 = (PowerSpectra.Deltasq_dT21[_iz]/CoeffStructure.T21avg[_iz])* self.T21avg/self._k3over2pi2
+ self._Pd = (PowerSpectra.Deltasq_d_lin[_iz,:])/self._k3over2pi2
+
+ ### generate densities
+ self.density, pbs = self.generate_density_pb()
+
+
+ ### map of the linear T21 fluctuation, better to use the cross to keep sign, at linear level same
+ self.T21_lin = self.generate_T21_lin(pbs)
+
+ ### map of the nonlinear correction
+ # built as \sum_R [e^(gR dR) - gR dR]. Uncorrelatd with all dR so just a separate field!
+ # NOTE: its not guaranteed to work, excess power can be negative in some cases! Not for each component xa, Tk, but yes for T21
+ self.T21_NL = self.generate_T21_NL()
+
+ ### add T21 lin and nonlin correction together
+ self.T21 = self.T21_lin + self.T21_NL
+
+ if self.USE_xHII_MAPS:
+ ### generate xHII
+ self.ReioMaps_config.input_boxlength = self.input_boxlength
+ self.ReioMaps_config.ncells = self.ncells
+ self.ReioMaps_config.seed = self.seed
+ if self.COMPUTE_TAU:
+ self.ReioMaps = reionization_maps(CosmoParams, CoeffStructure, CoeffStructure.zintegral, **vars(self.ReioMaps_config))
+
+ ### include ionization
+ if self.ReioMaps_config.COMPUTE_PARTIAL_IONIZATIONS:
+ self.xHI_massweighted = (1. - self.ReioMaps.ion_frac_partial_massweighted)
+ else:
+ self.xHI_massweighted = (1. - self.ReioMaps.ion_frac_massweighted)
+ # !!! COMPUTE TAU
+ self.tau = CoeffStructure.tau_reio(CosmoParams, CoeffStructure.zintegral, self.xHI_massweighted)
+
+ if self.ReioMaps_config.COMPUTE_PARTIAL_IONIZATIONS:
+ self.xHI = (1. - self.ReioMaps.ion_field_partial_allz[_iz])
+ else:
+ self.xHI = (1. - self.ReioMaps.ion_field_allz[_iz])
+
+ else:
+ self.ReioMaps = reionization_maps(CosmoParams, CoeffStructure, self.input_z, **vars(self.ReioMaps_config))
+ if self.ReioMaps_config.COMPUTE_PARTIAL_IONIZATIONS:
+ self.xHI = (1. - self.ReioMaps.ion_field_partial_allz)
+ else:
+ self.xHI = (1. - self.ReioMaps.ion_field_allz)
+
+ self.T21 *= self.xHI
+
+ self.T21[np.isnan(self.T21)] = 0.
+
+ if self.smooth_box:
+ Resolution = max(self.input_Resolution, self.input_boxlength/self.ncells)
+ if self.USE_xHII_MAPS:
+ self.xHI_smooth = z21_utilities.smooth_box(self.xHI, Resolution, self.input_boxlength, self.ncells)
+ self.T21_smooth = z21_utilities.smooth_box(self.T21[0], Resolution, self.input_boxlength, self.ncells)
+
+
+ def generate_density_pb(self):
+ """
+ Generates density fields using PowerBox.
+
+ Returns
+ -------
+ density : array
+ Density field at each redshift.
+ pbs : list
+ PowerBox objects that generate the density fields.
+ """
+ density = np.zeros((len(self.input_z),self.ncells,self.ncells,self.ncells))
+ pbs = []
+ for iz, z in enumerate(self.input_z):
+ Pd_spl = spline(np.log(self._klist), np.log(self._Pd[iz])) # density at min z
pb = pbox.PowerBox(
- N=self.Nbox,
- dim=3,
- pk = lambda k: Pdinterp(k),
- boxlength = self.Lbox,
- seed = self.seed
+ N=self.ncells,
+ dim=3,
+ pk = lambda k: np.exp(Pd_spl(np.log(k))),
+ boxlength = self.input_boxlength,
+ seed = self.seed
)
-
- self.deltamap = pb.delta_x() #density map, basis of this KIND of approach
-
- #then we make a map of the linear T21 fluctuation, better to use the cross to keep sign, at linear level same
- PdT21 = Power_Spectrum.Deltasq_dT21[_iz]/k3over2pi2
-
- powerratioint = interp1d(klist,PdT21/Pd,fill_value=0.0,bounds_error=False)
-
-
- deltak = pb.delta_k()
-
- powerratio = powerratioint(pb.k())
- T21lin_k = powerratio * deltak
- self.T21maplin= self.T21global + powerboxCtoR(pb,mapkin = T21lin_k)
-
- #now make a nonlinear correction, built as \sum_R [e^(gR dR) - gR dR]. Uncorrelatd with all dR so just a separate field!
- #NOTE: its not guaranteed to work, excess power can be negative in some cases! Not for each component xa, Tk, but yes for T21
- excesspower21 = (Power_Spectrum.Deltasq_T21[_iz,:]-Power_Spectrum.Deltasq_T21_lin[_iz,:])/k3over2pi2
-
- lognormpower = interp1d(klist,excesspower21/self.T21global**2,fill_value=0.0,bounds_error=False)
- #G or logG? TODO revisit
- pbe = pbox.LogNormalPowerBox(
- N=self.Nbox,
- dim=3,
- pk = lambda k: lognormpower(k),
- boxlength = self.Lbox,
+ density[iz] = pb.delta_x()
+ pbs.append(pb)
+ return density, pbs
+
+ def generate_T21_lin(self, pbs):
+ """
+ Generates the linear 21cm temperature field.
+
+ Parameters
+ ----------
+ pbs : list
+ PowerBox objects.
+
+ Returns
+ -------
+ T21_lin : array
+ Linear 21cm brightness temperature field at each redshift.
+ """
+ T21_lin = np.zeros((len(self.input_z),self.ncells,self.ncells,self.ncells))
+ for iz, z in enumerate(self.input_z):
+ pb = pbs[iz]
+ powerratio_spl = spline(self._klist, self._PdT21[iz]/self._Pd[iz]) #cross can be negative, so can't interpolate over log values
+ powerratio = powerratio_spl(pb.k())
+ T21lin_k = powerratio * pb.delta_k()
+ T21_lin[iz] = self.T21avg[iz] + z21_utilities.powerboxCtoR(pb, mapkin = T21lin_k)
+ pbs.append(pb)
+
+ return T21_lin
+
+ def generate_T21_NL(self):
+ """
+ Generates the nonlinear correction to the 21cm temperature field.
+
+ Returns
+ -------
+ T21_NL : array
+ Nonlinear 21cm brightness temperature correction field at each redshift.
+ """
+ T21_NL = np.zeros((len(self.input_z),self.ncells,self.ncells,self.ncells))
+ for iz, z in enumerate(self.input_z):
+ excesspower21 = (self._Dsq_T21[iz]-self._Dsq_T21_lin[iz])/self._k3over2pi2
+ lognormpower = interp1d(self._klist, excesspower21/self.T21avg[iz]**2, fill_value=0.0, bounds_error=False)
+ pbe = pbox.LogNormalPowerBox( #G or logG? TODO revisit
+ N=self.ncells,
+ dim=3,
+ pk = lambda k: lognormpower(k),
+ boxlength = self.input_boxlength,
seed = self.seed+1 # uncorrelated
)
-
- self.T21mapNL = self.T21global*pbe.delta_x()
-
- #and finally, just add them together!
- self.T21map = self.T21maplin + self.T21mapNL
-
-
-
- else:
- print('ERROR, KIND not implemented yet!')
-
-
-
-
-def powerboxCtoR(pbobject,mapkin = None):
- 'Function to convert a complex field to real 3D (eg density, T21...) on the powerbox notation'
- 'Takes a powerbox object pbobject, and a map in k space (mapkin), or otherwise assumes its pbobject.delta_k() (tho in that case it should be delta_x() so...'
-
- realmap = empty((pbobject.N,) * pbobject.dim, dtype='complex128')
- if (mapkin is None):
- realmap[...] = pbobject.delta_k()
- else:
- realmap[...] = mapkin
- realmap[...] = pbobject.V * pbox.dft.ifft(realmap, L=pbobject.boxlength, a=pbobject.fourier_a, b=pbobject.fourier_b)[0]
- realmap = np.real(realmap)
-
- return realmap
\ No newline at end of file
+ T21_NL[iz] = self.T21avg[iz] * pbe.delta_x()
+ return T21_NL
diff --git a/zeus21/reionization.py b/zeus21/reionization.py
new file mode 100644
index 0000000..16c3ae2
--- /dev/null
+++ b/zeus21/reionization.py
@@ -0,0 +1,937 @@
+"""
+Models reionization using an analogy of a halo mass function to ionized bubbles.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
+
+from . import z21_utilities
+from . import cosmology
+from . import constants
+import numpy as np
+from scipy.integrate import cumulative_trapezoid
+from scipy.interpolate import interp1d
+from scipy.interpolate import RegularGridInterpolator
+from scipy.interpolate import UnivariateSpline
+from scipy.special import erfc
+from tqdm import trange
+
+
+class reionization_global:
+ """
+ Computes the global reionization history and bubble mass function (BMF).
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFintclass : HMFinterp class
+ z_Init : Z_init class
+ SFRD_Init : SFRD_class class
+ PRINT_SUCCESS : bool, optional
+ Whether to print convergence status for BMF iteration.
+ Default is True.
+
+ Attributes
+ ----------
+ PRINT_SUCCESS : bool
+ Whether to print convergence status messages.
+ zlist : array
+ Redshift array.
+ Rs : array
+ Smoothing radii array matching the rest of the code, in cMpc.
+ Rs_BMF : array
+ Bubble radii only used for the BMF, in cMpc.
+ ds_array : array
+ Sample overdensity values used to compute the ionization barrier.
+ gamma : array
+ Linear coefficient multiplying delta in niondot fit.
+ gamma2 : array
+ Quadratic coefficient multiplying delta in niondot fit.
+ sigma : array
+ Matter fluctuation on (zlist, Rs) grid.
+ gamma_int : RegularGridInterpolator
+ Interpolator for gamma as a function of z and log R.
+ gamma2_int : RegularGridInterpolator
+ Interpolator for gamma2 as a function of z and log R.
+ sigma_BMF : array
+ Matter fluctuation evaluated on (zlist, Rs_BMF) grid.
+ sigma_int : RegularGridInterpolator
+ Interpolator for sigma as a function of z and log R.
+ trec0 : float
+ Recombination time normalization at z=0.
+ trec : array
+ Recombination time evaluated on zlist, in years.
+ trec_int : interp1d
+ Interpolator for recombination time as a function of z.
+ niondot_avg : array
+ Average ionizing photon production rate as a function of z.
+ niondot_avg_int : interp1d
+ Interpolator for the average ionizing photon production rate.
+ ion_frac : array
+ Global ionized fraction as a function of z.
+ ion_frac_initial : array
+ Initial guess of the global ionized fraction before BMF convergence, from Madau equation.
+ nion_norm : array
+ Normalization factor for niondot fit to match the average niondot, evaluated on (zlist, Rs) grid.
+ nion_norm_int : RegularGridInterpolator
+ Interpolator for nion_norm as a function of z and log R.
+ prebarrier_xHII : array
+ Ionized fraction evaluated on delta, z, and R before computing the barrier.
+ barrier : array
+ Density barrier threshold for ionization as a function of z and R.
+ barrier_initial : array
+ Initial barrier before BMF convergence.
+ barrier_int : RegularGridInterpolator
+ Interpolator for the barrier as a function of z and log R.
+ prebarrier_xHII_int : RegularGridInterpolator
+ Interpolator for prebarrier_xHII as a function of delta, z, and log R.
+ R_linear_sigma_fit_idx : int
+ Index of the smoothing radius closest to AstroParams.R_linear_sigma_fit_input.
+ R_linear_sigma_fit : float
+ Radius used as the initial guess of the peak scale for the linear barrier fit, in cMpc.
+ BMF : array
+ BMF evaluated on (zlist, Rs_BMF) grid.
+ BMF_initial : array
+ Initial BMF based on first guess values before convergence.
+ peakRofz : array
+ Peak bubble radius as a function of z, in cMpc.
+ peakRofz_int : interp1d
+ Interpolator for peak bubble radius as a function of z.
+
+ compute_prebarrier_xHII : method
+ Computes the ionized fraction before solving for the barrier.
+ compute_barrier : method
+ Computes the density barrier threshold for ionization.
+ nion_normalization : method
+ Computes the normalization factor for the niondot fit.
+ nrec : method
+ Computes the cumulative number of recombinations over delta and z.
+ niondot_delta_r : method
+ Computes the delta and R-dependent ionizing photon production rate.
+ nion_delta_r_int : method
+ Computes the cumulative number of ionizing photons produced since the maximum redshift.
+ Madau_Q : method
+ Computes the global ionized fraction by solving the Madau equation.
+ B_1 : method
+ Computes the slope term of the linear ionization barrier.
+ B_0 : method
+ Computes the y-intercept term of the linear ionization barrier.
+ B : method
+ Computes the linear ionization barrier as a function of z and R.
+ dlogsigma_dlogR : method
+ Computes dlogsigma/dlogR.
+ VRdn_dR : method
+ Computes the volume-weighted BMF. Integrating this quantity gives the global xHII.
+ Rdn_dR : method
+ Computes the number-weighted BMF.
+ BMF_peak_R : method
+ Finds the radius at which the BMF peaks.
+ monotonic_after_peak : method
+ Enforces monotonic growth of the bubble size peak with time.
+ analytic_Q : method
+ Analytically integrate the BMF to compute global xHII.
+ converge_BMF : method
+ Iteratively updates the ionization barrier, BMF, and xHII until convergence.
+ interpR : method
+ Evaluates any interpolator at fixed z and an array of R.
+ interpz : method
+ Evaluates any interpolator at an array of z and fixed R.
+ sigmaR_int : method
+ Interpolates sigma at fixed z and an array of R.
+ sigmaz_int : method
+ Interpolates sigma at an array of z and fixed R.
+ barrierR_int : method
+ Interpolates the ionization barrier at fixed z and an array of R.
+ barrierz_int : method
+ Interpolates the ionization barrier at an array of z and fixed R.
+ gammaR_int : method
+ Interpolates gamma at at fixed z and an array of R.
+ gammaz_int : method
+ Interpolates gamma at an array of z and fixed R.
+ gamma2R_int : method
+ Interpolates gamma2 at at fixed z and an array of R.
+ gamma2z_int : method
+ Interpolates gamma2 at an array of z and fixed R.
+ nion_normR_int : method
+ Interpolates nion_norm at at fixed z and an array of R.
+ nion_normz_int : method
+ Interpolates nion_norm at an array of z and fixed R.
+ interp_zR : method
+ Evaluates any RegularGridInterpolator on z and R arrays.
+ sigma_zR_int : method
+ Interpolates sigma on z and R arrays.
+ barrier_zR_int : method
+ Interpolates the barrier on z and R arrays.
+ gamma_zR_int : method
+ Interpolates gamma on z and R arrays.
+ gamma2_zR_int : method
+ Interpolates gamma2 on z and R arrays.
+ nion_norm_zR_int : method
+ Interpolates nion_norm on z and R arrays.
+ prebarrier_xHII_int_grid : method
+ Evaluates prebarrier xHII on a delta field at fixed z and R.
+ """
+ def __init__(self, CosmoParams, AstroParams, HMFintclass, z_Init, SFRD_Init, PRINT_SUCCESS=True):
+
+ #initializing values and interpolators that will be used in the reionization calculations. The ones that depend on the BMF (ion_frac, barrier, peakRofz) are initialized but will be updated if AstroParams.FLAG_BMF_converge is True.
+ self.PRINT_SUCCESS = PRINT_SUCCESS
+ self.zlist = z_Init.zintegral
+ self.Rs = CosmoParams._Rtabsmoo
+ #initialize separate R array for the BMF focused on the relevant range of bubble sizes.
+ self.Rs_BMF = np.logspace(np.log10(AstroParams.Rbub_min), np.log10(self.Rs[-1]), 100)
+ self.ds_array = np.linspace(-1, 5, 101)
+
+ self._r_array, self._z_array = np.meshgrid(self.Rs, self.zlist, sparse=True, indexing='ij')
+ self._rb_array, self._z_array = np.meshgrid(self.Rs_BMF, self.zlist, sparse=True, indexing='ij')
+
+ self.gamma = SFRD_Init.gamma_niondot_II_index2D ### TODO maybe not store them as attributes?
+ self.gamma2 = SFRD_Init.gamma2_niondot_II_index2D ### TODO maybe not store them as attributes?
+ self.sigma = HMFintclass.sigmaRintlog((np.log(self._r_array), self._z_array)).T
+
+ self.zr = [self.zlist, np.log(self.Rs)]
+ self.gamma_int = RegularGridInterpolator(self.zr, self.gamma, bounds_error = False, fill_value = None)
+ self.gamma2_int = RegularGridInterpolator(self.zr, self.gamma2, bounds_error = False, fill_value = None)
+
+ self.sigma_BMF = HMFintclass.sigmaRintlog((np.log(self._rb_array), self._z_array)).T #might need to make a new interpolator for different R range
+ self.zr_BMF = [self.zlist, np.log(self.Rs_BMF)]
+ self.sigma_int = RegularGridInterpolator(self.zr_BMF, self.sigma_BMF, bounds_error = False, fill_value = None)
+
+ self.trec0 = 1/(constants.alphaB * cosmology.n_H(CosmoParams,0) * AstroParams.clumping) #seconds
+ self.trec = self.trec0/(1+self.zlist)**3/constants.yrTos #years
+ self.trec_int = interp1d(self.zlist, self.trec, bounds_error = False, fill_value = None)
+
+ self.niondot_avg = SFRD_Init.niondot_avg_II ### TODO maybe not store them as attributes?
+ self.niondot_avg_int = interp1d(self.zlist, self.niondot_avg, bounds_error = False, fill_value = None)
+
+ #solving Madau equation to get an initial xHII
+ self.ion_frac = np.fmin(1, self.Madau_Q(CosmoParams, self.zlist))
+ self.ion_frac_initial = np.copy(self.ion_frac)
+
+ zr_mesh = np.meshgrid(np.arange(len(self.Rs)), np.arange(len(self.zlist)))
+ self.nion_norm = self.nion_normalization(zr_mesh[1], zr_mesh[0])
+ self.nion_norm_int = RegularGridInterpolator(self.zr, self.nion_norm, bounds_error = False, fill_value = None)
+
+ #using initial xHII to compute initial barrier
+ self.prebarrier_xHII = np.empty((len(self.ds_array), len(self.zlist), len(self.Rs)))
+ self.barrier = self.compute_barrier(CosmoParams, AstroParams, self.ion_frac, self.zlist, self.Rs)
+ self.barrier_initial = np.copy(self.barrier)
+ self.barrier_int = RegularGridInterpolator(self.zr, self.barrier, bounds_error = False, fill_value = None)
+
+ self.dzr = [self.ds_array, self.zlist, np.log(self.Rs)]
+ self.prebarrier_xHII_int = RegularGridInterpolator(self.dzr, self.prebarrier_xHII, bounds_error = False, fill_value = None) #allow extrapolation
+
+ self.R_linear_sigma_fit_idx = z21_utilities.find_nearest_idx(self.Rs_BMF, AstroParams.R_linear_sigma_fit_input)[0]
+ self.R_linear_sigma_fit = self.Rs_BMF[self.R_linear_sigma_fit_idx]
+
+ #fake bubble mass function to impose peak around R_linear_sigma_fit for the initial linear barriers
+ #looks something like [0, 0, ..., 1, ..., 0, 0]*(number of redshifts)
+ self.BMF = np.repeat([np.eye(len(self.Rs_BMF))[self.R_linear_sigma_fit_idx]], len(self.zlist), axis=0)
+
+ self.peakRofz = np.array([self.BMF_peak_R(z) for z in self.zlist])
+ #ensuring that the peak bubble size is monotonically increasing with time.
+ self.peakRofz = self.monotonic_after_peak(self.peakRofz)
+ self.peakRofz_int = interp1d(self.zlist, self.peakRofz, bounds_error = False, fill_value = None)
+
+ #first computation of BMF using the initial guesses
+ self.BMF = self.VRdn_dR(self.zlist, self.Rs_BMF)
+ self.BMF_initial = np.copy(self.BMF)
+
+ #xHII from analytic integral of BMF
+ self.ion_frac = np.nan_to_num(self.analytic_Q(CosmoParams, self.zlist))
+
+ #ensure that if the barrier is negative at the largest smoothing scale (i.e. the whole box is ionized), then xHII is 1.
+ self.ion_frac[self.barrier[:, -1]<=0] = 1
+
+ #converge the BMF interatively
+ if AstroParams.FLAG_BMF_converge:
+ self.converge_BMF(CosmoParams, AstroParams, self.ion_frac)
+
+
+ def compute_prebarrier_xHII(self, CosmoParams, ion_frac, z, R):
+ """
+ Computes the ionized fraction before solving for the barrier.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ ion_frac : array
+ Global xHII at z.
+ z : array
+ Redshifts.
+ R : array
+ Smoothing radii in cMpc.
+
+ Returns
+ -------
+ prebarrier_xHII : array
+ Ionized fraction evaluated over sample delta, z, and R before solving for the barrier.
+ """
+ nion_values = self.nion_delta_r_int(CosmoParams, z, R) #Shape (nd, nz, nR)
+ nrec_values = self.nrec(CosmoParams, ion_frac, z)[:, :, None] #Shape (nd, nz) * (1, 1, nR)
+
+ prebarrier_xHII = nion_values / (1 + nrec_values)
+
+ return prebarrier_xHII
+
+ def compute_barrier(self, CosmoParams, AstroParams, ion_frac, z, R):
+ """
+ Computes the density barrier threshold for ionization by finding when nion surpasses nH+nrec.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ ion_frac : array
+ Global xHII at z.
+ z : array
+ Redshifts.
+ R : array
+ Smoothing radii in cMpc.
+
+ Returns
+ -------
+ barrier : array
+ Density threshold for ionization as a function of z and R.
+ """
+ zarg = np.argsort(z)
+ z = z[zarg]
+ ion_frac = ion_frac[zarg]
+
+ self.prebarrier_xHII = self.compute_prebarrier_xHII(
+ CosmoParams, ion_frac, z, R
+ )
+
+ total_values = np.log10(self.prebarrier_xHII + 1e-10)
+ # Expected shape: (len(self.ds_array), len(self.zlist), len(R))
+
+ crosses = np.diff(np.sign(total_values), axis=0) != 0
+ # Shape: (len(self.ds_array) - 1, len(self.zlist), len(R))
+
+ #first time nion surpasses nH+nrec along the delta axis
+ has_crossing = crosses.any(axis=0)
+ first_idx = np.argmax(crosses, axis=0)
+ # Shape: (len(self.zlist), len(R))
+
+ y0 = np.take_along_axis(
+ total_values[:-1, :, :],
+ first_idx[None, :, :],
+ axis=0,
+ )[0]
+
+ y1 = np.take_along_axis(
+ total_values[1:, :, :],
+ first_idx[None, :, :],
+ axis=0,
+ )[0]
+
+ x0 = self.ds_array[first_idx]
+ x1 = self.ds_array[first_idx + 1]
+
+ #interpolate between grid values to find more precise barrier.
+ with np.errstate(divide="ignore", invalid="ignore"):
+ barrier = x0 - y0 * (x1 - x0) / (y1 - y0)
+
+ barrier = np.where(has_crossing, barrier, np.nan)
+
+ growth = (
+ CosmoParams.growthint(self.zlist)
+ / CosmoParams.growthint(self.zlist[0])
+ )
+
+ #the barrier is defined in terms of the overdensity linearly extrapolated to zlist[0], so we need to multiply by the growth factor to get the correct barrier at each redshift.
+ barrier = barrier * growth[:, None]
+
+ #the barrier is an unreachable number above zmax, ensuring that there are no bubbles.
+ barrier[self.zlist > AstroParams.ZMAX_REION] = 100
+
+ return barrier
+
+ def nion_normalization(self, z, R):
+ """
+ Computes the normalization factor for the niondot fit.
+
+ Parameters
+ ----------
+ z : int or array
+ Redshift-grid index or indices.
+ R : int or array
+ Radius-grid index or indices.
+
+ Returns
+ -------
+ nion_norm : float or array
+ Normalization for niondot.
+ """
+ return 1/np.sqrt(1-2*self.gamma2[z, R]*self.sigma[z, R]**2)*np.exp(self.gamma[z, R]**2 * self.sigma[z, R]**2 / (2-4*self.gamma2[z, R]*self.sigma[z, R]**2))
+
+ def nrec(self, CosmoParams, ion_frac, z, d_array=None):
+ """
+ Vectorized computation of nrec over an array of overdensities d_array.
+
+ Parameters
+ ----------
+ CosmoParams: CosmoParams class
+ Stores cosmology.
+ ion_frac: 1D np.array
+ The ionized fraction over all redshifts.
+ z: array
+ Redshifts
+ d_array : array, optional
+ Sample delta values.
+ Default is None, in which case self.ds_array is used.
+
+ Returns
+ ----------
+ nrecs: 2D np.array
+ The total number of recombinations at each overdensity for a certain ionized fraction history at each redshift. The first dimension is densities, the second dimension is redshifts.
+ """
+ zarg = np.argsort(z) #sort just in case
+ z = z[zarg]
+ ion_frac = ion_frac[zarg]
+
+ if d_array is None:
+ d_array = self.ds_array
+
+ #reverse the inputs to make the integral easier to compute
+ z_rev = z[::-1]
+ Hz_rev = cosmology.Hubinvyr(CosmoParams, z_rev)
+ trec_rev = self.trec_int(z_rev)
+ ion_frac_rev = ion_frac[::-1]
+
+ denom = -1 / (1 + z_rev) / Hz_rev / trec_rev
+ integrand_base = denom * ion_frac_rev
+ Dg = CosmoParams.growthint(z_rev) #growth factor
+
+ nrecs = cumulative_trapezoid(integrand_base*(1+d_array[:, np.newaxis]*Dg/Dg[-1]), x=z_rev, initial=0) #(1+delta) rather than (1+delta)^2 because nrec and nion are per hydrogen atom
+
+ #TODO: nonlinear recombinations/higher order
+
+ nrecs = nrecs[:, ::-1] #reverse back to increasing z order
+ return nrecs
+
+ def niondot_delta_r(self, CosmoParams, z, R, d_array=None):
+ """
+ Compute niondot over an array of overdensities d_array for a given R.
+
+ Parameters
+ ----------
+ CosmoParams: CosmoParams class
+ Stores cosmology.
+ z: array
+ Redshifts
+ R: float
+ Radius value (cMpc)
+ d_array : array, optional
+ Sample delta values.
+ Default is None, in which case self.ds_array is used.
+
+ Output
+ ----------
+ niondot: 2D np.array
+ The rates of ionizing photon production. The first dimension is densities, the second dimension is redshifts.
+ """
+
+ z1d = np.copy(z)
+ R1d = np.copy(R)
+
+ z = z[None, :, None]
+ R = R[None, None, :]
+
+ if d_array is None:
+ d_array = self.ds_array[:, None, None]
+
+ d_array = d_array * CosmoParams.growthint(z) / CosmoParams.growthint(z1d[0])
+
+ gamma = self.gamma_zR_int(z1d[:, None], R1d[None, :])[None, :, :]
+ gamma2 = self.gamma2_zR_int(z1d[:, None], R1d[None, :])[None, :, :]
+ nion_norm = self.nion_norm_zR_int(z1d[:, None], R1d[None, :])[None, :, :]
+
+ #niondot fit with gammas and normalization
+ exp_term = np.exp(gamma * d_array + gamma2 * d_array**2)
+ niondot = (self.niondot_avg_int(z) / nion_norm) * exp_term
+
+ return niondot
+
+ def nion_delta_r_int(self, CosmoParams, z, R, d_array=None):
+ """
+ Vectorized computation of nion over an array of overdensities d_array for a given R.
+
+ Parameters
+ ----------
+ CosmoParams: CosmoParams class
+ Stores cosmology.
+ z: array
+ Redshifts
+ R: float
+ Radius value (cMpc)
+ d_array : array, optional
+ Sample delta values.
+ Default is None, in which case self.ds_array is used.
+
+ Output
+ ----------
+ nion: 2D np.array
+ The total number of ionizing photons produced since z=zmax. The first dimension is densities, the second dimension is redshifts.
+ """
+
+ z.sort() #sort if not sorted
+
+ if d_array is None:
+ d_array = self.ds_array[:, None, None]
+
+ #reverse the inputs to make the integral easier to compute
+ z_rev = z[::-1]
+ Hz_rev = cosmology.Hubinvyr(CosmoParams, z_rev)
+
+ niondot_values = self.niondot_delta_r(CosmoParams, z, R, d_array)
+
+ #cumulatively integrate over all time
+ integrand = -1 / (1 + z_rev[None, :, None]) / Hz_rev[None, :, None] * niondot_values[:, ::-1]
+ nion = cumulative_trapezoid(integrand, x=z_rev, initial=0, axis=1)[:, ::-1] #reverse back to increasing z order
+
+ return nion
+
+ def Madau_Q(self, CosmoParams, z):
+ """
+ Computes the global ionized fraction by solving the Madau equation.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ z : float or array
+ Redshifts
+
+ Returns
+ -------
+ Q : float or array
+ Global xHII evaluated at z.
+ """
+
+ z = np.atleast_1d(z) #accepts scalar or array
+ z_arr = np.geomspace(z, self.zlist[-1], len(self.zlist))
+ dtdz = 1/cosmology.Hubinvyr(CosmoParams, z_arr)/(1 + z_arr)
+ tau0 = self.trec0 * np.sqrt(CosmoParams.OmegaM) * cosmology.Hubinvyr(CosmoParams, 0) / constants.yrTos
+ exp = np.exp(2/3/tau0 * (np.power(1 + z, 3/2) - np.power(1 + z_arr, 3/2))) #switched order around to be correct (typo in paper)
+
+ niondot_avgs = self.niondot_avg_int(z_arr)
+ integrand = dtdz * niondot_avgs * exp
+
+ return np.trapezoid(integrand, x = z_arr, axis = 0)
+
+ def B_1(self, z):
+ """
+ Computes the slope term of the linear ionization barrier.
+
+ Parameters
+ ----------
+ z : float or array
+ Redshifts
+
+ Returns
+ -------
+ B1 : array
+ Slope term of the linear barrier as a function of z.
+ """
+ z = np.atleast_1d(z)
+ #compute slope near the peak of the BMF
+ R_pivot = self.peakRofz_int(z)
+ sigmax = np.diagonal(self.sigma_zR_int(z[:, None], (R_pivot*1.1)[None, :]))
+ sigmin = np.diagonal(self.sigma_zR_int(z[:, None], (R_pivot*0.9)[None, :]))
+ barriermax = np.diagonal(self.barrier_zR_int(z[:, None], (R_pivot*1.1)[None, :]))
+ barriermin = np.diagonal(self.barrier_zR_int(z[:, None], (R_pivot*0.9)[None, :]))
+ return (barriermax - barriermin)/(sigmax**2 - sigmin**2)
+
+ def B_0(self, z):
+ """
+ Computes the y-intercept term of the linear ionization barrier.
+
+ Parameters
+ ----------
+ z : float or array
+ Redshifts
+
+ Returns
+ -------
+ B0 : array
+ Intercept term of the linear barrier as a function of z.
+ """
+ z = np.atleast_1d(z)
+ R_pivot = self.peakRofz_int(z)
+ sigmin = np.diagonal(self.sigma_zR_int(z[:, None], (R_pivot*0.9)[None, :]))
+ barriermin = np.diagonal(self.barrier_zR_int(z[:, None], (R_pivot*0.9)[None, :]))
+ return barriermin - sigmin**2 * self.B_1(z)
+
+ def B(self, z, R, sig=None):
+ """
+ Computes the linear ionization barrier as a function of z and R.
+
+ Parameters
+ ----------
+ z : float or array
+ Redshifts
+ R : float or array
+ Radii in cMpc
+ sig : array, optional
+ Matter fluctuation sigma(z, R).
+ Default is None, in which case sigma is interpolated internally.
+
+ Returns
+ -------
+ B : array
+ Linear barrier as a function of z and R.
+ """
+ z = np.atleast_1d(z)
+ if sig is None:
+ R = np.atleast_1d(R)
+ sig = self.sigma_zR_int(z[:, None], R[None, :])
+ B0 = self.B_0(z)
+ B1 = self.B_1(z)
+ return B0[:, None] + B1[:, None]*sig**2
+
+ def dlogsigma_dlogR(self, z, R, sig):
+ """
+ Computes dlogsigma/dlogR.
+
+ Parameters
+ ----------
+ z : float or array
+ Redshifts
+ R : array
+ Bubble radii in cMpc.
+ sig : array
+ Matter fluctuation sigma(z, R).
+
+ Returns
+ -------
+ dlogsigma_dlogR : array
+ Logarithmic derivative dlog(sigma)/dlog(R).
+ """
+ return np.gradient(np.log(sig), np.log(R), axis=1)
+
+ def VRdn_dR(self, z, R):
+ """
+ Computes the volume-weighted BMF. Integrating this quantity gives the global xHII.
+
+ Parameters
+ ----------
+ z : float or array
+ Redshifts
+ R : array
+ Bubble radii in cMpc.
+
+ Returns
+ -------
+ VRdn_dR : array
+ Volume-weighted BMF evaluated over redshift and radius.
+ """
+ z = np.atleast_1d(z)
+ sig = self.sigma_zR_int(z[:, None], R[None, :])
+ B0 = self.B_0(z)
+ B1 = self.B_1(z)
+ return np.sqrt(2/np.pi) * np.abs(self.dlogsigma_dlogR(z, R, sig)) * np.abs(B0[:, None])/sig * np.exp(-(B0[:, None]+B1[:, None]*sig**2)**2/2/sig**2)
+
+ def Rdn_dR(self, z, R):
+ """
+ Computes the number-weighted BMF.
+
+ Parameters
+ ----------
+ z : float or array
+ Redshifts
+ R : array
+ Bubble radii in cMpc.
+
+ Returns
+ -------
+ Rdn_dR : array
+ Number-weighted bubble mass function evaluated over redshift and radius.
+ """
+ return self.VRdn_dR(z, R)*3/(4*np.pi*R[None, :]**3)
+
+ def BMF_peak_R(self, z, fit_window=5, max_bubble=100, min_bubble=0.5):
+ """
+ Finds the radius at which the BMF peaks.
+
+ Parameters
+ ----------
+ z : float
+ Redshift
+ fit_window : int, optional
+ Number of points on each side of the coarse peak to use for the spline fit. Default is 5.
+ max_bubble : float, optional
+ Maximum allowed bubble radius in cMpc. Default is 100.
+ min_bubble : float, optional
+ Minimum allowed bubble radius in cMpc. Default is 0.5.
+
+ Returns
+ -------
+ peak_R : float
+ Peak bubble radius in cMpc.
+ """
+ min_bubble = np.max([self.Rs[1], min_bubble])
+
+ iz = z21_utilities.find_nearest_idx(self.zlist, z)[0]
+
+ R = self.Rs_BMF
+ y = self.BMF[iz]
+
+ #keep only finite positive values
+ good = np.isfinite(y) & (y > 0) & np.isfinite(R)
+ if not np.any(good):
+ return min_bubble
+
+ R_good = R[good]
+ y_good = y[good]
+
+ #coarse peak index
+ ir_peak = np.argmax(y_good)
+
+ #fit spline around the peak to get more precise.
+ #find where derivative = 0. If too close to edge, return bounds.
+ i_lo = max(0, ir_peak - fit_window)
+ i_hi = min(len(R_good), ir_peak + fit_window + 1)
+
+ R_window = R_good[i_lo:i_hi]
+ y_window = y_good[i_lo:i_hi]
+
+ if len(R_window) < 5:
+ return np.clip(R_good[ir_peak], min_bubble, max_bubble)
+
+ x = np.log(R_window)
+ ly = np.log(y_window)
+
+ #get more exact fit between the points using a spline.
+ spline_fit = UnivariateSpline(x, ly, k=4, s=0)
+ roots = spline_fit.derivative().roots()
+
+ d2 = spline_fit.derivative(n=2)
+
+ valid_roots = [
+ root for root in roots
+ if x[0] <= root <= x[-1] and d2(root) < 0
+ ]
+
+ if len(valid_roots) == 0:
+ peak_R = R_good[ir_peak]
+ else:
+ x_peak_guess = np.log(R_good[ir_peak])
+ x_peak = valid_roots[np.argmin(np.abs(np.array(valid_roots) - x_peak_guess))]
+ peak_R = np.exp(x_peak)
+
+ #return peak within allowed bounds
+ return np.clip(peak_R, min_bubble, max_bubble)
+
+ def monotonic_after_peak(self, x):
+ """
+ Enforces monotonic growth of the bubble size peak with time.
+
+ Parameters
+ ----------
+ x : array
+ Input array.
+
+ Returns
+ -------
+ x : array
+ Array with values left of the peak forced to be non-decreasing.
+ """
+ x = np.asarray(x).copy()
+ i_peak = np.nanargmax(x)
+
+ x[i_peak:] = np.minimum.accumulate(x[i_peak:])
+
+ return x
+
+ def analytic_Q(self, CosmoParams, z):
+ """
+ Analytically integrate the BMF to compute global xHII.
+ Integrates down to some minimum sigma corresponding to the smallest relevant scale for bubbles.
+ Any smaller makes the integral discrepant with the BMF, and the linear barrier becomes a poor fit.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ z : float or array
+ Redshifts
+
+ Returns
+ -------
+ Q : array
+ Ionized fraction obtained from the analytic integral of the BMF.
+ """
+ z = np.atleast_1d(z)
+ Rmin = self.Rs_BMF[0] #fixing analytic to fit numeric (old version: 1e-10, arbitrarily small)
+ B0 = self.B_0(z)
+ B1 = self.B_1(z)
+ sigmin = CosmoParams.ClassCosmo.sigma(Rmin, z[0])*CosmoParams.growthint(z)/CosmoParams.growthint(z[0]) ### Faster to multiply sigma by the growth but there is a 0.2% error on the xHII_avg
+ ### TODO maybe add a flag to call ClassCosmo.sigma for every z
+ s2 = sigmin**2
+ return 0.5*np.exp(-2*B0*B1)*erfc((B0-B1*s2)/np.sqrt(2*s2)) + 0.5*erfc((B0+B1*s2)/np.sqrt(2*s2))
+
+ def converge_BMF(self, CosmoParams, AstroParams, ion_frac_input):
+ """
+ Iteratively updates the ionization barrier, BMF, and xHII until convergence.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ ion_frac_input : array
+ Initial ionized fraction used to begin the BMF convergence loop.
+
+ Returns
+ -------
+ None
+ """
+ self.ion_frac = ion_frac_input
+ iterator = trange(AstroParams.max_iter) if self.PRINT_SUCCESS else range(AstroParams.max_iter)
+ for j in iterator:
+ ion_frac_prev = np.copy(self.ion_frac)
+ #need xHII for recombination calculation, which affects the barrier.
+ self.barrier = self.compute_barrier(CosmoParams, AstroParams, self.ion_frac, self.zlist, self.Rs)
+ self.barrier_int = RegularGridInterpolator(self.zr, self.barrier, bounds_error = False, fill_value = None)
+
+ #update BMF and peaks.
+ self.BMF = self.VRdn_dR(self.zlist, self.Rs_BMF)
+ self.peakRofz = np.array([self.BMF_peak_R(z) for z in self.zlist])
+ self.peakRofz = self.monotonic_after_peak(self.peakRofz)
+ self.peakRofz_int = interp1d(self.zlist, self.peakRofz, bounds_error = False, fill_value = None)
+
+ #update xHII
+ self.ion_frac = np.nan_to_num(self.analytic_Q(CosmoParams, self.zlist))
+ self.ion_frac[self.barrier[:, -1]<=0] = 1
+
+ #stop the loop if xHII hasn't changed much between iterations.
+ if np.allclose(ion_frac_prev, self.ion_frac, rtol=1e-1, atol=1e-2):
+ if self.PRINT_SUCCESS:
+ print(f"SUCCESS: BMF converged after {j+1} iteration{'s' if j > 0 else ''}.")
+ return
+
+ print(f"WARNING: BMF didn't converge within {AstroParams.max_iter} iterations.")
+
+
+ #interpolators in z and R used in reionization.py
+ def interpR(self, z, R, func):
+ "Interpolator to find func(z, R), designed to take a single z but an array of R in cMpc"
+ _logR = np.log(R)
+ logRvec = np.asarray([_logR]) if np.isscalar(_logR) else np.asarray(_logR)
+ inarray = np.array([[z, LR] for LR in logRvec])
+ return func(inarray)
+
+ def interpz(self, z, R, func):
+ "Interpolator to find func(z, R), designed to take a single R in cMpc but an array of z"
+ zvec = np.asarray([z]) if np.isscalar(z) else np.asarray(z)
+ inarray = np.array([[zz, np.log(R)] for zz in zvec])
+ return func(inarray)
+
+ #all instances of different (z, R) interpolators, named explicitly for clarity in the code
+ def sigmaR_int(self, z, R):
+ return self.interpR(z, R, self.sigma_int)
+ def sigmaz_int(self, z, R):
+ return self.interpz(z, R, self.sigma_int)
+
+ def barrierR_int(self, z, R):
+ return self.interpR(z, R, self.barrier_int)
+ def barrierz_int(self, z, R):
+ return self.interpz(z, R, self.barrier_int)
+
+ def gammaR_int(self, z, R):
+ return self.interpR(z, R, self.gamma_int)
+ def gammaz_int(self, z, R):
+ return self.interpz(z, R, self.gamma_int)
+
+ def gamma2R_int(self, z, R):
+ return self.interpR(z, R, self.gamma2_int)
+ def gamma2z_int(self, z, R):
+ return self.interpz(z, R, self.gamma2_int)
+
+ def nion_normR_int(self, z, R):
+ return self.interpR(z, R, self.nion_norm_int)
+ def nion_normz_int(self, z, R):
+ return self.interpz(z, R, self.nion_norm_int)
+
+ def interp_zR(self, z, R, func):
+ """
+ Evaluate a RegularGridInterpolator defined on (z, logR).
+
+ Accepts scalar, 1D, 2D, or ND z and R.
+ z and R are broadcast against each other.
+
+ Examples
+ --------
+ scalar z, vector R:
+ out.shape == R.shape
+
+ vector z, scalar R:
+ out.shape == z.shape
+
+ z[:, None], R[None, :]:
+ out.shape == (nz, nR)
+ """
+ z = np.asarray(z, dtype=float)
+ R = np.asarray(R, dtype=float)
+
+ z_b, R_b = np.broadcast_arrays(z, R)
+
+ points = np.column_stack([
+ z_b.ravel(),
+ np.log(R_b).ravel()
+ ])
+
+ out = func(points)
+ return out.reshape(z_b.shape)
+
+ def sigma_zR_int(self, z, R):
+ return self.interp_zR(z, R, self.sigma_int)
+
+ def barrier_zR_int(self, z, R):
+ return self.interp_zR(z, R, self.barrier_int)
+
+ def gamma_zR_int(self, z, R):
+ return self.interp_zR(z, R, self.gamma_int)
+
+ def gamma2_zR_int(self, z, R):
+ return self.interp_zR(z, R, self.gamma2_int)
+
+ def nion_norm_zR_int(self, z, R):
+ return self.interp_zR(z, R, self.nion_norm_int)
+
+ def prebarrier_xHII_int_grid(self, d, z, R):
+ """
+ Evaluate prebarrier xHII on a density field d(x),
+ at fixed redshift z and smoothing radius R.
+
+ Parameters
+ ----------
+ d: np.ndarray
+ Density/overdensity field. Can be any shape (...).
+ z: float
+ Redshift.
+ R: float
+ Smoothing radius (cMpc).
+
+ Output
+ ----------
+ values: np.ndarray
+ xHII field with the same shape as d.
+ """
+
+ d = np.asarray(d, dtype=float)
+
+ z_arr = np.full_like(d, float(z), dtype=float)
+ logr_arr = np.full_like(d, np.log(float(R)), dtype=float)
+
+ #stack into points (..., 3) where last axis is (delta, z, logR)
+ points = np.stack([d, z_arr, logr_arr], axis=-1)
+
+ values = self.prebarrier_xHII_int(points)
+
+ return values
\ No newline at end of file
diff --git a/zeus21/sfrd.py b/zeus21/sfrd.py
index 6819cc5..a04f4af 100644
--- a/zeus21/sfrd.py
+++ b/zeus21/sfrd.py
@@ -1,957 +1,1250 @@
"""
-Bulk of the Zeus21 calculation. Compute sSFRD from cosmology, determines Lyman-alpha and X-ray fluxes, and evolves the cosmic-dawn IGM state (WF coupling and heating). From that we get the 21-cm global signal and the effective biases gammaR to determine the 21-cm power spectrum.
-
-Author: Julian B. Muñoz
-UT Austin and Harvard CfA - January 2023
-
-Edited by Hector Afonso G. Cruz
-JHU - July 2024
-
-Edited by Emily Bregou
-UT Austin - October 2025
-
-Edited by Sarah Libanore
-BGU - July 2025
-
+Bulk of the Zeus21 calculation. Compute SFRD from cosmology.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
"""
from . import cosmology
-from .xrays import Xray_class, sigma_HI, sigma_HeI
from . import constants
import numpy as np
import astropy
from astropy import units as u
-from astropy import constants as const
import scipy
from scipy import interpolate
-import pickle
-
-
-
-class get_T21_coefficients:
- "Loops through SFRD integrals and obtains avg T21 and the coefficients for its power spectrum. Takes input zmin, which minimum z we integrate down to. It accounts for: \
- -Xray heating \
- -LyA coupling. \
- TODO: reionization/EoR"
- def __init__(self, User_Parameters, Cosmo_Parameters, ClassCosmo, Astro_Parameters, HMF_interpolator, zmin = 10.0):
+class Z_init:
+ """
+ Initial redshift matrices for the calculation
- #####################################################################################################
- ### STEP 0: Defining Constants and storage variables
-
- #define comoving distance quantities
- self.Rtabsmoo = Cosmo_Parameters._Rtabsmoo
- self.dlogRR = Cosmo_Parameters._dlogRR
-
- #define the integration redshifts, goes as log(z) (1+ doesn't change sampling much)
- self.zmax_integral = constants.ZMAX_INTEGRAL
- self.zmin = zmin
- self._dlogzint_target = 0.02/User_Parameters.precisionboost
- self.Nzintegral = np.ceil(1.0 + np.log(self.zmax_integral/self.zmin)/self._dlogzint_target).astype(int)
- self.dlogzint = np.log(self.zmax_integral/self.zmin)/(self.Nzintegral-1.0) #exact value rather than input target above
- self.zintegral = np.logspace(np.log10(self.zmin), np.log10(self.zmax_integral), self.Nzintegral) #note these are also the z at which we "observe", to share computational load
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+
+ Attributes
+ ----------
+ dlogzint : array
+ Set the log step for the redshift binning, based on the required input
+ zintegral : array
+ Redshift array over which will be performed all integration and for which the output will be computed
+ zGreaterMatrix : matrix
+ Redshift associated with the distance at radius R. Dimension (z, R)
+ zGreaterMatrix_nonan : matrix
+ Redshift associated with the distance at radius R; when z > zmax_AstroBreak (50 by default in constants), we set z > 100 to prevent computing things where we don't trust the astrophysical model. Dimension (z, R)
+ """
+
+ def __init__(self, UserParams, CosmoParams):
+
+ zmin_integral = UserParams.zmin
+ zmax_integral = constants.ZMAX_INTEGRAL
- #define table of redshifts and distances
- self.rGreaterMatrix = np.transpose([Cosmo_Parameters.chiofzint(self.zintegral)]) + self.Rtabsmoo
- self.zGreaterMatrix = Cosmo_Parameters.zfofRint(self.rGreaterMatrix)
+ Nzintegral = np.ceil(1.0 + np.log(zmax_integral/zmin_integral)/UserParams.dlogzint_target).astype(int)
- self.ztabRsmoo = np.nan_to_num(np.copy(self.zGreaterMatrix), nan = 100)#HAC: patch fix for now. Later, figure out how to reconcile zGreaterMatrix with zGreaterMatrix_nonan
- if(Cosmo_Parameters.Flag_emulate_21cmfast == True): #they take the redshift to be at the midpoint of the two shells. In dr really.
+ self.dlogzint = np.log(zmax_integral/zmin_integral)/(Nzintegral-1.0) #exact value rather than input target above
+ self.zintegral = np.geomspace(zmin_integral, zmax_integral, Nzintegral) #note these are also the z at which we "observe", to share computational load
+ # define table of redshifts
+ rGreaterMatrix = np.transpose([CosmoParams.chiofzint(self.zintegral)]) + CosmoParams._Rtabsmoo
+ self.zGreaterMatrix = CosmoParams.zfofRint(rGreaterMatrix)
+
+ if CosmoParams.Flag_emulate_21cmfast:
+ # 21cmFAST takes the redshift to be at the midpoint of the two shells
+ # TODO: HECTOR CHANGES
self.zGreaterMatrix = np.append(self.zintegral.reshape(len(self.zGreaterMatrix), 1), self.zGreaterMatrix, axis = 1)
- self.zGreaterMatrix = (self.zGreaterMatrix[:, 1:] + self.zGreaterMatrix[:, :-1])/2
-
-# self.zGreaterMatrix[self.rGreaterMatrix > Cosmo_Parameters.chiofzint(50.0)] = 50.0 ###HAC: Check if I can actually comment this out or not
- self.rGreaterMatrix[self.rGreaterMatrix > Cosmo_Parameters.chiofzint(50.0)] = Cosmo_Parameters.chiofzint(50.0)
-
-
- self.ztabRsmoo = np.append(self.zintegral.reshape(len(self.ztabRsmoo), 1), self.ztabRsmoo, axis = 1)###HAC: no longer necessary!
- self.ztabRsmoo = (self.ztabRsmoo[:, 1:] + self.ztabRsmoo[:, :-1])/2###HAC: no longer necessary!
+ self.zGreaterMatrix = (self.zGreaterMatrix[:, 1:] + self.zGreaterMatrix[:, :-1])/2
else:
- self.zGreaterMatrix[self.rGreaterMatrix > Cosmo_Parameters.chiofzint(50.0)] = np.nan
- self.rGreaterMatrix[self.rGreaterMatrix > Cosmo_Parameters.chiofzint(50.0)] = np.nan #replace z > 50 = np.nan so that nothing exceeds zmax = 50
- self.ztabRsmoo = np.nan_to_num(np.copy(self.zGreaterMatrix), nan = 100)#HAC: patch fix for now. Later, figure out how to reconcile zGreaterMatrix with zGreaterMatrix_nonan
+ self.zGreaterMatrix[rGreaterMatrix > CosmoParams.chiofzint(constants.zmax_AstroBreak)] = np.nan
- zGreaterMatrix_nonan = np.nan_to_num(self.zGreaterMatrix, nan = 100)
-# self.ztabRsmoo = np.zeros_like(self.SFRDbar2D) #z's that correspond to each Radius R around each zp #HAC: No longer needed
-
- ###HAC: added SFRD & J21LW variables for pop II and III stars TO BE DELETED (not needed)
- self.SFRD_avg = np.zeros_like(self.zintegral)
- self.SFRD_II_avg = np.zeros_like(self.zintegral)
- self.SFRD_III_avg = np.zeros_like(self.zintegral)
- self.J_21_LW_II = np.zeros_like(self.zintegral)
- self.J_21_LW_III = np.zeros_like(self.zintegral)
-
- self.SFRDbar2D = np.zeros((self.Nzintegral, Cosmo_Parameters.NRs)) #SFR at z=zprime when averaged over a radius R (so up to a higher z)
-
- self.gamma_index2D = np.zeros_like(self.SFRDbar2D) #index of SFR ~ exp(\gamma delta)
- self.gamma_II_index2D = np.zeros_like(self.SFRDbar2D) #index of SFR ~ exp(\gamma delta)
- self.gamma_III_index2D = np.zeros_like(self.SFRDbar2D) #index of SFR ~ exp(\gamma delta)
-
- # SarahLibanore: gamma non linear for quadratic order
- self.gamma2_II_index2D = np.zeros_like(self.SFRDbar2D) #index of SFR ~ exp(\gamma delta + \gamma_2 delta^2)
- self.gamma2_III_index2D = np.zeros_like(self.SFRDbar2D) #index of SFR ~ exp(\gamma \delta + \gamma_2 \delta^2)
-
- self.niondot_avg = np.zeros_like(self.zintegral) #\dot nion at each z (int d(SFRD)/dM *fesc(M) dM)/rhobaryon
- self.gamma_Niondot_index2D = np.zeros_like(self.SFRDbar2D) #index of SFR ~ exp(\gamma delta)
-
-
-
-# ###HAC: OLD, TO BE DELETED, added SFRD variables for pop II and III stars
-# self.gamma_index2D_old = np.zeros_like(self.SFRDbar2D) #index of SFR ~ exp(\gamma delta)
-
- #EoR coeffs
- self.sigmaofRtab = np.array([HMF_interpolator.sigmaR_int(self.Rtabsmoo, zz) for zz in self.zintegral]) #to be used in correlations.py, in get_bubbles()
-
- fesctab_II = fesc_II(Astro_Parameters, HMF_interpolator.Mhtab) #prepare fesc(M) table -- z independent for now so only once
- fesctab_III = fesc_III(Astro_Parameters, HMF_interpolator.Mhtab) #PopIII prepare fesc(M) table -- z independent for now so only once
-
- #Xray coeffs
- self.coeff1Xzp = np.zeros_like(self.zintegral) #zp-dependent coeff in Xray calculation
- self.coeff2XzpRR = np.zeros_like(self.SFRDbar2D) #zp and R-dependent coeff in Xray calculation
- self.Tk_avg = np.zeros_like(self.zintegral) #average kinetic temperature
-
- #LyA coeffs
- self.coeff1LyAzp = np.zeros_like(self.zintegral) # Same but for LyA
-# self.coeff2LyAzpRR = np.zeros_like(self.SFRDbar2D)# Same but for LyA
- self.Jalpha_avg = np.zeros_like(self.zintegral) #avg Jalpha (we compute xa at the end)
- _Jalpha_coeffs = np.zeros([constants.n_max_recycle-1,Cosmo_Parameters.NRs]) #the line recycled coeffs
-
- #and EPS factors
- Nsigmad = 1.0 #how many sigmas we explore
- Nds = 3 #how many deltas - SarahLibanore: changed to compute the non linear gamma
- deltatab_norm = np.linspace(-Nsigmad,Nsigmad,Nds)
-
- #initialize Xrays
- Xrays = Xray_class(User_Parameters, Cosmo_Parameters)
- _Energylist = Astro_Parameters.Energylist
- Nzinttau = np.floor(10*User_Parameters.precisionboost).astype(int)
-
- #####################################################################################################
- ### STEP 1: Recursive routine to compute average Pop II and III SFRDs with LW feedback
- ### Will only perform 1 iteration; if Astro_Parameters.USE_LW_FEEDBACK = False, then inputs.py sets A_LW = 0.0
- zSFRDflat = np.geomspace(self.zmin, 50, 128) #extend to z = 50 for extrapolation purposes. Higher in z than self.zintegral
- zSFRD, mArray = np.meshgrid(zSFRDflat, HMF_interpolator.Mhtab, indexing = 'ij', sparse = True)
-
- J21LW_interp = interpolate.interp1d(zSFRDflat, np.zeros_like(zSFRDflat), kind = 'linear', bounds_error = False, fill_value = 0,) #no LW background. Controls only Mmol() function, NOT the individual Pop II and III LW background
- SFRD_II_avg = np.trapezoid(SFRD_II_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, zSFRD, zSFRD), HMF_interpolator.logtabMh, axis = 1) #never changes with J_LW
- SFRD_II_interp = interpolate.interp1d(zSFRDflat, SFRD_II_avg, kind = 'cubic', bounds_error = False, fill_value = 0,)
+ self.zGreaterMatrix_nonan = np.nan_to_num(self.zGreaterMatrix, nan = 100) # prevent calculation where the astro model is not trusted
- J21LW_II = 1e21 * J_LW(Astro_Parameters, Cosmo_Parameters, SFRD_II_avg, zSFRDflat, 2) #this never changes; only Pop III Quanties change
- self.J_21_LW_II = interpolate.interp1d(zSFRDflat, J21LW_II, kind = 'cubic')(self.zintegral) #different from J21LW_interp
- if Astro_Parameters.USE_POPIII == True:
- SFRD_III_Iter_Matrix = [np.trapezoid(SFRD_III_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, J21LW_interp, zSFRD, zSFRD, ClassCosmo.pars['v_avg']), HMF_interpolator.logtabMh, axis = 1)] #changes with each iteration
+class SFRD_class:
+ """
+ Compute all quantities and methods associated with the star formation rate density and the astrophysical model
+
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ z_Init : Z_init class, optional
+ Initial redshift matrices for the calculation (see sfrd.py for details).
+ Default is None.
+
+ Attributes
+ ----------
+ SFRD_II_interp : interpolator
+ Average SFRD for popII stars, interpolated over redshift.
+ J_21_LW_II : interpolator
+ Lyman-Werner flux from popII stars, units of erg/s/cm^2/Hz/s, interpolated over redshift
+ J21LW_interp_conv_avg : interpolator
+ Lyman-Werner flux iteratively computed to account for popIII contribution, interpolated over redshift
+ SFRD_III_cnvg_interp : : interpolator
+ Average SFRD for popIII stars, determines part-of and is affected by the LW flux; interpolated over redshift
+ J_21_LW_III : interpolator
+ Lyman-Werner flux, units of erg/s/cm^2/Hz/s from popIII stars, interpolated over redshift
+ SFRD_II_avg : array
+ Average SFRD for popII stars, units Msun/yr
+ SFRD_III_avg : array
+ Average SFRD for popIII stars, units Msun/yr
+ SFRD_avg : array
+ Total average SFRD, units Msun/yr
+ SFRDbar2D_II : matrix
+ Average SFRD for popII computed at z corresponding to each shell
+ SFRDbar2D_III : matrix
+ Average SFRD for popIII computed at z corresponding to each shell
+ fesctab_II : array
+ Escape fraction for popII, z-independent, as function of the halo mass
+ fesctab_III : array
+ Escape fraction for popIII, z-independent, as function of the halo mass
+ reio_integrand_II_interp : integrand
+ Number of ionizing photons produced by popII, interpolated in redshift
+ reio_integrand_II_interp : integrand
+ Number of ionizing photons produced by popIII, interpolated in redshift
+ niondot_avg_II : array
+ Number of ionizing photons produced by popII computed at the redshifts of the analysis
+ niondot_avg_III : array
+ Number of ionizing photons produced by popIII computed at the redshifts of the analysis
+ niondot_avg : array
+ Number of ionizing photons produced at the redshifts of the analysis
+ sigmaofRtab : matrix
+ Variance of the matter field on scales associated with the shells and at the observed rerdshift
+ Matom : method
+ Minimum mass for atomic-cooling halos at given redshift
+ Mmol_0 : method
+ Minimum mass for molecular halos without LW or VCB feedback
+ Mmol_vcb : method
+ Minimum mass for molecular halos without LW feedback
+ Mmol_LW : method
+ Minimum mass for molecular halos without VCB feedback
+ Mmol : method
+ Minimum mass for molecular halos with LW and VCB feedback
+ dMh_dt : method
+ Mass accretion rate, in units of M_sun/yr
+ fstar_ofz : method
+ Star formation efficiency generative function
+ fduty : method
+ Duty cycle to damp star formation in low- or high-mass halos or both
+ SFE_II : method
+ Star formation efficiency for popII stars
+ SFE_III : method
+ Star formation efficiency for popIII stars
+ SFE : method
+ Total star formation efficiency
+ SFR : method
+ Star formation rate
+ SRFD_integrand : method
+ Integrand to compute the star formation rate density
+ J_LW_21 : method
+ Mean cosmological LW background specific intensity
+ J_LW_Discrete : method
+ Radial kernel of the LW specific intensity before R integration
+ dSFRDIII_dJ : method
+ Response of the popIII star formation rate density to the LW background
+ fesc_II : method
+ Escape fraction of ionizing photons in halos hosting popII stars
+ fesc_III : method
+ Escape fraction of ionizing photons in halos hosting popIII stars
+ compute_sigmaR_nu : method
+ Compute the local mass function conditioned over the environment
+ compute_gamma : method
+ Compute linear and quadratic gamma exponents for the SFRD-delta (popII+popIII) and niondot-delta (only popII) lognormal approximations
+ gamma_II_index2D : array
+ Linear gamma exponent for SFRD in popII
+ gamma2_II_index2D : array
+ Quadratic gamma exponent for SFRD in popII
+ gamma_niondot_II_index2D : array
+ Linear gamma exponent for niondot in popII
+ gamma2_niondot_II_index2D : array
+ Quadratic gamma exponent for niondot in popII
+ gamma_III_index2D : array
+ Linear gamma exponent for SFRD in popIII
+ gamma2_III_index2D : array
+ Quadratic gamma exponent for SFRD in popIII
+ compute_numerical_der_gamma : method
+ Compute first and second numerical derivatives of an array wrt the other (used for SFRD and niondot wrt delta)
+ """
+
+
+ @classmethod
+ def light_init(cls): # Light instantialization, in case we only need to access specific class methods without initializing the full class
+ obj = cls.__new__(cls)
+ return obj
+
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, z_Init = None):
+
+ # if z_Init is not provided, we initialize it here. This allows us to avoid redundant computations if they were already initialized in the parent class and passed as arguments.
+ if z_Init is None:
+ z_Init = Z_init(UserParams=UserParams, CosmoParams=CosmoParams)
+
+ zSFRDflat = np.geomspace(UserParams.zmin, constants.zmax_AstroBreak, 128) # extend to z = constants.zmax_AstroBreak for extrapolation purposes. Higher in z than zInit.zintegral
+ zSFRD, mArray = np.meshgrid(zSFRDflat, HMFinterp.Mhtab, indexing = 'ij', sparse = True) # create redshift and halo mass matrices, dimension (z, Mh)
+
+ init_J21LW_interp = interpolate.interp1d(zSFRDflat, np.zeros_like(zSFRDflat), kind = 'linear', bounds_error = False, fill_value = 0,) # initialize no LW background, used to compute Mmol() function, NOT the individual Pop II and III LW background
+
+ SFRD_II_avg = np.trapezoid(self.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zSFRD, pop=2), HMFinterp.logtabMh, axis = 1) # average SFRD
+ self.SFRD_II_interp = interpolate.interp1d(zSFRDflat, SFRD_II_avg, kind = 'cubic', bounds_error = False, fill_value = 0,)
+
+ J21LW_II = self.J_LW_21(CosmoParams, AstroParams, SFRD_II_avg, zSFRDflat, pop=2) # LW specific intensity from popII
+ self.J_21_LW_II = interpolate.interp1d(zSFRDflat, J21LW_II, kind = 'cubic')(z_Init.zintegral) # TODO: fix inconsistent naming conventions for J21LW
+
+ if AstroParams.USE_POPIII:
+
+ # initialize popIII SFRD, update iteratively to account for LW feedback
+ SFRD_III_Iter_Matrix = [np.trapezoid(self.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zSFRD, pop=3, vCB=CosmoParams.vcb_avg, J21LW_interp=init_J21LW_interp), HMFinterp.logtabMh, axis = 1)]
+
+ errorTolerance = 0.001 # 0.1 percent accuracy --> TODO: allow to change tolerance? E.g. input of init function with default 0.001
- errorTolerance = 0.001 # 0.1 percent accuracy
recur_iterate_Flag = True
- while recur_iterate_Flag == True:
- J21LW_III_iter = 1e21 * J_LW(Astro_Parameters, Cosmo_Parameters, SFRD_III_Iter_Matrix[-1], zSFRDflat, 3)
- J21LW_interp = interpolate.interp1d(zSFRDflat, J21LW_II + J21LW_III_iter, kind = 'linear', fill_value = 0, bounds_error = False)
+ while recur_iterate_Flag:
+
+ J21LW_III_iter = self.J_LW_21(CosmoParams, AstroParams, SFRD_III_Iter_Matrix[-1], zSFRDflat, pop=3)
+ loop_J21LW_interp = interpolate.interp1d(zSFRDflat, J21LW_II + J21LW_III_iter, kind = 'linear', fill_value = 0, bounds_error = False)
- SFRD_III_avg_n = np.trapezoid(SFRD_III_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, J21LW_interp, zSFRD, zSFRD, ClassCosmo.pars['v_avg']), HMF_interpolator.logtabMh, axis = 1)
+ SFRD_III_avg_n = np.trapezoid(self.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zSFRD, pop=3, vCB=CosmoParams.vcb_avg, J21LW_interp= loop_J21LW_interp), HMFinterp.logtabMh, axis = 1) # correct through LW feedback
SFRD_III_Iter_Matrix.append(SFRD_III_avg_n)
if max(SFRD_III_Iter_Matrix[-1]/SFRD_III_Iter_Matrix[-2]) < 1.0 + errorTolerance and min(SFRD_III_Iter_Matrix[-1]/SFRD_III_Iter_Matrix[-2]) > 1.0 - errorTolerance:
recur_iterate_Flag = False
- self.J21LW_interp_conv_avg = J21LW_interp
- SFRD_III_cnvg_interp = interpolate.interp1d(zSFRDflat, SFRD_III_Iter_Matrix[-1], kind = 'cubic', bounds_error = False, fill_value = 0)
- self.J_21_LW_III = interpolate.interp1d(zSFRDflat, J21LW_III_iter, kind = 'cubic')(self.zintegral)
+ self.J21LW_interp_conv_avg = loop_J21LW_interp
- elif Astro_Parameters.USE_POPIII == False:
- self.SFRD_III_avg = np.zeros_like(self.zintegral)
- SFRD_III_cnvg_interp = interpolate.interp1d(zSFRDflat, np.zeros_like(zSFRDflat), kind = 'cubic', bounds_error = False, fill_value = 0)
+ self.SFRD_III_cnvg_interp = interpolate.interp1d(zSFRDflat, SFRD_III_Iter_Matrix[-1], kind = 'cubic', bounds_error = False, fill_value = 0) # SFRD for popIII
+ self.J_21_LW_III = interpolate.interp1d(zSFRDflat, J21LW_III_iter, kind = 'cubic')(z_Init.zintegral) # LW flux from popIIII
+
+ else:
+ self.SFRD_III_cnvg_interp = interpolate.interp1d(zSFRDflat, np.zeros_like(zSFRDflat), kind = 'cubic', bounds_error = False, fill_value = 0)
- self.SFRD_II_avg = SFRD_II_interp(self.zintegral)
- self.SFRD_III_avg = SFRD_III_cnvg_interp(self.zintegral)
+ self.SFRD_II_avg = self.SFRD_II_interp(z_Init.zintegral)
+ self.SFRD_III_avg = self.SFRD_III_cnvg_interp(z_Init.zintegral)
self.SFRD_avg = self.SFRD_II_avg + self.SFRD_III_avg
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False):
- self.SFRDbar2D_II = SFRD_II_interp(np.nan_to_num(self.zGreaterMatrix, nan = 100))
- self.SFRDbar2D_III = SFRD_III_cnvg_interp(np.nan_to_num(self.zGreaterMatrix, nan = 100))
+ self.SFRDbar2D_II = self.SFRD_II_interp(np.nan_to_num(z_Init.zGreaterMatrix, nan = 100)) # dimension (z,R)
+ self.SFRDbar2D_III = self.SFRD_III_cnvg_interp(np.nan_to_num(z_Init.zGreaterMatrix, nan = 100)) # dimension (z,R)
- elif(Cosmo_Parameters.Flag_emulate_21cmfast==True): ###HAC ACAUSAL: This accounts for the acausal Mmol effect in 21cmfast
- zpTable, tempTable, mTable = np.meshgrid(self.zintegral, self.Rtabsmoo, HMF_interpolator.Mhtab, indexing = 'ij', sparse = True)
- zppTable = self.zGreaterMatrix.reshape((len(self.zintegral), len(self.Rtabsmoo), 1))
+ # Reionization
+ self.fesctab_II = self.fesc_II(AstroParams, HMFinterp.Mhtab) # prepare fesc(M) table -- z independent for now
+ self.fesctab_III = self.fesc_III(AstroParams, HMFinterp.Mhtab) # PopIII prepare fesc(M) table -- z independent for now
- self.SFRDbar2D_II = np.trapezoid(SFRD_II_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mTable, zppTable, zpTable), HMF_interpolator.logtabMh, axis = 2)
- self.SFRDbar2D_III = np.trapezoid(SFRD_III_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mTable, J21LW_interp, zppTable, zpTable, ClassCosmo.pars['v_avg']), HMF_interpolator.logtabMh, axis = 2)
+ # prepare integrand to compute number of ionizing photons
+ reio_integrand_II = self.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zSFRD, pop=2)
+ reio_integrand_III = self.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zSFRD, pop=3, vCB=CosmoParams.vcb_avg, J21LW_interp=init_J21LW_interp)
+ niondot_avg_II = AstroParams.N_ion_perbaryon_II/cosmology.rho_baryon(CosmoParams,0.) * np.trapezoid(reio_integrand_II * self.fesctab_II, HMFinterp.logtabMh, axis = 1) # number of ionizing photons produced by popII
+ niondot_avg_III = AstroParams.N_ion_perbaryon_III/cosmology.rho_baryon(CosmoParams,0.) * np.trapezoid(reio_integrand_III * self.fesctab_III, HMFinterp.logtabMh, axis = 1) # number of ionizing photons produced by popIIII
- self.SFRDbar2D_II[np.isnan(self.SFRDbar2D_II)] = 0.0
- self.SFRDbar2D_III[np.isnan(self.SFRDbar2D_III)] = 0.0
-
-
- #####################################################################################################
- ### STEP 2: Broadcasted Prescription to Compute gammas
- zArray, rArray, mArray, deltaNormArray = np.meshgrid(self.zintegral, self.Rtabsmoo, HMF_interpolator.Mhtab, deltatab_norm, indexing = 'ij', sparse = True)
+ self.reio_integrand_II_interp = interpolate.interp1d(zSFRDflat, niondot_avg_II, kind = 'cubic', bounds_error = False, fill_value = 0)
+ self.reio_integrand_III_interp = interpolate.interp1d(zSFRDflat, niondot_avg_III, kind = 'cubic', bounds_error = False, fill_value = 0)
- rGreaterArray = np.zeros_like(zArray) + rArray
+ self.niondot_avg_II = self.reio_integrand_II_interp(z_Init.zintegral)
+ self.niondot_avg_III = self.reio_integrand_III_interp(z_Init.zintegral)
+ self.niondot_avg = self.niondot_avg_II + self.niondot_avg_III
- rGreaterArray[Cosmo_Parameters.chiofzint(zArray) + rArray >= Cosmo_Parameters.chiofzint(50)] = np.nan
- zGreaterArray = Cosmo_Parameters.zfofRint(Cosmo_Parameters.chiofzint(zArray) + rGreaterArray)
+ if not UserParams.DO_ONLY_GLOBAL:
+ # compute gamma coefficients required by the power spectrum (see correlations.py for detail)
+ self.sigmaofRtab = np.array([HMFinterp.sigmaR_int(CosmoParams._Rtabsmoo, zz) for zz in z_Init.zintegral])
- whereNotNans = np.invert(np.isnan(rGreaterArray))
+ self.compute_gamma(CosmoParams, AstroParams, HMFinterp, z_Init.zintegral, CosmoParams._Rtabsmoo, HMFinterp.Mhtab, self.sigmaofRtab, self.fesctab_II)
- sigmaR = np.zeros((len(self.zintegral), len(self.Rtabsmoo), 1, 1))
- sigmaR[whereNotNans] = HMF_interpolator.sigmaRintlog((np.log(rGreaterArray)[whereNotNans], zGreaterArray[whereNotNans]))
- sigmaM = np.zeros((len(self.zintegral), len(self.Rtabsmoo), len(HMF_interpolator.Mhtab), 1)) ###HAC: Is this necessary?
- sigmaM = HMF_interpolator.sigmaintlog((np.log(mArray), zGreaterArray))
+ def Matom(self, z):
+ """
+ Compute minimum mass for atomic-cooling halos
- modSigmaSq = sigmaM**2 - sigmaR**2
- indexTooBig = (modSigmaSq <= 0.0)
- modSigmaSq[indexTooBig] = np.inf #if sigmaR > sigmaM the halo does not fit in the radius R. Cut the sum
- modSigma = np.sqrt(modSigmaSq)
+ Parameters
+ ----------
+ z : float
+ Redshift
- nu0 = Cosmo_Parameters.delta_crit_ST / sigmaM
- nu0[indexTooBig] = 1.0
+ Returns
+ ----------
+ Matom : float
+ Minimum halo mass, in Msun
+ """
- dsigmadMcurr = HMF_interpolator.dsigmadMintlog((np.log(mArray),zGreaterArray)) ###HAC: Check this works when emulating 21cmFAST
- dlogSdMcurr = (dsigmadMcurr*sigmaM*2.0)/(modSigmaSq)
+ Matom = 3.3e7 * pow((1.+z)/(21.),-3./2)
- deltaArray = deltaNormArray * sigmaR
- # sMax = 0.3
- # deltaArray[Nsigmad * sigmaR > 1.0] = deltaNormArray * sMax
+ return Matom
- modd = Cosmo_Parameters.delta_crit_ST - deltaArray
- nu = modd / modSigma
- #PS_HMF~ delta/sigma^3 *exp(-delta^2/2sigma^2) * consts(of M including dsigma^2/dm)
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False):
- #Normalized PS(d)/ at each mass. 21cmFAST instead integrates it and does SFRD(d)/
- # last 1+delta product converts from Lagrangian to Eulerian
- EPS_HMF_corr = (nu/nu0) * (sigmaM/modSigma)**2.0 * np.exp(-Cosmo_Parameters.a_corr_EPS * (nu**2-nu0**2)/2.0 ) * (1.0 + deltaArray)
- integrand_II = EPS_HMF_corr * SFRD_II_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, zGreaterArray, zGreaterArray)
-
- # SarahLibanore: compute quantities in Lagrangian space to get gamma in Lagrangian space
- EPS_HMF_corr_Lag = (nu/nu0) * (sigmaM/modSigma)**2.0 * np.exp(-Cosmo_Parameters.a_corr_EPS * (nu**2-nu0**2)/2.0 )
- integrand_II_Lag = EPS_HMF_corr_Lag * SFRD_II_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, zGreaterArray, zGreaterArray)
+ def Mmol_0(self, z):
+ """
+ Compute minimum mass for molecular-cooling halos without LW or VCB feedback
- elif(Cosmo_Parameters.Flag_emulate_21cmfast==True): #as 21cmFAST, use PS HMF, integrate and normalize at the end
- PS_HMF_corr = cosmology.PS_HMF_unnorm(Cosmo_Parameters, HMF_interpolator.Mhtab.reshape(len(HMF_interpolator.Mhtab),1),nu,dlogSdMcurr) * (1.0 + deltaArray)
- integrand_II = PS_HMF_corr * SFR_II(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, zGreaterArray, zGreaterArray) * mArray
-
- else:
- print("ERROR: Need to set FLAG_EMULATE_21CMFAST at True or False in the self.gamma_index2D calculation.")
+ Parameters
+ ----------
+ z : float
+ Redshift
- ########
- # Compute SFRD quantities
- SFRD_II_dR = np.trapezoid(integrand_II, HMF_interpolator.logtabMh, axis = 2)
- # SarahLibanore: to compute reionization
- niondot_II_dR = np.trapezoid(integrand_II*fesctab_II[None, None, :, None], HMF_interpolator.logtabMh, axis = 2)
+ Returns
+ ----------
+ Mmol_0 : float
+ Minimum halo mass, in Msun
+ """
- # SarahLibanore: compute quantities in Lagrangian space to get gamma in Lagrangian space
- SFRD_II_dR_Lag = np.trapezoid(integrand_II_Lag, HMF_interpolator.logtabMh, axis = 2)
- niondot_II_dR_Lag = np.trapezoid(integrand_II_Lag*fesctab_II[None, None, :, None], HMF_interpolator.logtabMh, axis = 2)
+ Mmol_0 = 3.3e7 * (1.+z)**(-1.5)
- ###
- if Astro_Parameters.USE_POPIII == True:
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False):
- integrand_III = EPS_HMF_corr * SFRD_III_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, J21LW_interp, zGreaterArray, zGreaterArray, ClassCosmo.pars['v_avg'])
- elif(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- integrand_III = PS_HMF_corr * SFR_III(Astro_Parameters, Cosmo_Parameters, ClassCosmo, HMF_interpolator, mArray, J21LW_interp, zGreaterArray, zGreaterArray, ClassCosmo.pars['v_avg']) * mArray
+ return Mmol_0
- SFRD_III_dR = np.trapezoid(integrand_III, HMF_interpolator.logtabMh, axis = 2)
- # SarahLibanore: reionization
- niondot_III_dR = np.trapezoid(integrand_III*fesctab_III[None, None, :, None], HMF_interpolator.logtabMh, axis = 2)
- else:
- SFRD_III_dR = np.zeros_like(SFRD_II_dR)
-
- #compute gammas
- # SarahLibanore: extend gamma computation to reionization, Lagrangian space and to second order
- midpoint = deltaArray.shape[-1]//2 #midpoint of deltaArray at delta = 0
+ def Mmol_vcb(self, CosmoParams, AstroParams, z, vCB):
+ """
+ Compute minimum mass for molecular-cooling halos without LW feedback
- self.gamma_II_index2D = np.log(SFRD_II_dR[:,:,midpoint+1]/SFRD_II_dR[:,:,midpoint-1]) / (deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1])
- self.gamma_II_index2D[np.isnan(self.gamma_II_index2D)] = 0.0
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ z : float
+ Redshift
+ vCB : float
+ Baryon-DM relative velocity
- self.gamma_niondot_II_index2D = np.log(niondot_II_dR[:,:,midpoint+1]/niondot_II_dR[:,:,midpoint-1]) / (deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1])
- self.gamma_niondot_II_index2D[np.isnan(self.gamma_niondot_II_index2D)] = 0.0
+ Returns
+ ----------
+ Mmol_vcb : float
+ Minimum halo mass, in Msun
+ """
- # Lagrangian
- self.gamma_II_index2D_Lag = np.log(SFRD_II_dR_Lag[:,:,midpoint+1]/SFRD_II_dR_Lag[:,:,midpoint-1]) / (deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1])
- self.gamma_II_index2D_Lag[np.isnan(self.gamma_II_index2D_Lag)] = 0.0
+ mmolBase = self.Mmol_0(z)
+ vcbFeedback = pow(1 + AstroParams.A_vcb * vCB / CosmoParams.sigma_vcb, AstroParams.beta_vcb)
- self.gamma_niondot_II_index2D_Lag = np.log(niondot_II_dR_Lag[:,:,midpoint+1]/niondot_II_dR_Lag[:,:,midpoint-1]) / (deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1])
- self.gamma_niondot_II_index2D_Lag[np.isnan(self.gamma_niondot_II_index2D_Lag)] = 0.0
+ Mmol_vcb = mmolBase * vcbFeedback
- #compute second-order derivative gammas by computing two first-order derivatives #TODO: functionalize derivatives
- der1_II = np.log(SFRD_II_dR[:,:,midpoint]/SFRD_II_dR[:,:,midpoint-1])/(deltaArray[:,:,0,midpoint] - deltaArray[:,:,0,midpoint-1]) #ln(y2/y1)/(x2-x1)
- der2_II = np.log(SFRD_II_dR[:,:,midpoint+1]/SFRD_II_dR[:,:,midpoint])/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint]) #ln(y3/y2)/(x3-x2)
- self.gamma2_II_index2D = (der2_II - der1_II)/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1]) #second derivative: (der2-der1)/((x3-x1)/2)
- self.gamma2_II_index2D[np.isnan(self.gamma2_II_index2D)] = 0.0
-
- der1_niondot_II = np.log(niondot_II_dR[:,:,midpoint]/niondot_II_dR[:,:,midpoint-1])/(deltaArray[:,:,0,midpoint] - deltaArray[:,:,0,midpoint-1]) #ln(y2/y1)/(x2-x1)
- der2_niondot_II = np.log(niondot_II_dR[:,:,midpoint+1]/niondot_II_dR[:,:,midpoint])/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint]) #ln(y3/y2)/(x3-x2)
- self.gamma2_niondot_II_index2D = (der2_niondot_II - der1_niondot_II)/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1]) #second derivative: (der2-der1)/((x3-x1)/2)
- self.gamma2_niondot_II_index2D[np.isnan(self.gamma2_niondot_II_index2D)] = 0.0
-
- # Lagrangian
- der1_II_Lag = np.log(SFRD_II_dR_Lag[:,:,midpoint]/SFRD_II_dR_Lag[:,:,midpoint-1])/(deltaArray[:,:,0,midpoint] - deltaArray[:,:,0,midpoint-1]) #ln(y2/y1)/(x2-x1)
- der2_II_Lag = np.log(SFRD_II_dR_Lag[:,:,midpoint+1]/SFRD_II_dR_Lag[:,:,midpoint])/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint]) #ln(y3/y2)/(x3-x2)
- self.gamma2_II_index2D_Lag = (der2_II_Lag - der1_II_Lag)/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1]) #second derivative: (der2-der1)/((x3-x1)/2)
- self.gamma2_II_index2D_Lag[np.isnan(self.gamma2_II_index2D_Lag)] = 0.0
-
- der1_niondot_II_Lag = np.log(niondot_II_dR_Lag[:,:,midpoint]/niondot_II_dR_Lag[:,:,midpoint-1])/(deltaArray[:,:,0,midpoint] - deltaArray[:,:,0,midpoint-1]) #ln(y2/y1)/(x2-x1)
- der2_niondot_II_Lag = np.log(niondot_II_dR_Lag[:,:,midpoint+1]/niondot_II_dR_Lag[:,:,midpoint])/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint]) #ln(y3/y2)/(x3-x2)
- self.gamma2_niondot_II_index2D_Lag = (der2_niondot_II_Lag - der1_niondot_II_Lag)/(deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1]) #second derivative: (der2-der1)/((x3-x1)/2)
- self.gamma2_niondot_II_index2D_Lag[np.isnan(self.gamma2_niondot_II_index2D_Lag)] = 0.0
+ return Mmol_vcb
- if Astro_Parameters.USE_POPIII == True:
- self.gamma_III_index2D = np.log(SFRD_III_dR[:,:,-1]/SFRD_III_dR[:,:,0]) / (deltaArray[:,:,0,-1] - deltaArray[:,:,0,0])
- self.gamma_III_index2D[np.isnan(self.gamma_III_index2D)] = 0.0
- # SarahLibanore: reionization
- self.gamma_niondot_III_index2D = np.log(niondot_III_dR[:,:,midpoint+1]/niondot_III_dR[:,:,midpoint-1]) / (deltaArray[:,:,0,midpoint+1] - deltaArray[:,:,0,midpoint-1])
- self.gamma_niondot_III_index2D[np.isnan(self.gamma_niondot_III_index2D)] = 0.0
+ def Mmol_LW(self, AstroParams, J21LW_interp, z):
+ """
+ Compute minimum mass for molecular halos without VCB feedback
- else:
- self.gamma_III_index2D = np.zeros_like(self.gamma_II_index2D)
- # SarahLibanore: reionization
- self.gamma_niondot_III_index2D = np.zeros_like(self.gamma_niondot_II_index2D)
+ Parameters
+ ----------
+ AstroParams : AstroParams class
+ J21LWinterp : interpolator
+ Interpolator of the LW flux, function of z
+ z : float
+ Redshift
- #####################################################################################################
- ### STEP 3: Computing lambdas in velocity anisotropies
- ### Because we found the SFRD vcb dependence to be delta independent, we compute quantities below for a variety of R's and delta_R = 0
-
- if Astro_Parameters.USE_POPIII == True:
- self.vcb_expFitParams = np.zeros((len(self.zintegral),len(self.Rtabsmoo), 4)) #for the 4 exponential parameters
-
- if Cosmo_Parameters.USE_RELATIVE_VELOCITIES == True:
+ Returns
+ ----------
+ Mmol_LW : float
+ Minimum halo mass, in Msun
+ """
- v_avg0 = ClassCosmo.pars['v_avg']
- vAvg_array = v_avg0 * np.array([0.2, 0.7, 1, 1.25, 2.0])
- etaTilde_array = 3 * vAvg_array**2 / ClassCosmo.pars['sigma_vcb']**2
+ mmolBase = self.Mmol_0(z)
+ lwFeedback = 1 + AstroParams.A_LW*pow(J21LW_interp(z), AstroParams.beta_LW)
- zArray, rArray, mArray, velArray = np.meshgrid(self.zintegral, self.Rtabsmoo, HMF_interpolator.Mhtab, vAvg_array, indexing = 'ij', sparse = True)
+ Mmol_LW = mmolBase * lwFeedback
- rGreaterArray = np.zeros_like(zArray) + rArray
+ return Mmol_LW
- rGreaterArray[Cosmo_Parameters.chiofzint(zArray) + rArray >= Cosmo_Parameters.chiofzint(50)] = np.nan
- zGreaterArray = Cosmo_Parameters.zfofRint(Cosmo_Parameters.chiofzint(zArray) + rGreaterArray)
- whereNotNans = np.invert(np.isnan(rGreaterArray))
+ def Mmol(self, CosmoParams, AstroParams, J21LW_interp, z, vCB):
+ """
+ Compute minimum mass for molecular halos with LW and VCB feedback
- sigmaR = np.zeros((len(self.zintegral), len(self.Rtabsmoo), 1, 1))
- sigmaR[whereNotNans] = HMF_interpolator.sigmaRintlog((np.log(rGreaterArray)[whereNotNans], zGreaterArray[whereNotNans]))
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ J21LWinterp : interpolator or False
+ Interpolator of the LW flux, function of z. If False, no LW feedback.
+ z : float
+ Redshift
+ vCB : float or False
+ Baryon-DM relative velocity. If False, no feedback from streaming velocitites.
- sigmaM = np.zeros((len(self.zintegral), len(self.Rtabsmoo), len(HMF_interpolator.Mhtab), 1)) ###HAC: Is this necessary?
- sigmaM = HMF_interpolator.sigmaintlog((np.log(mArray), zGreaterArray))
+ Returns
+ ----------
+ Mmol : float
+ Minimum halo mass, in Msun
+ """
- modSigmaSq = sigmaM**2 - sigmaR**2
- indexTooBig = (modSigmaSq <= 0.0)
- modSigmaSq[indexTooBig] = np.inf #if sigmaR > sigmaM the halo does not fit in the radius R. Cut the sum
- modSigma = np.sqrt(modSigmaSq)
+ Mmol = self.Mmol_0(z)
- nu0 = Cosmo_Parameters.delta_crit_ST / sigmaM
- nu0[indexTooBig] = 1.0
+ if vCB is not False:
+ vcbFeedback = pow(1 + AstroParams.A_vcb * vCB / CosmoParams.sigma_vcb, AstroParams.beta_vcb)
+ Mmol = Mmol * vcbFeedback
- dsigmadMcurr = HMF_interpolator.dsigmadMintlog((np.log(mArray),zGreaterArray)) ###HAC: Check this works when emulating 21cmFAST
- dlogSdMcurr = (dsigmadMcurr*sigmaM*2.0)/(modSigmaSq)
+ if J21LW_interp is not False:
+ lwFeedback = 1 + AstroParams.A_LW*pow(J21LW_interp(z), AstroParams.beta_LW)
+ Mmol = Mmol * lwFeedback
- deltaZero = np.zeros_like(sigmaR)
- # sMax = 0.3
- # deltaArray[Nsigmad * sigmaR > 1.0] = deltaNormArray * sMax
+ # TODO: added option to turn off vCB/LW feedback entirely by putting the input to False, we may consider removing duplicating functions without feedback (Mmol_0, Mmol_vcb, Mmol_LW) + option to pass None and get the CosmoParams.vcb_avg and SFRD.J21LW_interp_conv_avg within the method instead, to avoid having to deal with this externally? E.g. in compute_pop_LFbias_binned(); note that CosmoParams is note needed unless we are computing the vcb feedback, so it could be made an optional parameter as well
+ # TODO: refs for atomic/molecular-cooling mass calculation functions
- modd = Cosmo_Parameters.delta_crit_ST - deltaZero
- nu = modd / modSigma
+ return Mmol
- #PS_HMF~ delta/sigma^3 *exp(-delta^2/2sigma^2) * consts(of M including dsigma^2/dm)
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False):
- #Normalized PS(d)/ at each mass. 21cmFAST instead integrates it and does SFRD(d)/
- # last 1+delta product converts from Lagrangian to Eulerian
- EPS_HMF_corr = (nu/nu0) * (sigmaM/modSigma)**2.0 * np.exp(-Cosmo_Parameters.a_corr_EPS * (nu**2-nu0**2)/2.0 ) * (1.0 + deltaZero)
- integrand_III = EPS_HMF_corr * SFRD_III_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, J21LW_interp, zGreaterArray, zGreaterArray, velArray)
-
- elif(Cosmo_Parameters.Flag_emulate_21cmfast==True): #as 21cmFAST, use PS HMF, integrate and normalize at the end
-# PS_HMF_corr = cosmology.PS_HMF_unnorm(Cosmo_Parameters, HMF_interpolator.Mhtab.reshape(len(HMF_interpolator.Mhtab),1),nu,dlogSdMcurr) * (1.0 + deltaZero)
- PS_HMF_corr = cosmology.PS_HMF_unnorm(Cosmo_Parameters, HMF_interpolator.Mhtab.reshape(len(HMF_interpolator.Mhtab),1), nu, dlogSdMcurr) * (1.0 + deltaZero)
- integrand_III = PS_HMF_corr * SFR_III(Astro_Parameters, Cosmo_Parameters, ClassCosmo, HMF_interpolator, mArray, J21LW_interp, zGreaterArray, zGreaterArray, velArray) * mArray
-
- else:
- print("ERROR: Need to set FLAG_EMULATE_21CMFAST at True or False in the self.gamma_index2D calculation.")
- SFRD_III_dR_V = np.trapezoid(integrand_III, HMF_interpolator.logtabMh, axis = 2)
-
- SFRDIII_Ratio = SFRD_III_dR_V / SFRD_III_dR_V[:,:,len(vAvg_array)//2].reshape((len(self.zintegral), len(self.Rtabsmoo), 1))
- SFRDIII_Ratio[np.isnan(SFRDIII_Ratio)] = 0.0
-
- #temporarily turning off divide warnings; will turn them on again after exponential fitting routine
- divideErr = np.seterr(divide = 'ignore')
- divideErr2 = np.seterr(invalid = 'ignore')
+ def dMh_dt(self, CosmoParams, AstroParams, HMFinterp, massVector, z):
+ """
+ Compute halo mass accretion rate, in units of M_sun/yr
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ massVector : array
+ Halo masses
+ z : array
+ Redshift
+
+ Returns
+ ----------
+ Mhdot : array
+ Halo mass accretion rate
+ """
+
+ if not CosmoParams.Flag_emulate_21cmfast: # GALLUMI-like
+ if AstroParams.accretion_model == "exp": # Exponential accretion
+ dMhdz = massVector * constants.ALPHA_accretion_exponential
- ###HAC: The next few lines fits for rho(z, v) / rhoavg = Ae^-b tilde(eta) + Ce^-d tilde(eta).
- ### To expedite the computation, instead of using scipy.optimize.curve_fit, I choose two points where one
- ### exponential dominates to fit for C and d, subtract Ce^-d tilde(eta) from rho(z, v) / rhoavg, then fit for A and b
+ elif AstroParams.accretion_model == "EPS": # EPS accretion
- dParams = -1 * np.log(SFRDIII_Ratio[:,:,-1]/SFRDIII_Ratio[:,:,-2]) / (etaTilde_array[-1]-etaTilde_array[-2])
- cParams = np.exp(np.log(SFRDIII_Ratio[:,:,-1]) + dParams * etaTilde_array[-1])
-
- SFRDIII_RatioNew = SFRDIII_Ratio - cParams.reshape(*cParams.shape, 1) * np.exp(-1 * dParams.reshape(*dParams.shape, 1)* etaTilde_array.reshape(1,1,*etaTilde_array.shape) )
- bParams = -1 * np.log(SFRDIII_RatioNew[:,:,0]/SFRDIII_RatioNew[:,:,1]) / (etaTilde_array[0]-etaTilde_array[1])
- aParams = np.exp(np.log(SFRDIII_RatioNew[:,:,0]) + bParams * etaTilde_array[0])
+ Mh2 = massVector* constants.EPSQ_accretion
+ indexMh2low = Mh2 < massVector.flatten()[0]
+ Mh2[indexMh2low] = massVector.flatten()[0]
- divideErr = np.seterr(divide = 'warn')
- divideErr2 = np.seterr(invalid = 'warn')
+ sigmaMh = HMFinterp.sigmaintlog((np.log(massVector), z))
+ sigmaMh2 = HMFinterp.sigmaintlog((np.log(Mh2), z))
+ sigmaMh2[np.full_like(sigmaMh2, fill_value=True, dtype = bool) * indexMh2low] = 1e99
- self.vcb_expFitParams[:,:,0] = aParams
- self.vcb_expFitParams[:,:,1] = bParams
- self.vcb_expFitParams[:,:,2] = cParams
- self.vcb_expFitParams[:,:,3] = dParams
-
- self.vcb_expFitParams[np.isnan(self.vcb_expFitParams)] = 0.0
-
-
- #####################################################################################################
- ### STEP 4: LW correction to Pop III gammas
- if Astro_Parameters.USE_POPIII == True:
- if Astro_Parameters.USE_LW_FEEDBACK == True:
- #get the zero-lag correlation function (zero distance separation)
- xi_RR_CF_zerolag = np.copy(ClassCosmo.pars['xi_RR_CF'][:,:,0])
-
- #compute LW coefficients for Pop II and III stars
- coeff1LWzp_II, coeff2LWzpRR_II = J_LW_Discrete(Astro_Parameters, Cosmo_Parameters, ClassCosmo, self.zintegral, 2, self.Rtabsmoo, SFRD_II_interp, SFRD_III_cnvg_interp)
- coeff1LWzp_III, coeff2LWzpRR_III = J_LW_Discrete(Astro_Parameters, Cosmo_Parameters, ClassCosmo, self.zintegral, 3, self.Rtabsmoo, SFRD_II_interp, SFRD_III_cnvg_interp)
-
- # Corrections WITH Rmax smoothing
- deltaGamma_R = 1 / np.transpose([SFRD_III_cnvg_interp(self.zintegral)])
- deltaGamma_R *= np.array([dSFRDIII_dJ(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, J21LW_interp, np.array([self.zintegral]).T, np.array([self.zintegral]).T, ClassCosmo.pars['v_avg'])]).T
- deltaGamma_R = deltaGamma_R * (coeff1LWzp_II * coeff2LWzpRR_II * self.gamma_II_index2D + coeff1LWzp_III * coeff2LWzpRR_III * self.gamma_III_index2D) * 1e21
-
- #choose only max of r and R; since growth factors cancel out, none are used here
- xi_R_maxrR = np.tril(np.ones_like(xi_RR_CF_zerolag)) * np.transpose([np.diag(xi_RR_CF_zerolag)])
- xi_R_maxrR = xi_R_maxrR + np.triu(xi_RR_CF_zerolag, k = 1)
-
- self.deltaGamma_R_Matrix = xi_R_maxrR.reshape(len(self.Rtabsmoo), 1, len(self.Rtabsmoo)) * (deltaGamma_R * self.dlogRR * self.Rtabsmoo).reshape(1, len(self.zintegral), len(self.Rtabsmoo))
- deltaGamma_R_z = np.transpose( np.sum(self.deltaGamma_R_Matrix, axis = 2) / np.transpose([np.diagonal(xi_RR_CF_zerolag[:,:])]) )
- deltaGamma_R_z[ self.gamma_III_index2D == 0 ] = 0 #don't correct gammas if gammas are zero
- self.deltaGamma_R_z = deltaGamma_R_z
- self.gamma_III_index2D += deltaGamma_R_z #correct Pop III gammas with LW correction factor
+ growth = cosmology.growth(CosmoParams,z)
+ dzgrow = z*0.01
+ dgrowthdz = (cosmology.growth(CosmoParams,z+dzgrow) - cosmology.growth(CosmoParams,z-dzgrow))/(2.0 * dzgrow)
+ dMhdz = - massVector * np.sqrt(2/np.pi)/np.sqrt(sigmaMh2**2 - sigmaMh**2) *dgrowthdz/growth * CosmoParams.delta_crit_ST
+
+ elif(AstroParams.accretion_model == 'RP16'): # Fitting function to Rodríguez-Puebla+16 N-body simulations (eq. 11, dynamically averaged parameters from table 2)
+ a = (1+z)**-1
+ beta = 10**(2.73-(1.828*a)+(0.654*a**2))
+ alpha = 1 + (0.329*a) - (0.206*a**2)
+
+ # Factors of h are accounted for to give units of M_sun/year for halo masses in units of M_sun:
+ Mhdot = beta * (massVector/1e12)**alpha * cosmology.Hub(CosmoParams, z) / (100*CosmoParams.h_fid)
+ else:
+ print("ERROR! Have to choose an accretion model in AstroParams (accretion_model)")
- #####################################################################################################
- ### STEP 5: Lyman-Alpha Anisotropies
-
- #Makes heavy use of broadcasting to make computations faster
- #3D cube will be summed over one axis. Dimensions are (z,R,n) = (64, 45, 21)
+ return -1
+
+ Mhdot = dMhdz*cosmology.Hubinvyr(CosmoParams,z)*(1.0+z)
+
+ else: # 21cmfast-like
+ Mhdot = massVector/AstroParams.tstar*cosmology.Hubinvyr(CosmoParams,z)
- self.coeff1LyAzp = (1+self.zintegral)**2/(4*np.pi)
+ return Mhdot
- nuLYA = np.geomspace(constants.freqLyA, constants.freqLyCont, 128)
- sedLYAII_interp = interpolate.interp1d(nuLYA, Astro_Parameters.SED_LyA(nuLYA, pop = 2), kind = 'linear', bounds_error = False, fill_value = 0) #interpolate LyA SED
- n_recArray = np.arange(0,constants.n_max_recycle-1 )
- zpCube, rCube, n_recCube = np.meshgrid(self.zintegral, self.Rtabsmoo, n_recArray, indexing='ij', sparse=True) #for broadcasting purposes
- n_lineCube = n_recCube + 2
- zmax_lineCube = (1+zpCube) * (1 - pow(1+n_lineCube,-2.0))/(1-pow(n_lineCube,-2.0) ) - 1.0 #maximum redshift Lyman series photons can redshift before falling into a Ly-n resonance
+ def fstar_ofz(self, CosmoParams, z, massVector, eps, dlog10eps, zpiv, Mc, alphastar, betastar, fstarmax):
+ """
+ Compute star formation efficiency as function of z -- by changing the parameters, the user can run both popII and popIII
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ z : float
+ Redshift
+ massVector : array
+ Halo masses
+ eps : float
+ Star formation efficiency at pivot redshift and mass
+ dlog10eps : float
+ Logaritmic redshift evolution
+ zpiv : float
+ Pivot reference redshift
+ Mc : float
+ Pivot reference halo mass
+ alphastar : float
+ Power-law coefficient
+ betastar : float
+ Second power-law coefficient
+ fstarmax : float
+ Cap
+
+ Returns
+ ----------
+ fstar : array
+ Star formation efficiency
+ """
+
+ epsstar_ofz = eps * 10**(dlog10eps * (z-zpiv))
+
+ if CosmoParams.Flag_emulate_21cmfast:
+ # 21cmFAST-like
+ fstar = CosmoParams.OmegaB/CosmoParams.OmegaM * np.clip(epsstar_ofz\
+ /(pow(massVector/Mc, -alphastar)), 0, fstarmax)
- nu_linezpCube = constants.freqLyCont * (1 - (1.0/n_lineCube)**2)
- zGreaterCube = zGreaterMatrix_nonan.reshape(len(self.zintegral), len(self.Rtabsmoo), 1)
- nu_lineRRCube = nu_linezpCube * (1.+zGreaterCube)/(1+zpCube)
-
- eps_alphaRR_II_Cube = Astro_Parameters.N_alpha_perbaryon_II/Cosmo_Parameters.mu_baryon_Msun * sedLYAII_interp(nu_lineRRCube)
-
- #the last nonzero index of the array is overestimated since only part of the spherical shell is within zmax_line. Correct by by dz/Delta z
- weights_recCube = np.heaviside(zmax_lineCube - zGreaterCube, 0.0)
- index_first0_weightsCube = np.where(np.diff(weights_recCube, axis = 1) == -1) #find index of last nonzero value. equals zero if two consecutive elements are 1 or 0, and -1 if two consecutive elements are [1,0]
- i0Z, i0R, i0N = index_first0_weightsCube
- weights_recCube[i0Z, i0R, i0N] *= (zmax_lineCube[i0Z, 0, i0N] - zGreaterCube[i0Z, i0R, 0])/ (zGreaterCube[i0Z, i0R+1, 0] - zGreaterCube[i0Z, i0R, 0])
-
- Jalpha_II = np.array(constants.fractions_recycle)[:len(n_recArray)].reshape(1,1,len(n_recArray)) * weights_recCube * eps_alphaRR_II_Cube #just resizing f_recycle; it is length 29,we only consider up to n=22
- LyAintegral_II = np.sum(Jalpha_II,axis=2) #sum over axis 2, over all possible n transitions
- self.coeff2LyAzpRR_II = self.Rtabsmoo * self.dlogRR * self.SFRDbar2D_II * LyAintegral_II/ constants.yrTos/constants.Mpctocm**2
-
- if Astro_Parameters.USE_POPIII == True:
- sedLYAIII_interp = interpolate.interp1d(nuLYA, Astro_Parameters.SED_LyA(nuLYA, pop = 3), kind = 'linear', bounds_error = False, fill_value = 0)
- eps_alphaRR_III_Cube = Astro_Parameters.N_alpha_perbaryon_III/Cosmo_Parameters.mu_baryon_Msun * sedLYAIII_interp(nu_lineRRCube)
-
- Jalpha_III = np.array(constants.fractions_recycle)[:len(n_recArray)].reshape(1,1,len(n_recArray)) * weights_recCube * eps_alphaRR_III_Cube
- LyAintegral_III = np.sum(Jalpha_III,axis=2)
- self.coeff2LyAzpRR_III = self.Rtabsmoo * self.dlogRR * self.SFRDbar2D_III * LyAintegral_III/ constants.yrTos/constants.Mpctocm**2
else:
- self.coeff2LyAzpRR_III = np.zeros_like(self.coeff2LyAzpRR_II)
+ # GALLUMI-like
+ fstar = CosmoParams.OmegaB/CosmoParams.OmegaM * np.clip(2.0 * epsstar_ofz\
+ /(pow(massVector/Mc,-alphastar) + pow(massVector/Mc,-betastar)), 0, fstarmax)
+ return fstar
- #####################################################################################################
- ### STEP 6: X-ray Anisotropies
-
- zGreaterCube = zGreaterMatrix_nonan.reshape(len(self.zintegral), len(self.Rtabsmoo), 1, 1) #redefine this just for x-ray routine
-
- self.coeff1Xzp = -2/3 * self.zintegral * self.dlogzint / cosmology.Hubinvyr(Cosmo_Parameters,self.zintegral) / (1+self.zintegral) * (1+self.zintegral)**2
- self.coeff1Xzp = self.coeff1Xzp / (1+self.zintegral)**2 * constants.yrTos #this accounts for adiabatic cooling. compensated by the inverse at the end
- zpCube, rCube, eCube, zPPCube = np.meshgrid(self.zintegral, self.Rtabsmoo, _Energylist, np.arange(Nzinttau), indexing='ij', sparse=True)
- currentEnergyTable = eCube * (1+zGreaterCube) / (1+zpCube)
- SEDCube = Astro_Parameters.SED_XRAY(currentEnergyTable, pop = 2)
- SEDCube_III = Astro_Parameters.SED_XRAY(currentEnergyTable, pop = 3)
+ def fduty(self, CosmoParams, AstroParams, massVector, z, lower_cutoff=None, upper_cutoff=None, is_sharp_cutoff=False, vCB=None, J21LW_interp=None):
+ """
+ Compute duty fraction to damp star formation
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ massVector : array
+ Halo masses
+ z : float
+ Redshift
+ lower_cutoff : str or float or None
+ Apply cutoff at the low-mass end; if None, no cutoff; if str == "Mmol" or "Matom", cutoff at the molecular/atomic-cooling limit respectively; if float, custom cutoff at user-provided value
+ upper_cutoff : str or float or None
+ Apply cutoff at the high-mass end; if None, no cutoff; if str == "Matom", cutoff at the atomic-cooling limit; if float, custom cutoff at user-provided value
+ is_sharp_cutoff : bool
+ If true, apply sharp cutoff; exponential cutoff otherwise
+ vCB : float or None
+ Baryon-DM relative velocity (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+ J21LW_interp : interpolator or None
+ Interpolator of the LW flux, function of z (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+
+ Returns
+ ----------
+ fduty : array
+ Duty cycle
+ """
+
+ # Low-mass end cutoff
+ if lower_cutoff is not None:
+ if lower_cutoff == "Mmol":
+ Mlow = self.Mmol(CosmoParams, AstroParams, J21LW_interp, z, vCB)
+ elif lower_cutoff == "Matom":
+ Mlow = self.Matom(z)
+ else:
+ Mlow = lower_cutoff
- ######## Broadcasted routine to find X-ray optical depths, modeled after but does not use xrays.optical_depth
- zPPCube = np.array([np.linspace(np.transpose([self.zintegral]), self.zGreaterMatrix, Nzinttau, axis = 2)])
- zPPCube = zPPCube.reshape(len(self.zintegral), len(self.Rtabsmoo), 1, Nzinttau) #to have 4D dimensions, default shape = (64,45, 1, 10)
+ if is_sharp_cutoff:
+ fduty_low = np.heaviside(massVector - Mlow, 0.5)
+ else:
+ fduty_low = np.exp(-Mlow/massVector)
+ else:
+ fduty_low = 1.
- ePPCube = eCube * (1+ zPPCube) / (1+zpCube) #E'' = E(1+z'')/(1+z)
- sigmatot = Xrays.atomfractions[0] * sigma_HI(ePPCube)
- sigmatot += Xrays.atomfractions[1] * sigma_HeI(ePPCube)
+ # High-mass end cutoff
+ if upper_cutoff is not None:
+ if upper_cutoff == "Matom":
+ Mup = self.Matom(z)
+ else:
+ Mup = upper_cutoff
- opticalDepthIntegrand = 1 / cosmology.HubinvMpc(Cosmo_Parameters, zPPCube) / (1+zPPCube) * sigmatot * cosmology.n_H(Cosmo_Parameters, zPPCube) * constants.Mpctocm #this uses atom fractions of 1 for HI and x_He for HeI
-# opticalDepthIntegrand = 1 / cosmology.HubinvMpc(Cosmo_Parameters, zPPCube) / (1+zPPCube) * sigmatot * cosmology.n_baryon(Cosmo_Parameters, zPPCube) * constants.Mpctocm
- tauCube = np.trapezoid(opticalDepthIntegrand, zPPCube, axis = 3)
+ if is_sharp_cutoff:
+ fduty_up = np.heaviside(Mup - massVector, 0.5)
+ else:
+ fduty_up = np.exp(-massVector/Mup)
+ else:
+ fduty_up = 1.
- indextautoolarge = np.array(tauCube>=Xrays.TAUMAX)
- tauCube[indextautoolarge] = Xrays.TAUMAX
+ fduty = fduty_low * fduty_up
+
+ return fduty
+
+
+ def SFE_II(self, CosmoParams, AstroParams, massVector, z):
+ """
+ Star formation efficiency for popII stars
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ massVector : array
+ Halo masses
+ z : float
+ Redshift
+
+ Returns
+ ----------
+ SFE : array
+ Star formation efficiency
+ """
+
+ fstarM = self.fstar_ofz(CosmoParams, z, massVector,
+ AstroParams.epsstar, AstroParams.dlog10epsstardz, AstroParams._zpivot,
+ AstroParams.Mc, AstroParams.alphastar, AstroParams.betastar, AstroParams.fstarmax)
- if Cosmo_Parameters.Flag_emulate_21cmfast == False:
- weights_X_zCube = np.exp(-tauCube)
- elif Cosmo_Parameters.Flag_emulate_21cmfast == True:
- weights_X_zCube = np.heaviside(1.0 - tauCube, 0.5)
+ if not AstroParams.FLAG_MTURN_FIXED:
+ fduty = self.fduty(CosmoParams, AstroParams, massVector, z, lower_cutoff="Matom", upper_cutoff=None, is_sharp_cutoff=AstroParams.FLAG_MTURN_SHARP)
else:
- print("Error, choose a correct XRAY_OPACITY_MODEL")
-
- SEDCube = SEDCube[:,:,:,0] #rescale dimensions of energy and SED cubes back to 3D, so we can integrate over energy
- SEDCube_III = SEDCube_III[:,:,:,0] #rescale dimensions of energy and SED cubes back to 3D, so we can integrate over energy
-
- eCube = eCube[:,:,:,0]
- ######## end of optical depth routine
+ fduty = self.fduty(CosmoParams, AstroParams, massVector, z, lower_cutoff=AstroParams.Mturn_fixed, upper_cutoff=None, is_sharp_cutoff=AstroParams.FLAG_MTURN_SHARP)
- JX_coeffsCube = SEDCube * weights_X_zCube
- JX_coeffsCube_III = SEDCube_III * weights_X_zCube
+ SFE = fstarM * fduty
- sigma_times_en = Xrays.atomfractions[0] * sigma_HI(eCube) * (eCube - Xrays.atomEnIon[0])
- sigma_times_en += Xrays.atomfractions[1] * sigma_HeI(eCube) * (eCube - Xrays.atomEnIon[1])
- sigma_times_en /= np.sum(Xrays.atomfractions)#to normalize per baryon, instead of per Hydrogen nucleus
- #HI and HeII separate. Notice Energy (and not Energy'), since they get absorbed at the zp frame
-
- xrayEnergyTable = np.sum(JX_coeffsCube * sigma_times_en * eCube * Astro_Parameters.dlogEnergy,axis=2)
- self.coeff2XzpRR_II = np.nan_to_num(self.Rtabsmoo * self.dlogRR * self.SFRDbar2D_II * xrayEnergyTable * (1.0/constants.Mpctocm**2.0) * constants.normLX_CONST, nan = 0)
+ return SFE
+
+
+ def SFE_III(self, CosmoParams, AstroParams, massVector, z, vCB, J21LW_interp):
+ """
+ Star formation efficiency for popIII stars.
+
+ By default, this computes a single main Pop III component with a low-mass cutoff at the molecular-cooling limit and a user-controlled high-mass cutoff Mup_III. Setting Mup_III="Matom" (default) in the AstroParams recovers standard minihalo-only behavior, with high-mass cutoff at the atomic-cooling limit.
+
+ If AstroParams.DETACH_III_ACH is True, main component is forced to stop at the atomic-cooling limit and a detached atomic-cooling-halo component with independent parameters is added between Matom and Mup_III.
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ massVector : array
+ Halo masses
+ z : float
+ Redshift
+ vCB : float or None
+ Baryon-DM relative velocity
+ J21LW_interp : interpolator or None
+ Interpolator of the LW flux, function of z
+
+ Returns
+ ----------
+ SFE_tot : array
+ Star formation efficiency
+ """
- if Astro_Parameters.USE_POPIII == True:
- xrayEnergyTable_III = np.sum(JX_coeffsCube_III * sigma_times_en * eCube * Astro_Parameters.dlogEnergy,axis=2)
- self.coeff2XzpRR_III = np.nan_to_num(self.Rtabsmoo * self.dlogRR * self.SFRDbar2D_III * xrayEnergyTable_III * (1.0/constants.Mpctocm**2.0) * constants.normLX_CONST, nan = 0)
+ # Main component
+ fstarM = self.fstar_ofz(CosmoParams, z, massVector,
+ AstroParams.epsstar_III, AstroParams.dlog10epsstardz_III, AstroParams._zpivot_III,
+ AstroParams.Mc_III, AstroParams.alphastar_III, AstroParams.betastar_III, AstroParams.fstarmax)
+ detach_ACH = AstroParams.DETACH_III_ACH
+ if detach_ACH:
+ # If detached ACH component, high-mass cutoff of the main component forced at the ACH limit
+ Mup_main = "Matom"
else:
- self.coeff2XzpRR_III = np.zeros_like(self.coeff2XzpRR_II)
-
+ # Main component cut at the user-defined high-mass cutoff - note that this has to be put to "Matom" in order to recover standard behaviour, with main component limited to the MC minihalo regime
+ Mup_main = AstroParams.Mup_III
+ fduty = self.fduty(CosmoParams, AstroParams, massVector, z, lower_cutoff="Mmol", upper_cutoff=Mup_main, is_sharp_cutoff=False, vCB=vCB, J21LW_interp=J21LW_interp) # TODO: Do we want to allow the cut-off to be sharp?
+ SFE = fstarM * fduty
+
+ # Detached ACH component with custom parameters, added to the MC minihalo component
+ # TODO: for now, the case with detached Pop III ACH component is isolated here, but we could integrate it in the general case below by implementing a separate poulation type, e.g. 3.II? This could be extended to other population types e.g. different morphological types etc...
+ if detach_ACH:
+ if AstroParams.Mup_III == "Matom":
+ print("WARNING: AstroParams.DETACH_III_ACH = True but AstroParams.Mup_III == 'Matom'. Ignoring atomic-cooling Pop III component") # In this case, both low- and high-mass cutoff for the ACH component would be at the ACH limit, so this component is ignored
+ else:
+ fstarM_ACH = self.fstar_ofz(CosmoParams, z, massVector,
+ AstroParams.epsstar_III_ACH, AstroParams.dlog10epsstardz_III_ACH, AstroParams._zpivot_III_ACH,
+ AstroParams.Mc_III_ACH, AstroParams.alphastar_III_ACH, AstroParams.betastar_III_ACH, AstroParams.fstarmax)
+ fduty_ACH = self.fduty(CosmoParams, AstroParams, massVector, z, lower_cutoff="Matom", upper_cutoff=AstroParams.Mup_III, is_sharp_cutoff=False)
+ SFE += fstarM_ACH * fduty_ACH
+
+ return SFE
+
+
+ def SFE(self, CosmoParams, AstroParams, massVector, z, pop, vCB=None, J21LW_interp=None):
+ """
+ Total star formation efficiency
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ massVector : array
+ Halo masses
+ z : float
+ Redshift
+ pop : int
+ Which population (2 for popII or 3 for popIII)
+ vCB : float or None
+ Baryon-DM relative velocity (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+ J21LW_interp : interpolator or None
+ Interpolator of the LW flux, function of z (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+
+ Returns
+ ----------
+ SFE : array
+ Star formation efficiency for the input population
+ """
+
+ if pop == 3 and not AstroParams.USE_POPIII:
+ return 0 # Skip whole routine if NOT using popIII stars --> TODO: here we may want to raise a ValueError instead...
- #####################################################################################################
- ### STEP 7: Non-Linear Correction Factors
- #correct for nonlinearities in <(1+d)SFRD>, only if doing nonlinear stuff. We're assuming that (1+d)SFRD ~ exp(gamma*d), so the "Lagrangian" gamma was gamma-1. We're using the fact that for a lognormal variable X = log(Z), with Z=\gamma \delta, = exp(\gamma^2 \sigma^2/2).
+ if pop == 3 and AstroParams.USE_POPIII:
+ SFE = self.SFE_III(CosmoParams, AstroParams, massVector, z, vCB, J21LW_interp)
+ elif pop == 2:
+ SFE = self.SFE_II(CosmoParams, AstroParams, massVector, z)
+
- if(User_Parameters.C2_RENORMALIZATION_FLAG==True):
+ return SFE
+
- # SarahLibanore: compute using Lagrangian gammas and include quadratic case
- if Astro_Parameters.quadratic_SFRD_lognormal:
- _corrfactorEulerian_II = (1+(self.gamma_II_index2D_Lag-2*self.gamma2_II_index2D_Lag)*self.sigmaofRtab**2)/(1-2*self.gamma2_II_index2D_Lag*self.sigmaofRtab**2)
+ def SFR(self, CosmoParams, AstroParams, HMFinterp, massVector, z, pop, vCB=None, J21LW_interp=None):
+ """
+ Star formation rate in Msun/yr for given population
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ massVector : array
+ Halo masses
+ z : float
+ Redshift
+ pop : int
+ Which population (2 for popII or 3 for popIII)
+ vCB : float or None
+ Baryon-DM relative velocity (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+ J21LW_interp : interpolator or None
+ Interpolator of the LW flux, function of z (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+
+ Returns
+ ----------
+ SFR : array
+ Star formation rate
+ """
+
+ SFR = self.dMh_dt(CosmoParams, AstroParams, HMFinterp, massVector, z) * self.SFE(CosmoParams, AstroParams, massVector, z, pop, vCB, J21LW_interp)
+
+ return SFR
+
+
+ def SFRD_integrand(self, CosmoParams, AstroParams, HMFinterp, massVector, z, pop, vCB=None, J21LW_interp=None):
+ """
+ Integrand for the star formation rate density for a given population
+
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ massVector : array
+ Halo masses
+ z : float
+ Redshift
+ pop : int
+ Which population (2 for popII or 3 for popIII)
+ vCB : float or None
+ Baryon-DM relative velocity (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+ J21LW_interp : interpolator or None
+ Interpolator of the LW flux, function of z (None by default: only matters for molecular-cooling limit computation for Pop IIIs)
+
+ Returns
+ ----------
+ integrand : array
+ Integrand to be used in the main class
+ """
+
+ HMF_curr = np.exp(HMFinterp.logHMFint((np.log(massVector), z)))
+ SFRtab_curr = self.SFR(CosmoParams, AstroParams, HMFinterp, massVector, z, pop, vCB, J21LW_interp)
+ integrand = HMF_curr * SFRtab_curr * massVector
+
+ return integrand
+
- else:
- _corrfactorEulerian_II = 1.0 + self.gamma_II_index2D_Lag*self.sigmaofRtab**2
-
- _corrfactorEulerian_II=_corrfactorEulerian_II.T
- _corrfactorEulerian_II[0:Cosmo_Parameters.indexminNL] = _corrfactorEulerian_II[Cosmo_Parameters.indexminNL] #for R CosmoParams.chiofzint(constants.zmax_AstroBreak)] = CosmoParams.chiofzint(constants.zmax_AstroBreak) #c ut down so that nothing exceeds zmax where we do not trust the astrophysical model
+ zTable = CosmoParams.zfofRint(rTable)
+
+ zMax = np.transpose([constants.redshiftFactor_Visbal*(1+z)-1])
+ rMax = CosmoParams.chiofzint(zMax)
- fion = 0.4 * np.exp(-cosmology.xefid(Cosmo_Parameters, self.zintegral)/0.2)#partial ionization from Xrays. Fit to Furlanetto&Stoever
- atomEnIonavg = (Xrays.atomfractions[0] * Xrays.atomEnIon[0] + Xrays.atomfractions[1] * Xrays.atomEnIon[1]) / (Xrays.atomfractions[0] + Xrays.atomfractions[1] ) #to turn this ratio into one over n_b instead of n_H
+ c1 = (1+z)**2/4/np.pi
- self.coeff_Gammah_Tx_II = -Astro_Parameters.L40_xray * constants.ergToK * (1.0+self.zintegral)**2
- self.coeff_Gammah_Tx_III = -Astro_Parameters.L40_xray_III * constants.ergToK * (1.0+self.zintegral)**2 #convert from one to the other, last factors accounts for adiabatic cooling. compensated by the inverse at zp in coeff1Xzp. Minus because integral goes from low to high z, but we'll be summing from high to low everywhere.
+ if pop == 3:
+ Nlw = AstroParams.N_LW_III
+
+ elif pop == 2:
+ Nlw = AstroParams.N_LW_II
- self.Gammaion_II = self.coeff_Gammah_Tx_II *constants.KtoeV * self._GammaXray_II * fion/atomEnIonavg * 3/2
- self.Gammaion_III = self.coeff_Gammah_Tx_III *constants.KtoeV * self._GammaXray_III * fion/atomEnIonavg * 3/2 #atomEnIonavg makes it approximate. No adiabatic cooling (or recombinations) so no 1+z factors. Extra 3/2 bc temperature has a 2/3
+ c2r = SFRD_interp_input(zTable)
+
+ c2r *= Nlw * Elw / constants.deltaNulw / constants.mprotoninMsun * 0.5*(1 - np.tanh((rTable - rMax)/10)) * (1 /u.yr/u.Mpc**2).to(1/u.s/u.cm**2).value # smooth tanh cutoff, smoother function within 2-3% agreement with J_LW()
- #TODO: Improve model for xe
+ RK = np.transpose([c1]), c2r
- self.xe_avg_ad = cosmology.xefid(Cosmo_Parameters, self.zintegral)
- self.xe_avg = self.xe_avg_ad + np.cumsum((self.Gammaion_II+self.Gammaion_III)[::-1])[::-1]
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- self.xe_avg = 2e-4 * np.ones_like(self.Gammaion_II) #we force this when we emualte 21cmdast to compare both codes on the same footing
- self.xe_avg = np.fmin(self.xe_avg, 1.0-1e-9)
+ return RK
- #and heat from Xrays
- self._fheat = pow(self.xe_avg,0.225)
- self.coeff1Xzp*=self._fheat #since this is what we use for the power spectrum (and not Gammaheat) we need to upate it
- self.Gammaheat_II = self._GammaXray_II * self._fheat
- self.Gammaheat_III = self._GammaXray_III * self._fheat
- #Computing avg kinetic temperature as sum of adiabatic & xray temperature
- self.Tk_xray = self.coeff_Gammah_Tx_II * np.cumsum(self.Gammaheat_II[::-1])[::-1] + self.coeff_Gammah_Tx_III * np.cumsum(self.Gammaheat_III[::-1])[::-1]#in K, cumsum reversed because integral goes from high to low z. Only heating part
- self.Tk_ad = cosmology.Tadiabatic(Cosmo_Parameters, self.zintegral)
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- self.Tk_ad*=0.95 #they use recfast, so their 'cosmo' temperature is slightly off
- self.Tk_avg = self.Tk_ad + self.Tk_xray
+ def dSFRDIII_dJ(self,CosmoParams, AstroParams, HMFinterp, z, vCB, J21LW_interp):
+ """
+ Response of the popIII star formation rate density to the LW background
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ z : float
+ Redshift
+ vCB : bool
+ Include contribution from baryon-CDM relative velocity (popIII) or not (popII)
+ J21LW_interp : bool
+ Include contribution from LW feedback (popIII) or not (popII)
- # LyA stuff to find components of Salpha correction factor
- self.Jalpha_avg = self.coeff1LyAzp*np.sum(self.coeff2LyAzpRR_II + self.coeff2LyAzpRR_III,axis=1) #units of 1/(cm^2 s Hz sr)
- self.T_CMB = cosmology.Tcmb(ClassCosmo, self.zintegral)
+ Returns
+ ----------
+ integral : array
+ Response integrated over the mass array
+ """
- _tau_GP = 3./2. * cosmology.n_H(Cosmo_Parameters,self.zintegral) * constants.Mpctocm / cosmology.HubinvMpc(Cosmo_Parameters,self.zintegral) * (constants.wavelengthLyA/1e7)**3 * constants.widthLyAcm * (1.0 - self.xe_avg) #~3e5 at z=6
-# _tau_GP = 3./2.*Cosmo_Parameters.f_H * cosmology.n_baryon(Cosmo_Parameters,self.zintegral)*constants.Mpctocm/cosmology.HubinvMpc(Cosmo_Parameters,self.zintegral) * (constants.wavelengthLyA/1e7)**3 * constants.widthLyAcm * (1.0 - self.xe_avg) #~3e5 at z=6
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- _tau_GP/=Cosmo_Parameters.f_H #for some reason they multiuply by N0 (all baryons) and not NH0.
+ Mh = HMFinterp.Mhtab
+ HMF_curr = np.exp(HMFinterp.logHMFint((np.log(Mh), z)))
- _xiHirata = pow(_tau_GP*1e-7,1/3.)*pow(self.Tk_avg,-2./3)
- _factorxi = (1.0 + 2.98394*_xiHirata + 1.53583 * _xiHirata**2 + 3.8528 * _xiHirata**3)
+ SFRtab_currIII = self.SFR(CosmoParams, AstroParams, HMFinterp, HMFinterp.Mhtab, z, pop=3, vCB = vCB, J21LW_interp=J21LW_interp)
+ integrand_III = HMF_curr * SFRtab_currIII * HMFinterp.Mhtab
+ integrand_III *= AstroParams.A_LW * AstroParams.beta_LW * J21LW_interp(z)**(AstroParams.beta_LW - 1)
+ integrand_III *= -1 * self.Mmol_vcb(CosmoParams, AstroParams, z, CosmoParams.vcb_avg)/ HMFinterp.Mhtab
- #prefactor without the Salpha correction from Hirata2006
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- self._coeff_Ja_xa_0 = 1.66e11/(1+self.zintegral) #They use a fixed (and slightly ~10% off) value.
- else:
- self._coeff_Ja_xa_0 = 8.0*np.pi*(constants.wavelengthLyA/1e7)**2 * constants.widthLyA * constants.Tstar_21/(9.0*constants.A10_21*self.T_CMB) #units of (cm^2 s Hz sr), convert from Ja to xa. should give 1.81e11/(1+self.zintegral) for Tcmb_0=2.725 K
-
- self.coeff_Ja_xa = self._coeff_Ja_xa_0 * Salpha_exp(self.zintegral, self.Tk_avg, self.xe_avg)
- self.xa_avg = self.coeff_Ja_xa * self.Jalpha_avg
- self.invTcol_avg = 1.0 / self.Tk_avg
- self._invTs_avg = (1.0/self.T_CMB+self.xa_avg*self.invTcol_avg)/(1+self.xa_avg)
- if(User_Parameters.FLAG_WF_ITERATIVE==True): #iteratively find Tcolor and Ts. Could initialize one to zero, but this should converge faster
- ### iteration routine to find Tcolor and Ts
- _invTs_tryfirst = 1.0/self.T_CMB
- while(np.sum(np.fabs(_invTs_tryfirst/self._invTs_avg - 1.0))>0.01): #no more than 1% error total
- _invTs_tryfirst = self._invTs_avg
+ integral = np.trapezoid(integrand_III, HMFinterp.logtabMh)
- #update xalpha
- _Salphatilde = (1.0 - 0.0632/self.Tk_avg + 0.116/self.Tk_avg**2 - 0.401/self.Tk_avg*self._invTs_avg + 0.336*self._invTs_avg/self.Tk_avg**2)/_factorxi
- self.coeff_Ja_xa = self._coeff_Ja_xa_0 * _Salphatilde
- self.xa_avg = self.coeff_Ja_xa * self.Jalpha_avg
+ return integral
- #and Tcolor^-1
- self.invTcol_avg = 1.0/self.Tk_avg + constants.gcolorfactorHirata * 1.0/self.Tk_avg * (_invTs_tryfirst - 1.0/self.Tk_avg)
- #and finally Ts^-1
- self._invTs_avg = (1.0/self.T_CMB+self.xa_avg * self.invTcol_avg)/(1+self.xa_avg)
+ def fesc_II(self,AstroParams, Mh):
+ """
+ Escape fraction of ionizing photons in halos hosting popII stars
+ Parameters
+ ----------
+ AstroParams : AstroParams class
+ Mh : array
+ Halo masses
+ Returns
+ ----------
+ fesc : array
+ Escape fraction
+ """
+
+ fesc = np.fmin(1.0, AstroParams.fesc10 * pow(Mh/1e10,AstroParams.alphaesc) )
+
+ return fesc
+
+
+ def fesc_III(self,AstroParams, Mh):
+ """
+ Escape fraction of ionizing photons in halos hosting popIII stars
+
+ Parameters
+ ----------
+ AstroParams : AstroParams class
+ Mh : array
+ Halo masses
- #####################################################################################################
- ### STEP 9: Reionization
- _trec0 = 1.0/(constants.alphaB * cosmology.n_H(Cosmo_Parameters,0) *(1 + Cosmo_Parameters.x_He) * Astro_Parameters._clumping)#t_recombination at z=0, in sec
-# _trec0 = 1.0/(constants.alphaB * cosmology.n_baryon(Cosmo_Parameters,0) * Astro_Parameters._clumping)#t_recombination at z=0, in sec
- _recexp = 1.0/(_trec0 * np.sqrt(Cosmo_Parameters.OmegaM) * cosmology.Hubinvyr(Cosmo_Parameters,0) / constants.yrTos)# = 1/(_trec0 * H0 * sqrt(OmegaM) ), dimless. Assumes matter domination and constant clumping. Can be modified to power-law clumping changing the powerlaw below from 3/2
+ Returns
+ ----------
+ fesc : array
+ Escape fraction
+ """
- self.coeffQzp = self.dlogzint*self.zintegral/cosmology.Hubinvyr(Cosmo_Parameters,self.zintegral)/(1+self.zintegral) #Deltaz * dt/dz. Units of 1/yr, inverse of niondot
+ fesc = np.fmin(1.0, AstroParams.fesc7_III * pow(Mh/1e7,AstroParams.alphaesc_III) )
- ###HAC: Added N_ion rate contribution from Pop II and III stars. Note that I am using rho_b(z=0) because it's a comoving volume
- zArray, mArray = np.meshgrid(self.zintegral, HMF_interpolator.Mhtab, indexing = 'ij', sparse = True)
+ return fesc
+
- integrand_II_table = SFRD_II_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, zArray, zArray)
- integrand_III_table = SFRD_III_integrand(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, mArray, J21LW_interp, zArray, zArray, ClassCosmo.pars['v_avg'])
+ def compute_sigmaR_nu(self, CosmoParams, HMFinterp, z_array, R_array, Mh_array, dorv_array, dorv):
+ """
+ Compute the local mass function conditioned over the environment
- self.niondot_avg_II = Astro_Parameters.N_ion_perbaryon_II/cosmology.rho_baryon(Cosmo_Parameters,0.) * np.trapezoid(integrand_II_table * fesctab_II, HMF_interpolator.logtabMh, axis = 1)
- self.niondot_avg_III = Astro_Parameters.N_ion_perbaryon_II/cosmology.rho_baryon(Cosmo_Parameters,0.) * np.trapezoid(integrand_III_table * fesctab_III, HMF_interpolator.logtabMh, axis = 1)
- self.niondot_avg = self.niondot_avg_II + self.niondot_avg_III
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ HMFinterp : HMFinterp class
+ z_array : array
+ Redshifts
+ R_array : array
+ Shell radii
+ Mh_array : array
+ Halo masses
+ dorv_array : array
+ Input values of either the denisty or velocity field
+ dorv : str
+ Compute the output wrt the density field ("delta") or the velocity field ("vel")
+
+ Returns
+ ----------
+ HMF_corr : array
+ Local HMF in Eulerian space
+ mArray : array
+ Halo masses, dimension (z,R,Mh,delta or v)
+ zGreaterArray : array
+ Redshifts of the sources, dimension (z,R,Mh,delta or v)
+ out : array
+ Either delta_R (if dorv == delta) or velocity, dimension (z,R,Mh,delta or v)
+ """
+
+ zArray, rArray, mArray, dorvNormArray = np.meshgrid(z_array, R_array, Mh_array, dorv_array, indexing = 'ij', sparse = True) # reshape
- if(Cosmo_Parameters.Flag_emulate_21cmfast==False): #regular calculation, integrating over time and accounting for recombinations in the exponent
+ rGreaterArray = np.zeros_like(zArray) + rArray
+ rGreaterArray[CosmoParams.chiofzint(zArray) + rArray >= CosmoParams.chiofzint(constants.zmax_AstroBreak)] = np.nan
+ zGreaterArray = CosmoParams.zfofRint(CosmoParams.chiofzint(zArray) + rGreaterArray) # redshift of the source
- self.Qfactrecomb = np.exp(-2/3 * _recexp * pow(1+self.zintegral,3/2))
- self.Qion_avg = 1/self.Qfactrecomb*np.cumsum(self.coeffQzp[::-1] * self.Qfactrecomb[::-1] * self.niondot_avg[::-1])[::-1]
+ whereNotNans = np.invert(np.isnan(rGreaterArray))
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True): #21cmfast instead uses nion (rather than niondot and integrating). We can emulate that here. there nion = niondot * t_star/H(z) [see Park+19]. In that case we can iteratively solve for Q=nion - nrecom(Q), where nrecom = int dt Q/t_recom to correct for recombinations. Easier than ODE.
+ sigmaR = np.zeros((len(z_array), len(R_array), 1, 1))
+ sigmaR[whereNotNans] = HMFinterp.sigmaRintlog((np.log(rGreaterArray)[whereNotNans], zGreaterArray[whereNotNans])) # mass field variance on R (environment scale)
- #self._nion = np.cumsum(self.coeffQzp[::-1] * self.niondot_avg[::-1])[::-1]
- self._nion = self.niondot_avg * Astro_Parameters.tstar/cosmology.Hubinvyr(Cosmo_Parameters,self.zintegral)
- self._Q0iteration = self._nion #0th iteration has no recombinations
- self.trec = _trec0/(1+self.zintegral)**3/constants.yrTos #in yr at each time t
- self._Q1iteration = 0.0
- while(np.sum(np.abs(self._Q1iteration-self._Q0iteration))>0.001):
- self._Q1iteration = self._Q0iteration
- self._nrecombinations = np.cumsum(self.coeffQzp[::-1] * (self._Q1iteration/self.trec)[::-1])[::-1] #coeffQzp = dt/dz as before
- self._Q0iteration = self._nion - self._nrecombinations
- self.Qion_avg = self._Q0iteration
+ sigmaM = HMFinterp.sigmaintlog((np.log(mArray), zGreaterArray)) # mass field variance on Mh
+ modSigmaSq = sigmaM**2 - sigmaR**2
+ indexTooBig = (modSigmaSq <= 0.0)
+ modSigmaSq[indexTooBig] = np.inf #if sigmaR > sigmaM the halo does not fit in the radius R. Cut the sum
+ modSigma = np.sqrt(modSigmaSq)
- #common to both methods.
- self.Qion_avg = np.fmin(1.0, self.Qion_avg)
- self._xHII_avg = self.Qion_avg + (1.0 - self.Qion_avg) * self.xe_avg #accounts for partial ionization, small effect
- self.xHI_avg = (1.0 - self._xHII_avg)
- self.xHI_avg = np.fmin(1.0, self.xHI_avg)
-
-
- #####################################################################################################
- ### STEP 10: Compute the 21cm Global Signal
- self.T21avg = cosmology.T021(Cosmo_Parameters,self.zintegral) * self.xa_avg/(1.0 + self.xa_avg) * (1.0 - self.T_CMB * self.invTcol_avg) * self.xHI_avg
-
+ # variables of the EPS theory
+ nu0 = CosmoParams.delta_crit_ST / sigmaM
+ nu0[indexTooBig] = 1.0
+
+ dsigmadMcurr = HMFinterp.dsigmadMintlog((np.log(mArray),zGreaterArray)) ###HAC: Check this works when emulating 21cmFAST
+ dlogSdMcurr = (dsigmadMcurr*sigmaM*2.0)/(modSigmaSq)
+
+ if dorv == "delta":
+ deltaArray = dorvNormArray * sigmaR
+ elif dorv == "vel":
+ deltaArray = np.zeros_like(sigmaR) # deltaZero
+
+ modd = CosmoParams.delta_crit_ST - deltaArray
+ nu = modd / modSigma
+ if not CosmoParams.Flag_emulate_21cmfast:
+ # EPS_HMF corrected with (1+delta) for Eulerian space
+ HMF_corr = (nu/nu0) * (sigmaM/modSigma)**2.0 * np.exp(-CosmoParams.a_corr_EPS * (nu**2-nu0**2)/2.0 ) * (1.0 + deltaArray)
+
+ else:
+ # as 21cmFAST, use PS HMF, integrate and normalize at the end
+ HMF_corr = cosmology.PS_HMF_unnorm(CosmoParams, Mh_array.reshape(len(Mh_array),1),nu,dlogSdMcurr) * (1.0 + deltaArray)
+
+ if dorv == "delta":
+ out = deltaArray
+ elif dorv == "vel":
+ out = dorvNormArray
+ return HMF_corr, mArray, zGreaterArray, out
+
+
+ def compute_gamma(self, CosmoParams, AstroParams, HMFinterp, z_array, R_array, Mh_array, input_sigmaofRtab, fesctab_II):
+ """
+ Compute linear and quadratic gamma exponents for the SFRD-delta (popII+popIII) and niondot-delta (onlypopII) lognormal approximations
+ Parameters
+ ----------
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ z_array : array
+ Redshifts
+ R_array : array r
+ Shell radii
+ Mh_array : array
+ Halo masses
+ input_sigmaofRtab : array
+ Variance of the matter field smoothed over R
+ fesctab_II :
+ Escape fraction for popII stars
+
+ Returns
+ ----------
+ Empty
+ """
+
+ Nsigmad = 1.0 # how many sigmas we explore
+ Nds = 3 # how many deltas
+
+ deltatab_norm = np.linspace(-Nsigmad,Nsigmad,Nds)
+ HMF_corr, mArray, zGreaterArray, deltaArray = self.compute_sigmaR_nu(CosmoParams, HMFinterp, z_array, R_array, Mh_array, deltatab_norm, "delta") # compute local HMF
+
+ # PS_HMF~ delta/sigma^3 *exp(-delta^2/2sigma^2) * consts(of M including dsigma^2/dm)
+ if not CosmoParams.Flag_emulate_21cmfast:
+
+ # Normalized PS(d)/ at each mass
+ integrand_II = HMF_corr * self.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zGreaterArray, pop=2)
+ if AstroParams.USE_POPIII:
+ integrand_III = HMF_corr * self.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zGreaterArray, pop=3, vCB=CosmoParams.vcb_avg,J21LW_interp=self.J21LW_interp_conv_avg)
+
+ else:
+ # 21cmFAST uses PS HMF, integrates and normalizes as SFRD(d)/
+ integrand_II = HMF_corr * self.SFR(CosmoParams, AstroParams, HMFinterp, mArray, zGreaterArray, pop=2) * mArray
+ if AstroParams.USE_POPIII:
+ integrand_III = HMF_corr * self.SFR(CosmoParams, AstroParams, HMFinterp, mArray, zGreaterArray, pop=3, vCB=CosmoParams.vcb_avg,J21LW_interp=self.J21LW_interp_conv_avg) * mArray
+
+ # Local popII SFRD
+ SFRD_II_dR = np.trapezoid(integrand_II, HMFinterp.logtabMh, axis = 2)
+
+ # Local popII niondot
+ niondot_II_dR = np.trapezoid(integrand_II*fesctab_II[None, None, :, None], HMFinterp.logtabMh, axis = 2)
+
+ if AstroParams.USE_POPIII:
+ # Local popIII SFRD
+ SFRD_III_dR = np.trapezoid(integrand_III, HMFinterp.logtabMh, axis = 2)
+ else:
+ SFRD_III_dR = np.zeros_like(SFRD_II_dR)
+
+ # compute all required gammas
+ self.gamma_II_index2D = self.compute_numerical_der_gamma(SFRD_II_dR, deltaArray, 1)
+ self.gamma2_II_index2D = self.compute_numerical_der_gamma(SFRD_II_dR, deltaArray, 2)
+ self.gamma_niondot_II_index2D = self.compute_numerical_der_gamma(niondot_II_dR, deltaArray, 1)
-def tau_reio(Cosmo_Parameters, T21_coefficients):
- "Returns the optical depth to reionization given a model. It assumes xHI=1 for z zmini)
+ self.gamma2_niondot_II_index2D = self.compute_numerical_der_gamma(niondot_II_dR, deltaArray, 2)
- _zlistlowz = np.linspace(0,T21_coefficients.zmin,100)
-
- _nelistlowz = cosmology.n_H(Cosmo_Parameters,_zlistlowz)*(1.0 + Cosmo_Parameters.x_He + Cosmo_Parameters.x_He * np.heaviside(constants.zHeIIreio - _zlistlowz,0.5))
-# _nelistlowz = cosmology.n_baryon(Cosmo_Parameters,_zlistlowz)*(Cosmo_Parameters.f_H + Cosmo_Parameters.f_He + Cosmo_Parameters.f_He * np.heaviside(constants.zHeIIreio - _zlistlowz,0.5))
- _distlistlowz = 1.0/cosmology.HubinvMpc(Cosmo_Parameters,_zlistlowz)/(1+_zlistlowz)
- _lowzint = constants.sigmaT * np.trapezoid(_nelistlowz*_distlistlowz,_zlistlowz) * constants.Mpctocm
+ if AstroParams.USE_POPIII:
+ self.gamma_III_index2D = self.compute_numerical_der_gamma(SFRD_III_dR, deltaArray, 1)
+ self.gamma2_III_index2D = self.compute_numerical_der_gamma(SFRD_III_dR, deltaArray, 2)
+ else:
+ self.gamma_III_index2D = np.zeros_like(self.gamma_II_index2D)
+ self.gamma2_III_index2D = np.zeros_like(self.gamma2_II_index2D)
- _zlisthiz = T21_coefficients.zintegral
-
- _nelistlhiz = cosmology.n_H(Cosmo_Parameters,_zlisthiz) * (1 + Cosmo_Parameters.x_He) * (1.0 - T21_coefficients.xHI_avg)
-# _nelistlhiz = cosmology.n_baryon(Cosmo_Parameters,_zlisthiz) * (1.0 - T21_coefficients.xHI_avg)
- _distlisthiz = 1.0/cosmology.HubinvMpc(Cosmo_Parameters,_zlisthiz)/(1+_zlisthiz)
-
- _hizint = constants.sigmaT * np.trapezoid(_nelistlhiz*_distlisthiz,_zlisthiz) * constants.Mpctocm
-
- return(_lowzint + _hizint)
-
-def Matom(z):
- "Returns Matom as a function of z"
- return 3.3e7 * pow((1.+z)/(21.),-3./2)
-
-###HAC: Added Mmol split by contributions with no, vcb, and LW feecback
-def Mmol_0(z):
- "Returns Mmol as a function of z WITHOUT LW or VCB feedback"
- return 3.3e7 * (1.+z)**(-1.5)
-
-def Mmol_vcb(Astro_Parameters, Cosmo_Parameters, z, vCB):
- "Returns Mmol as a function of z WITHOUT LW feedback"
- mmolBase = Mmol_0(z)
- vcbFeedback = pow(1 + Astro_Parameters.A_vcb * vCB / Cosmo_Parameters.sigma_vcb, Astro_Parameters.beta_vcb)
- return mmolBase * vcbFeedback
-
-def Mmol_LW(Astro_Parameters, J21LW_interp, z):
- "Returns Mmol as a function of z WITHOUT VCB feedback"
- mmolBase = Mmol_0(z)
- lwFeedback = 1 + Astro_Parameters.A_LW*pow(J21LW_interp(z), Astro_Parameters.beta_LW)
- return mmolBase * lwFeedback
-
-def Mmol(Astro_Parameters, Cosmo_Parameters, J21LW_interp, z, vCB):
- "Returns Mmol as a function of z WITH LW AND VCB feedback"
- mmolBase = Mmol_0(z)
- vcbFeedback = pow(1 + Astro_Parameters.A_vcb * vCB / Cosmo_Parameters.sigma_vcb, Astro_Parameters.beta_vcb)
- lwFeedback = 1 + Astro_Parameters.A_LW*pow(J21LW_interp(z), Astro_Parameters.beta_LW)
-
- return mmolBase * vcbFeedback * lwFeedback
-
-
-#fstar = Mstardot/Mhdot, parametrizes as you wish
-def fstarofz(Astro_Parameters, Cosmo_Parameters, z, Mhlist):
- epsstar_ofz = Astro_Parameters.epsstar * 10**(Astro_Parameters.dlog10epsstardz * (z-Astro_Parameters._zpivot) )
- if Cosmo_Parameters.Flag_emulate_21cmfast == False:
- return Cosmo_Parameters.OmegaB/Cosmo_Parameters.OmegaM * np.clip(2.0 * epsstar_ofz\
- /(pow(Mhlist/Astro_Parameters.Mc,- Astro_Parameters.alphastar) + pow(Mhlist/Astro_Parameters.Mc,- Astro_Parameters.betastar) ), 0, 1)
- elif Cosmo_Parameters.Flag_emulate_21cmfast == True:
- return Cosmo_Parameters.OmegaB/Cosmo_Parameters.OmegaM * np.clip(epsstar_ofz /(pow(Mhlist/Astro_Parameters.Mc,- Astro_Parameters.alphastar)), 0, 1)
+ # LW correction to Pop III gammas
+ if AstroParams.USE_POPIII and AstroParams.USE_LW_FEEDBACK:
-
-###HAC: Added fstar for PopIII
-def fstarofz_III(Astro_Parameters, Cosmo_Parameters, z, Mhlist):
- epsstar_ofz_III = Astro_Parameters.fstar_III * 10**(Astro_Parameters.dlog10epsstardz_III * (z-Astro_Parameters._zpivot_III) )
- if Cosmo_Parameters.Flag_emulate_21cmfast == False:
- return 2 * Cosmo_Parameters.OmegaB/Cosmo_Parameters.OmegaM * epsstar_ofz_III\
- /(pow(Mhlist/Astro_Parameters.Mc_III, -Astro_Parameters.alphastar_III) + pow(Mhlist/Astro_Parameters.Mc_III, -Astro_Parameters.betastar_III))
- elif Cosmo_Parameters.Flag_emulate_21cmfast == True:
- return Cosmo_Parameters.OmegaB/Cosmo_Parameters.OmegaM * epsstar_ofz_III/(pow(Mhlist/Astro_Parameters.Mc_III, -Astro_Parameters.alphastar_III))
-
-
-def J_LW(Astro_Parameters, Cosmo_Parameters, sfrdIter, z, pop):
- #specific intensity, units of erg/s/cm^2/Hz/sr
- #for units to work, c must be in Mpc/s and proton mass in solar masses
- #and convert from 1/Mpc^2 to 1/cm^2
-
- Elw = (constants.Elw_eV * u.eV).to(u.erg).value
- deltaNulw = constants.deltaNulw #Hz
- speedLight = constants.c_Mpcs
- massProton = constants.mprotoninMsun
- redshiftFactor = 1.04 #max amount LW photons can redshift before being scattered, as in Visbal+1402.0882
-
- if pop == 3:
- Nlw = Astro_Parameters.N_LW_III
- elif pop == 2:
- Nlw = Astro_Parameters.N_LW_II
+ # get the zero-lag correlation function (zero distance separation)
+ xi_RR_CF_zerolag = np.copy(CosmoParams.ClassCosmo.pars['xi_RR_CF'][:,:,0])
- zIntMatrix = np.linspace(z, redshiftFactor*(1+z)-1, 20)
-
- sfrdIterMatrix_LW = interpolate.interp1d(z, sfrdIter, kind = 'linear', bounds_error=False, fill_value=0)(zIntMatrix)
-
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):##HAC ACAUSAL: This if statement allows for acausal Mmol
- sfrdIterMatrix_LW = sfrdIter * np.ones_like(zIntMatrix) #HAC: This fixes J_LW(z) = int SFRD(z) dz' such that no z' dependence in the integral (for some reason 21cmFAST does this). Delete when comparing J_LW() with Visbal+14 and Mebane+17
+ #compute LW coefficients for Pop II and III stars
+ coeff1LWzp_II, coeff2LWzpRR_II = self.J_LW_Discrete(CosmoParams, AstroParams, z_array, 2, R_array, self.SFRD_II_interp)
+ coeff1LWzp_III, coeff2LWzpRR_III = self.J_LW_Discrete(CosmoParams, AstroParams, z_array, 3, R_array, self.SFRD_III_cnvg_interp)
+
+ # Corrections WITH Rmax smoothing
+ deltaGamma_R = 1 / np.transpose([self.SFRD_III_cnvg_interp(z_array)])
+ deltaGamma_R *= np.array([self.dSFRDIII_dJ(CosmoParams, AstroParams, HMFinterp, np.array([z_array]).T, vCB=CosmoParams.vcb_avg, J21LW_interp=self.J21LW_interp_conv_avg)]).T
+
+ deltaGamma_R = deltaGamma_R * (coeff1LWzp_II * coeff2LWzpRR_II * self.gamma_II_index2D + coeff1LWzp_III * coeff2LWzpRR_III * self.gamma_III_index2D) * 1e21
+
+ #choose only max of r and R; since growth factors cancel out, none are used here
+ xi_R_maxrR = np.tril(np.ones_like(xi_RR_CF_zerolag)) * np.transpose([np.diag(xi_RR_CF_zerolag)])
+ xi_R_maxrR = xi_R_maxrR + np.triu(xi_RR_CF_zerolag, k = 1)
+
+ self.deltaGamma_R_Matrix = xi_R_maxrR.reshape(len(R_array), 1, len(R_array)) * (deltaGamma_R * CosmoParams._dlogRR * R_array).reshape(1, len(z_array), len(R_array))
+ self.deltaGamma_R_z = np.transpose( np.sum(self.deltaGamma_R_Matrix, axis = 2) / np.transpose([np.diagonal(xi_RR_CF_zerolag[:,:])]) )
+ self.deltaGamma_R_z[ self.gamma_III_index2D == 0 ] = 0 #don't correct gammas if gammas are zero
+ self.gamma_III_index2D += self.deltaGamma_R_z #correct Pop III gammas with LW correction factor
+
+ # Non-Linear Correction Factors to convert from Lagrangian to Eulerian space and to normalize the integral of the SFRD (see sec 3A in 2507.15922)
+ gamma_II_index2D_Lag = self.gamma_II_index2D - 1.
+ gamma_III_Lagrangian = self.gamma_III_index2D - 1.
+ if AstroParams.quadratic_SFRD_lognormal:
+ gamma2_II_index2D_Lag = self.gamma2_II_index2D + 1/2.
+ _corrfactorEulerian_II = (1+(gamma_II_index2D_Lag-2*gamma2_II_index2D_Lag)*self.sigmaofRtab**2)/(1-2*gamma2_II_index2D_Lag*self.sigmaofRtab**2)
+ if AstroParams.USE_POPIII:
+ gamma2_III_Lagrangian = self.gamma2_III_index2D + 1/2.
+ _corrfactorEulerian_III = (1+(gamma_III_Lagrangian-2*gamma2_III_Lagrangian)*self.sigmaofRtab**2)/(1-2*gamma2_III_Lagrangian*self.sigmaofRtab**2)
+ else:
+ _corrfactorEulerian_III = np.zeros_like(_corrfactorEulerian_II)
+ else:
+ _corrfactorEulerian_II = 1.0 + gamma_II_index2D_Lag * input_sigmaofRtab**2
+ if AstroParams.USE_POPIII:
+ _corrfactorEulerian_III = 1.0 + gamma_III_Lagrangian*self.sigmaofRtab**2
+ else:
+ _corrfactorEulerian_III = np.zeros_like(_corrfactorEulerian_II)
- integrandLW = speedLight / 4 / np.pi
- integrandLW *= (1+z)**2 / cosmology.Hubinvyr(Cosmo_Parameters,zIntMatrix)
-# integrandLW *= (1+z)**3 / cosmology.Hubinvyr(Cosmo_Parameters,zIntMatrix) / (1+zIntMatrix) #HAC: delete this and comment above back in!!!
- integrandLW *= Nlw * Elw / massProton / deltaNulw
- integrandLW = integrandLW * sfrdIterMatrix_LW * (1 /u.Mpc**2).to(1/u.cm**2).value #broadcasting doesn't like augmented assignment operations (like *=) for some reason
- return np.trapezoid(integrandLW, x = zIntMatrix, axis = 0)
+ self._corrfactorEulerian_II=_corrfactorEulerian_II.T
+ self._corrfactorEulerian_II[0:CosmoParams.indexminNL] = self._corrfactorEulerian_II[CosmoParams.indexminNL] #for Rz, but in general it should not
- z2 = z
- duty_matom_component = np.exp(-Mh/Matom(z2))
- fduty_III = np.exp(-Mmol(Astro_Parameters, Cosmo_Parameters, J21LW_interp, z2, vCB)/Mh) * duty_matom_component
-
- fstarM_III = fstarofz_III(Astro_Parameters, Cosmo_Parameters, z, Mh)
- fstarM_III = np.fmin(fstarM_III, Astro_Parameters.fstarmax)
-
- return dMh_dt(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, Mh, z) * fstarM_III * fduty_III
-
-
-def dMh_dt(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, massVector, z):
- 'Mass accretion rate, in units of M_sun/yr'
- Mh = massVector
-
- if(Astro_Parameters.astromodel == False): #GALLUMI-like
- if(Astro_Parameters.accretion_model == False): #exponential accretion
- dMhdz = massVector * constants.ALPHA_accretion_exponential
-
- elif(Astro_Parameters.accretion_model == True): #EPS accretion
-
- Mh2 = Mh * constants.EPSQ_accretion
- indexMh2low = Mh2 < Mh.flatten()[0]
- Mh2[indexMh2low] = Mh.flatten()[0]
-
- sigmaMh = HMF_interpolator.sigmaintlog((np.log(Mh), z))
- sigmaMh2 = HMF_interpolator.sigmaintlog((np.log(Mh2), z))
- sigmaMh2[np.full_like(sigmaMh2, fill_value=True, dtype = bool) * indexMh2low] = 1e99
-
- growth = cosmology.growth(Cosmo_Parameters,z)
- dzgrow = z*0.01
- dgrowthdz = (cosmology.growth(Cosmo_Parameters,z+dzgrow) - cosmology.growth(Cosmo_Parameters,z-dzgrow))/(2.0 * dzgrow)
- dMhdz = - Mh * np.sqrt(2/np.pi)/np.sqrt(sigmaMh2**2 - sigmaMh**2) *dgrowthdz/growth * Cosmo_Parameters.delta_crit_ST
-
else:
- print("ERROR! Have to choose an accretion model in Astro_Parameters (accretion_model)")
- Mhdot = dMhdz*cosmology.Hubinvyr(Cosmo_Parameters,z)*(1.0+z)
- return Mhdot
+ print('Check derivation order for gammas')
+ return 0
- elif(Astro_Parameters.astromodel == True): #21cmfast-like
- return Mh/Astro_Parameters.tstar*cosmology.Hubinvyr(Cosmo_Parameters,z)
- else:
- print('ERROR, MODEL is not defined')
-
+ darr1_darr2[np.isnan(darr1_darr2)] = 0.0
-def J_LW_Discrete(Astro_Parameters, Cosmo_Parameters, ClassCosmo, z, pop, rGreater, SFRD_II_interp, SFRD_III_cnvg_interp):
- #specific intensity, units of erg/s/cm^2/Hz/sr
- #for units to work, c must be in Mpc/s and proton mass in solar masses
- #and convert from 1/Mpc^2 to 1/cm^2
-
- Elw = (constants.Elw_eV * u.eV).to(u.erg).value
- deltaNulw = constants.deltaNulw
- massProton = constants.mprotoninMsun
- redshiftFactor = 1.04 #max amount LW photons can redshift before being scattered, as in Visbal+1402.0882
-
- rTable = np.transpose([Cosmo_Parameters.chiofzint(z)]) + rGreater
- rTable[rTable > Cosmo_Parameters.chiofzint(50)] = Cosmo_Parameters.chiofzint(50) #cut down so that nothing exceeds zmax = 50
- zTable = Cosmo_Parameters.zfofRint(rTable)
-
- ##HAC ACAUSAL: The below if statement allows for acausal Mmol
- if(Cosmo_Parameters.Flag_emulate_21cmfast==True):
- zTable = np.array([z]).T * np.ones_like(rTable) #HAC: This fixes J_LW(z) = int SFRD(z) dz' such that no z' dependence in the integral (for some reason 21cmFAST does this). Delete when comparing J_LW() with Visbal+14 and Mebane+17
-
- zMax = np.transpose([redshiftFactor*(1+z)-1])
- rMax = Cosmo_Parameters.chiofzint(zMax)
-
- c1 = (1+z)**2/4/np.pi
-
- if pop == 3:
- Nlw = Astro_Parameters.N_LW_III
- c2r = SFRD_III_cnvg_interp(zTable)
- elif pop == 2:
- Nlw = Astro_Parameters.N_LW_II
- c2r = SFRD_II_interp(zTable)
+ return darr1_darr2
+
+
+class PopIII_relvel:
+ """
+ Pre-compute velocity–dependent Pop III star formation suppression (see sec 4A in arXiv:2407.18294)
+
+ Parameters
+ ----------
+ UserParams : UserParams class
+ CosmoParams : CosmoParams class
+ AstroParams : AstroParams class
+ HMFinterp : HMFinterp class
+ z_Init : Z_init class, optional
+ Initial redshift matrices for the calculation (see sfrd.py for details).
+ Default is None.
+ SFRD_Init : SFRD_class class, optional
+ Initial star formation rate density for the calculation (see sfrd.py for details).
+ Default is None.
+
+ Attributes
+ ----------
+ vcb_expFitParams : float
+ Coefficients to approximate SFRD(vCB) / SFRD
+
+ """
+ def __init__(self, UserParams, CosmoParams, AstroParams, HMFinterp, z_Init = None, SFRD_Init = None):
+
+ # if z_Init and SFRD_Init are not provided, we initialize them here. This allows us to avoid redundant computations if they were already initialized in the parent class and passed as arguments.
+ if z_Init is None:
+ z_Init = Z_init(UserParams, CosmoParams)
+
+ if SFRD_Init is None:
+ SFRD_Init = SFRD_class(UserParams, CosmoParams, AstroParams, HMFinterp, z_Init)
+
+
+ if AstroParams.USE_POPIII:
+ self.vcb_expFitParams = np.zeros((len(z_Init.zintegral),len(CosmoParams._Rtabsmoo), 4)) #for the 4 exponential parameters
-# c2r *= Nlw * Elw / deltaNulw / massProton * (1 - np.heaviside(rTable - rMax, 1)) * (1 /u.yr/u.Mpc**2).to(1/u.s/u.cm**2).value #hard Heaviside cutoff, leads to instabilities & discontinuities
- c2r *= Nlw * Elw / deltaNulw / massProton * 0.5*(1 - np.tanh((rTable - rMax)/10)) * (1 /u.yr/u.Mpc**2).to(1/u.s/u.cm**2).value #smooth tanh cutoff, smoother function within 2-3% agreement with J_LW()
- return np.transpose([c1]), c2r
-
-def dSFRDIII_dJ(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, J21LW_interp, z, z2, vCB):
- Mh = HMF_interpolator.Mhtab
- HMF_curr = np.exp(HMF_interpolator.logHMFint((np.log(Mh), z)))
- SFRtab_currIII = SFR_III(Astro_Parameters, Cosmo_Parameters, HMF_interpolator, HMF_interpolator.Mhtab, J21LW_interp, z, z2, vCB)
- integrand_III = HMF_curr * SFRtab_currIII * HMF_interpolator.Mhtab
- integrand_III *= Astro_Parameters.A_LW * Astro_Parameters.beta_LW * J21LW_interp(z)**(Astro_Parameters.beta_LW - 1)
- integrand_III *= -1 * Mmol_vcb(Astro_Parameters, Cosmo_Parameters, z, Cosmo_Parameters.vcb_avg)/ HMF_interpolator.Mhtab
- return np.trapezoid(integrand_III, HMF_interpolator.logtabMh)
-
-
-def fesc_II(Astro_Parameters, Mh):
- "f_escape for a halo of mass Mh [Msun] given Astro_Parameters" #The pivot scale here for Pop II stars is at 1e10 solar masses
- return np.fmin(1.0, Astro_Parameters.fesc10 * pow(Mh/1e10,Astro_Parameters.alphaesc) )
-
-def fesc_III(Astro_Parameters, Mh):
- "f_escape for a PopIII halo of mass Mh [Msun] given Astro_Parameters" #The pivot scale here for Pop III stars is at 1e7 solar masses
- return np.fmin(1.0, Astro_Parameters.fesc7_III * pow(Mh/1e7,Astro_Parameters.alphaesc_III) )
-
-def vFit_2(vel2, aVel, bVel, cVel, dVel):
- #fitting 2 exponentials to SFRD(z | \delta_r, v_cb) / SFRD(z | \delta_r, v_avg)
- vel = 3*vel2
- return aVel * np.exp(-bVel * vel) + cVel* np.exp(-dVel * vel)
-
-#Kept for reference purposes. Does not correct x_alpha as a function of Ts iteratively, but some old works don't either so this allows for comparison. Only used if FLAG_WF_ITERATIVE == False
-def Salpha_exp(z, T, xe):
- "correction from Eq 55 in astro-ph/0608032, Tk in K evaluated for the IGM where there is small reionization (xHI~1 and xe<<1) during LyA coupling era"
- tau_GP_noreio = 3e5*pow((1+z)/7,3./2.)*(1-xe)
- gamma_Sobolev = 1.0/tau_GP_noreio
- return np.exp( - 0.803 * pow(T,-2./3.) * pow(1e-6/gamma_Sobolev,-1.0/3.0))
+ if CosmoParams.USE_RELATIVE_VELOCITIES:
+
+ v_avg0 = CosmoParams.ClassCosmo.pars['v_avg']
+ vAvg_array = v_avg0 * np.array([0.2, 0.7, 1, 1.25, 2.0])
+ etaTilde_array = 3 * vAvg_array**2 / CosmoParams.ClassCosmo.pars['sigma_vcb']**2
+ HMF_corr, mArray, zGreaterArray, velArray = SFRD_Init.compute_sigmaR_nu(CosmoParams, HMFinterp, z_Init.zintegral, CosmoParams._Rtabsmoo, HMFinterp.Mhtab, vAvg_array, 'vel') # local HMF
+
+ # PS_HMF~ delta/sigma^3 *exp(-delta^2/2sigma^2) * consts(of M including dsigma^2/dm)
+ if not CosmoParams.Flag_emulate_21cmfast:
+ # Normalized PS(d)/ at each mass
+ integrand_III = HMF_corr * SFRD_Init.SFRD_integrand(CosmoParams, AstroParams, HMFinterp, mArray, zGreaterArray, pop=3, vCB=velArray, J21LW_interp=SFRD_Init.J21LW_interp_conv_avg)
+
+ else:
+ # 21cmFAST uses PS HMF, integrates and normalizes as SFRD(d)/
+ integrand_III = HMF_corr * SFRD_Init.SFR(CosmoParams, AstroParams, HMFinterp, mArray, zGreaterArray, pop=3, vCB=velArray, J21LW_interp=SFRD_Init.J21LW_interp_conv_avg) * mArray
+
+ SFRD_III_dR_V = np.trapezoid(integrand_III, HMFinterp.logtabMh, axis = 2) # local SFRD corrected by vCB
+
+ SFRDIII_Ratio = SFRD_III_dR_V / SFRD_III_dR_V[:,:,len(vAvg_array)//2].reshape((len(z_Init.zintegral), len(CosmoParams._Rtabsmoo), 1))
+ SFRDIII_Ratio[np.isnan(SFRDIII_Ratio)] = 0.0
+
+ # temporarily turning off divide warnings; will turn them on again after exponential fitting routine
+ divideErr = np.seterr(divide = 'ignore')
+ divideErr2 = np.seterr(invalid = 'ignore')
+
+ ### TODO: The next few lines fits for rho(z, v) / rhoavg = Ae^-b tilde(eta) + Ce^-d tilde(eta).
+ ### To expedite the computation, instead of using scipy.optimize.curve_fit, I choose two points where one
+ ### exponential dominates to fit for C and d, subtract Ce^-d tilde(eta) from rho(z, v) / rhoavg, then fit for A and b
+ dParams = -1 * np.log(SFRDIII_Ratio[:,:,-1]/SFRDIII_Ratio[:,:,-2]) / (etaTilde_array[-1]-etaTilde_array[-2])
+
+ cParams = np.exp(np.log(SFRDIII_Ratio[:,:,-1]) + dParams * etaTilde_array[-1])
+
+ SFRDIII_RatioNew = SFRDIII_Ratio - cParams.reshape(*cParams.shape, 1) * np.exp(-1 * dParams.reshape(*dParams.shape, 1)* etaTilde_array.reshape(1,1,*etaTilde_array.shape) )
+
+ bParams = -1 * np.log(SFRDIII_RatioNew[:,:,0]/SFRDIII_RatioNew[:,:,1]) / (etaTilde_array[0]-etaTilde_array[1])
+ aParams = np.exp(np.log(SFRDIII_RatioNew[:,:,0]) + bParams * etaTilde_array[0])
+
+ divideErr = np.seterr(divide = 'warn')
+ divideErr2 = np.seterr(invalid = 'warn')
+
+ self.vcb_expFitParams[:,:,0] = aParams
+ self.vcb_expFitParams[:,:,1] = bParams
+ self.vcb_expFitParams[:,:,2] = cParams
+ self.vcb_expFitParams[:,:,3] = dParams
+
+ self.vcb_expFitParams[np.isnan(self.vcb_expFitParams)] = 0.0
+
diff --git a/zeus21/wrappers.py b/zeus21/wrappers.py
new file mode 100644
index 0000000..7b46c77
--- /dev/null
+++ b/zeus21/wrappers.py
@@ -0,0 +1,30 @@
+# TO BE DONE!
+# SL: for now I just move here the cosmo_wrapper from the cosmology.py, but we will need to add more wrapper functions here in the future.
+
+"""
+Wrappers to run zeus21 modules more easily.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
+
+from .inputs import Cosmo_Parameters
+from .cosmology import HMF_interpolator
+
+def cosmo_wrapper(User_Parameters):
+ """
+ Wrapper function for all the cosmology. It takes Cosmo_Parameters_Input and returns:
+ Cosmo_Parameters, Class_Cosmo, Correlations, HMF_interpolator
+ """
+
+ CosmoParams = Cosmo_Parameters(User_Parameters)
+ HMFintclass = HMF_interpolator(User_Parameters,CosmoParams)
+
+ return CosmoParams, HMFintclass
diff --git a/zeus21/xrays.py b/zeus21/xrays.py
deleted file mode 100644
index 78cdaa1..0000000
--- a/zeus21/xrays.py
+++ /dev/null
@@ -1,138 +0,0 @@
-"""
-
-Xray structure, helper functions, and definitions
-
-Author: Julian B. Muñoz
-UT Austin and Harvard CfA - January 2023
-
-Edited by Hector Afonso G. Cruz
-JHU - July 2024
-"""
-
-import numpy as np
-from . import constants
-from .cosmology import n_H, HubinvMpc
-
-
-class Xray_class:
- "Class containing the X-ray functions that we want to pass to main calculation"
-
- def __init__(self, User_Parameters, Cosmo_Parameters):
-
- self.atomfractions = np.array([1,Cosmo_Parameters.x_He]) #fraction of baryons in HI and HeI, assumed to just be the avg cosmic
-# self.atomfractions = np.array([Cosmo_Parameters.f_H,Cosmo_Parameters.f_He]) #fraction of baryons in HI and HeI, assumed to just be the avg cosmic
- self.atomEnIon = np.array([constants.EN_ION_HI, constants.EN_ION_HeI]) #threshold energies for each, in eV
- self.TAUMAX=100. #max optical depth, cut to 0 after to avoid overflows
-
-
- def optical_depth(self, User_Parameters, Cosmo_Parameters, En,z,zp):
- "Function that calculates the optical depth for a photon of energy En/eV from z to zp"
- Nzinttau = np.floor(10*User_Parameters.precisionboost).astype(int)
- #surprisingly it converges very quickly, since things are smooth functions of nu/z. Warning, make sure to tweak if SED is not a powerlaw!
-
- Envec = np.asarray([En]) if np.isscalar(En) else np.asarray(En)
-
- zinttau = np.linspace(z,zp,Nzinttau)
-
-
- Eninttautab = np.outer((1+zinttau)/(1+z) , Envec)
-
- sigmatot = self.atomfractions[0] * sigma_HI(Eninttautab)
- sigmatot += self.atomfractions[1] * sigma_HeI(Eninttautab)
- sigmatot = sigmatot.T #to broadcast below
- # divided by factor of H(z')(1+z') because of variable of integration change from proper distance to redshift
- integrand = 1.0/HubinvMpc(Cosmo_Parameters, zinttau)/(1+zinttau) * sigmatot * n_H(Cosmo_Parameters, zinttau) * constants.Mpctocm
-# integrand = 1.0/HubinvMpc(Cosmo_Parameters, zinttau)/(1+zinttau) * sigmatot * n_baryon(Cosmo_Parameters, zinttau) * constants.Mpctocm
- taulist = np.trapezoid(integrand, zinttau, axis=1)
-
- #OLD: kept for reference only.
- # taulist = 1.0*np.zeros_like(Envec)
- # for iE, Energy in enumerate(Envec):
- # Eninttau = (1+zinttau)/(1+z) * Energy
- # sigmatot = self.atomfractions[0] * sigma_HI(Eninttau)
- # sigmatot += self.atomfractions[1] * sigma_HeI(Eninttau)
- # #we ignore HeII since it's a small correction (Pritchard and Furlanetto 06)
- #
- # integrand = 1.0/HubinvMpc(Cosmo_Parameters, zinttau)/(1+zinttau) * sigmatot * n_baryon(Cosmo_Parameters, zinttau) * constants.Mpctocm
- #
- # taulist[iE] = np.trapezoid(integrand, zinttau)
-
- indextautoolarge = np.array(taulist>=self.TAUMAX)
- taulist [indextautoolarge] = self.TAUMAX
- return taulist
-
-
-
-
- def opacity_Xray(self, User_Parameters, Cosmo_Parameters, En,z,zp):
- "Returns opacity, see optical_depth() for the hard calculation."
-
- XRAY_OPACITY_MODEL = Cosmo_Parameters.Flag_emulate_21cmfast
- #important, 0 = standard, 1=21cmfast-like (step at tau=1)
-
-
- if(XRAY_OPACITY_MODEL==0): #0 is standard/regular.
- return np.exp(-self.optical_depth(User_Parameters, Cosmo_Parameters,En,z,zp))
- elif (XRAY_OPACITY_MODEL==1): #1 is 21cmFAST-like (step-wise exp(-tau), either 1 or 0)
- return np.heaviside(1.0 - self.optical_depth(User_Parameters, Cosmo_Parameters,En,z,zp), 0.5)
- else:
- print('ERROR, choose a correct XRAY_OPACITY_MODEL')
-
-
- def lambda_Xray_com(self, Cosmo_Parameters, En,z):
- "Returns the mean free path in cMpc of an Xray of energy En/eV near z. Unused but good cross check"
-
- sigmatot = self.atomfractions[0] * sigma_HI(En)
- sigmatot += self.atomfractions[1] * sigma_HeI(En)
- return (1.0/(sigmatot * n_H(Cosmo_Parameters,z))/constants.Mpctocm*(1+z) )
-# return (1.0/(sigmatot * n_baryon(Cosmo_Parameters,z))/constants.Mpctocm*(1+z) )
-
-
-
-
-def sigma_HI(Energyin):
- "cross section for Xray absorption for neutral HI, from astro-ph/9601009 and takes Energy in eV and returns cross sec in cm^2"
- E0 = 4.298e-1
- sigma0 = 5.475e4
- ya = 3.288e1
- P = 2.963
- yw = 0.0
- y0 = 0.0
- y1 = 0.0
-
- Energy = Energyin
-
- warning_lowE_HIXray = np.heaviside(13.6 - Energy, 0.5)
- if(np.sum(warning_lowE_HIXray) > 0):
- print('ERROR! Some energies for Xrays below HI threshold in sigma_HI. Too low!')
-
-
- x = Energy/E0 - y0
- y = np.sqrt(x**2 + y1**2)
- Fy = ((x-1.0)**2 + yw**2) * y**(0.5*P - 5.5) * (1.0+np.sqrt(y/ya))**(-P)
-
- return sigma0 * constants.sigma0norm * Fy
-
-
-
-def sigma_HeI(Energyin):
- "same as sigma_HI but for HeI, parameters are:"
- E0 = 13.61
- sigma0 = 9.492e2
- ya = 1.469
- P = 3.188
- yw = 2.039
- y0 = 4.434e-1
- y1 = 2.136
-
- Energy = Energyin
- warning_lowE_HeIXray = np.heaviside(25. - Energy, 0.5)
- if(np.sum(warning_lowE_HeIXray) > 0):
- print('ERROR! Some energies for Xrays below HeI threshold in sigma_HeI. Too low!')
-
-
- x = Energy/E0 - y0
- y = np.sqrt(x**2 + y1**2)
- Fy = ((x-1.0)**2 + yw**2) * y**(0.5*P - 5.5) * (1.0+np.sqrt(y/ya))**(-P)
-
- return sigma0 * constants.sigma0norm * Fy
diff --git a/zeus21/z21_utilities.py b/zeus21/z21_utilities.py
new file mode 100644
index 0000000..7a84fb2
--- /dev/null
+++ b/zeus21/z21_utilities.py
@@ -0,0 +1,484 @@
+"""
+Helper functions to be used across zeus21.
+
+Authors: zeus21 v2 collaboration - June 2026
+ Emily Bregou ;
+ Hector Afonso G. Cruz ;
+ Sarah Libanore ;
+ Julian B. Muñoz ;
+ Yonny Sklansky ;
+ Emilie Thélie ;
+ Alessandra Venditti
+arXiv:2302.08506, arXiv:2306.09403, arXiv:2407.18294, Sklansky et al. (in prep)
+"""
+
+import numpy as np
+import powerbox as pbox
+from pyfftw import empty_aligned as empty
+import time
+import gc
+
+from . import constants
+from scipy.stats import lognorm
+import mcfit
+
+
+try:
+ from numba import jit, njit
+ HAS_NUMBA = True
+except ImportError:
+ HAS_NUMBA = False
+ def jit(*args, **kwargs):
+ return lambda func: func
+ njit = lambda func: func
+
+
+def powerboxCtoR(pbobject,mapkin = None):
+ """
+ Converts a complex field to real 3D (eg density, T21...) on the powerbox notation.
+
+ Parameters
+ ----------
+ pbobject: powerbox.PowerBox
+ PowerBox object
+ mapkin: np.ndarray
+ Map of the field in k space. Default is None.
+ Otherwise assumes its pbobject.delta_k() (although in that case it should be directly pbobject.delta_x()).
+
+ Returns
+ ----------
+ realmap: np.ndarray
+ Real 3D field
+ """
+
+ realmap = empty((pbobject.N,) * pbobject.dim, dtype='complex128')
+ if (mapkin is None):
+ realmap[...] = pbobject.delta_k()
+ else:
+ realmap[...] = mapkin
+ realmap[...] = pbobject.V * pbox.dft.ifft(realmap, L=pbobject.boxlength, a=pbobject.fourier_a, b=pbobject.fourier_b)[0]
+ realmap = np.real(realmap)
+
+ return realmap
+
+def tophat_smooth(rr, ks, dk):
+ """
+ Top-hat smoothing.
+
+ Parameters
+ ----------
+ rr: np.ndarray
+ Array of radii.
+ ks: np.ndarray
+ Array of wave numbers.
+ dk: np.ndarray
+ Field to be smoothed in Fourier space.
+
+ Returns
+ ----------
+ np.ndarray
+ Smoothed field in real space.
+ """
+ x = ks * rr + 1e-5
+ win_k = 3/(x**3) * (np.sin(x) - x*np.cos(x))
+ deltakfilt = dk * win_k
+ return np.real(np.fft.ifftn(deltakfilt))
+
+
+
+
+def _WinTH(k,R):
+ """
+ 3D top-hat window function.
+
+ Parameters
+ ----------
+ k: np.ndarray
+ Array of wave numbers.
+ R: np.ndarray
+ Array of radii.
+
+ Returns
+ ----------
+ np.ndarray
+ 3D window function.
+ """
+ x = k * R
+ return 3.0/x**2 * (np.sin(x)/x - np.cos(x))
+
+def _WinTH1D(k,R):
+ """
+ 1D top-hat window function.
+
+ Parameters
+ ----------
+ k: np.ndarray
+ Array of wave numbers.
+ R: np.ndarray
+ Array of radii.
+
+ Returns
+ ----------
+ np.ndarray
+ 1D window function.
+ """
+ x = k * R
+ return np.sin(x)/x
+
+def _WinG(k,R):
+ """
+ Gaussian window function.
+
+ Parameters
+ ----------
+ k: np.ndarray
+ Array of wave numbers.
+ R: np.ndarray
+ Array of radii.
+
+ Returns
+ ----------
+ np.ndarray
+ Window function.
+ """
+ x = k * R * constants.RGauss_factor
+ return np.exp(-x**2/2.0)
+
+def Window(k, R, WINDOWTYPE="TOPHAT"):
+ """
+ Window function.
+
+ Parameters
+ ----------
+ k: np.ndarray
+ Array of wave numbers.
+ R: np.ndarray
+ Array of radii.
+ WINDOWTYPE: str
+ Which window function to return. Default is TOPHAT. Can also be GAUSS or TOPHAT1D.
+
+ Returns
+ ----------
+ np.ndarray
+ Window function.
+ """
+ if WINDOWTYPE == 'TOPHAT':
+ return _WinTH(k, R)
+ elif WINDOWTYPE == 'GAUSS':
+ return _WinG(k, R)
+ elif WINDOWTYPE == 'TOPHAT1D':
+ return _WinTH1D(k, R)
+ else:
+ print('ERROR in Window. Wrong type')
+
+
+
+
+
+def find_nearest_idx(array, values):
+ """
+ Finds the nearest indices for some values inside another array.
+
+ Parameters
+ ----------
+ array: np.ndarray
+ Array from which to find the indices.
+ values: np.ndarray
+ Values for which we are searching the indices in array.
+
+ Returns
+ ----------
+ np.ndarray
+ Array of indices.
+ """
+ array = np.atleast_1d(array)
+ values = np.atleast_1d(values)
+ idx = []
+ for i in range(len(values)):
+ idx.append((np.abs(array - values[i])).argmin())
+ return np.unique(idx)
+
+def print_timer(start_time, text_before="", text_after=""):
+ """
+ Prints the duration since an initial time.
+
+ Parameters
+ ----------
+ start_time: time.time()
+ Initial time.
+ text_before: str
+ Text to print in front of the timer. Default is "".
+ text_after: str
+ Text to print after the timer. Default is "".
+ """
+ elapsed_time = time.time() - start_time
+ mins = int(elapsed_time//60)
+ secs = int(elapsed_time - mins*60)
+ print(f"{text_before}{mins}min {secs}s{text_after}")
+
+def v2r(v):
+ """
+ Computes the radius from a volume assuming a sphericity.
+
+ Parameters
+ ----------
+ v: float | np.ndarray
+ Volume of the object.
+
+ Returns
+ ----------
+ float | np.ndarray
+ Radius of the object.
+ """
+ return (3/4/np.pi * v)**(1/3)
+
+def r2v(r):
+ """
+ Computes the volume of a sphere of radius r.
+
+ Parameters
+ ----------
+ r: float | np.ndarray
+ Radius.
+
+ Returns
+ ----------
+ float | np.ndarray
+ Volume.
+ """
+ return 4/3 * np.pi * r**3
+
+def delete_class_attributes(class_instance): # delete all attributes of the class instance
+ """
+ Properly deallocates all the attributes of a class instance. Calls the garbage collector.
+ Useful when we want to deallocate an instance
+ (doing del cls will not deallocate the attributes instantly as long as the garbage collector hasn't run).
+
+ Parameters
+ ----------
+ class_instance: cls instance
+ Class instance.
+ """
+ for attr in list(class_instance.__dict__):
+ delattr(class_instance, attr)
+ gc.collect()
+
+
+
+# SarahLibanore
+# PDFs for the SFH
+
+@njit
+def pdf_log_transform(y_values, pdf_y_values):
+ """
+ Get PDF of X = ln(Y) given Y values and their PDF values
+
+ Uses the transformation rule: f_X(x) = f_Y(y) * |dy/dx|
+ where x = ln(y), so dy/dx = y. So: f_X(x) = f_Y(y) * y
+ """
+ y_values = np.asarray(y_values)
+ pdf_y_values = np.asarray(pdf_y_values)
+
+ # Remove any y <= 0 values (can't take log)
+ y_clean = np.fmax(1e-9, y_values) # Avoid log(0) or log(negative)
+ pdf_y_clean = np.fmax(1e-50, pdf_y_values) # Avoid zero PDF values
+
+ # Transform: x = ln(y)
+ x_values = np.log(y_clean)
+
+ # Apply transformation rule: f_X(x) = f_Y(y) * y
+ pdf_x_values = pdf_y_clean * y_clean
+ return x_values, pdf_x_values
+
+@njit
+def lognormal_pdf(y, mu, sigma):
+ """
+ Vectorized lognormal PDF(y)
+ """
+ y = np.asarray(y)
+ result = np.zeros_like(y)
+ y_pos = np.fmax(1e-9, y)
+ result = (1 / (y_pos * sigma * np.sqrt(2 * np.pi))) * \
+ np.exp(-0.5 * ((np.log(y_pos) - mu) / sigma)**2)
+
+ return result
+
+@njit
+def normal_pdf(y, mu, sigma,dimy=None):
+ """
+ Vectorized normal PDF(y). dimy is the number of dimensions for mu and sigma.
+ """
+ y = np.asarray(y)
+ mu = np.asarray(mu)
+ sigma = np.asarray(sigma)
+ if dimy is not None:
+ for i in range(dimy):
+ mu = mu[:, None]
+ sigma = sigma[:, None]
+
+ return np.exp(-0.5 * ((y - mu) / sigma)**2) / (sigma * np.sqrt(2 * np.pi))
+
+
+def pdf_fft_convolution(mu1, sigma1, mu2, sigma2, highp=0.99):
+ """
+ FFT convolution method to compute the PDF of the sum of two lognormal distributions
+ Uses the convolution theorem: convolution in real space = multiplication in Fourier space
+ mu1, sigma1: parameters of the first lognormal distribution
+ mu2, sigma2: parameters of the second lognormal distribution
+ returns:
+ y_array: the range of y values for which the PDF is computed
+ pdf_values: the PDF values at those y values
+ """
+
+ q_low = 1.0-highp # 0.1% quantile
+ q_high = highp # 99.9% quantile
+
+ y1_low = lognorm.ppf(q_low, s=sigma1, scale=np.exp(mu1))
+ y2_low = lognorm.ppf(q_low, s=sigma2, scale=np.exp(mu2))
+ y1_high = lognorm.ppf(q_high, s=sigma1, scale=np.exp(mu1))
+ y2_high = lognorm.ppf(q_high, s=sigma2, scale=np.exp(mu2))
+
+ y_min = max(1., y1_low + y2_low)
+ y_max = 2.*(y1_high + y2_high)
+ n_points = int(y_max/y_min) #to ensure we capture the resolution
+ n_points = max(n_points, 64) # Ensure at least 64 points
+
+ # Increase points for small sigmas (to capture narrow peaks) and wide ones (for sampling)
+ min_sigma = min(sigma1, sigma2)
+ if min_sigma < 0.5:
+ n_points = int(n_points * (2 / (min_sigma+0.4))) # Scale inversely with sigma
+ # Ensure n_points is power of 2 for efficient FFT
+ n_points = int(2 ** np.ceil(np.log2(n_points)))
+
+ if (n_points < 4097):
+ # Create uniform grid for FFT
+ y_uniform = np.linspace(0.0, y_max, n_points).flatten()
+ dy = y_uniform[1] - y_uniform[0]
+
+ # Compute PDFs on uniform grid (vectorized)
+ pdf1_grid = lognormal_pdf(y_uniform, mu1, sigma1)
+ pdf2_grid = lognormal_pdf(y_uniform, mu2, sigma2)
+
+ norm1 = np.trapezoid(pdf1_grid, y_uniform)
+ norm2 = np.trapezoid(pdf2_grid, y_uniform)
+ pdf1_grid /= norm1
+ pdf2_grid /= norm2
+
+ # FFT convolution - this is where the magic happens! Convolution in real space = multiplication in Fourier space
+ fft1 = np.fft.fft(pdf1_grid)
+ fft2 = np.fft.fft(pdf2_grid)
+ fft_conv = fft1 * fft2 # Element-wise multiplication
+
+ # Inverse FFT to get back to real space
+ pdf_conv = np.real(np.fft.ifft(fft_conv)) * dy
+
+ y_uniform, pdf_conv = y_uniform[1:], pdf_conv[1:] #to remove y=0 which is annoying for log transform
+ else:
+ n_points = 10 #direct integration, few points are enough to get the mean and rms, but can crank up if wanted
+ y_uniform = np.geomspace(y_min, y_max, n_points).flatten()
+ n_points_integral = 333
+ yintegralgrid = np.geomspace(y_min, y_max, n_points_integral).flatten()
+ pdf1_grid = lognormal_pdf(yintegralgrid, mu1, sigma1)
+ pdf_conv = np.zeros_like(y_uniform)
+ YminusYintegralgrid = y_uniform[:, np.newaxis] - yintegralgrid[np.newaxis, :]
+ pdf2_grid = lognormal_pdf(YminusYintegralgrid, mu2, sigma2)
+ pdf_conv = np.trapezoid(pdf1_grid[None,:] * pdf2_grid * np.heaviside(YminusYintegralgrid, 0.5), x=yintegralgrid)
+
+ return y_uniform, np.maximum(pdf_conv, 0)
+
+
+def sigma_log10(sigmaquantity, meanquantity):
+ """
+ Returns the sigma(log10) for a given quantity with mean and sigma in linear units
+ """
+ return np.sqrt(np.log((sigmaquantity/meanquantity)**2+1.))/np.log(10)
+
+def mean_log10(sigmaquantity, meanquantity):
+ """
+ Returns the mean(log10) for a given quantity with mean and sigma in linear units
+ """
+ return np.log10(meanquantity)- 1/2 * np.log10(1 + sigmaquantity**2/meanquantity**2)
+
+
+def get_Pk_from_xi(rsinput, xiinput):
+ """
+ Generic Fourier Transform, returns Pk from an input Corr Func xi. kPf should be the same as _klistCF
+
+ Parameters
+ ----------
+ rsinput : array
+ Array of Rs used to evaluate xiinput
+ xiinput: matrix
+ Matrix of values you are Fourier Transforming. Dimension (z, R)
+
+ Returns
+ ----------
+ kPf: list
+ List of wavenumbers
+ Pf: matrix
+ Resultant Fourier Transform of xiinput. Dimension (z, k)
+
+ """
+
+ kPf, Pf = mcfit.xi2P(rsinput, l=0, lowring=True)(xiinput, extrap=False)
+
+ return kPf, Pf
+
+
+def get_list_PS(CosmoParams, xi_list, zlisttoconvert):
+ """
+ Returns the power spectrum given a list of CFs (xi_list) evaluated at z=zlisttoconvert as input
+
+ Parameters
+ ----------
+ xi_list : matrix
+ list of correlation functions
+ zlisttoconvert: array
+ which redshifts xi_list is evaluated at
+
+ Returns
+ ----------
+ _Pk_list: matrix
+ Matrix of power spectra. Dimension (z, K)
+
+ """
+ _Pk_list = []
+
+ for izp,zp in enumerate(zlisttoconvert):
+
+ _kzp, _Pkzp = get_Pk_from_xi(CosmoParams.rlist_CF,xi_list[izp])
+ _Pk_list.append(_Pkzp)
+
+ return np.array(_Pk_list)
+
+
+def smooth_box(box, Resolution, input_boxlength, ncells):
+ """
+ Smooth box
+
+ Parameters
+ ----------
+ box : matrix
+ Box
+ Resolution : float
+ Resolution over which you want to smooth
+ input_boxlength : int
+ Box size
+ ncells : int
+ Number of cells per side
+
+ Returns
+ ----------
+ box_smooth : matrix
+ Smoothed box
+ """
+
+ box_fft = np.fft.fftn(box)
+
+ klistfftx = np.fft.fftfreq(box.shape[0],input_boxlength/ncells)*2*np.pi
+
+ klist3Dfft = np.sqrt(np.sum(np.meshgrid(klistfftx**2, klistfftx**2, klistfftx**2, indexing='ij'), axis=0))
+
+ box_smooth = np.array(tophat_smooth(Resolution, klist3Dfft, box_fft))
+
+ return box_smooth
\ No newline at end of file