{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Parameter Constraints with `halomod`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial, parameters of a minimal galaxy HOD are fitted against power spectrum created using `halomod` with some error bars" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For auto-power spectrum, all parameters and related calculation can be done using `TracerHaloModel`. Parameters can be easily updated through `update`, which makes it very easy to combine with data fitting tools. Here we use `emcee` as an example.\n", "\n", "Let's import those (and a few other things we'll need):" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "from multiprocessing import Pool\n", "\n", "import corner\n", "import emcee\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import scipy\n", "\n", "from halomod import TracerHaloModel" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting up `TracerHaloModel`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a simplistic example, we'll be using a Zehavi05 model which is simply:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\big\\langle N_{\\rm cen}(m) \\big\\rangle = 1,\\; {\\rm for}\\; m \\ge M_{\\rm min}\n", "$$\n", "$$\n", "\\big\\langle N_{\\rm cen}(m) \\big\\rangle = 0,\\; {\\rm for}\\; m < M_{\\rm min}\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\big\\langle N_{\\rm sat}(m) \\big\\rangle = \\big(\\frac{m}{M_1}\\big)^\\alpha\n", "$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which can be specified by `hod_model` and `hod_params` arguments:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "hm_fid = TracerHaloModel(\n", " hod_model=\"Zehavi05\", hod_params={\"M_min\": 11.6222, \"M_1\": 12.851, \"alpha\": 1.049}\n", ")\n", "hm = TracerHaloModel(\n", " hod_model=\"Zehavi05\", hod_params={\"M_min\": 11.6222, \"M_1\": 12.851, \"alpha\": 1.049}\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we've set up our HOD. You can easily update the parameter values:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "hm.update(hod_params={\"M_min\": 11.6222, \"M_1\": 12.851, \"alpha\": 1.149})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compare it with the fiducial power spectrum to check the update:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/ztchen/work/gitproject/halomod/src/halomod/tools.py:534: RuntimeWarning: divide by zero encountered in true_divide\n", " norm = self._spl(match_x) / fnc(match_x)\n", "/home/ztchen/work/gitproject/halomod/src/halomod/tools.py:534: RuntimeWarning: divide by zero encountered in true_divide\n", " norm = self._spl(match_x) / fnc(match_x)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEQCAYAAACugzM1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3dd3hUVf7H8fc3nYQQSgJIDb330BEpioBUQREQkI6I6Lr2n6u41lV3VRZQUXrv1YKiINKkl9BrILSEACGB9JzfHzdoZEnIkElmMvm+nmcemTt37nxzzTOfnHvOPUeMMSillFIZcXN0AUoppZybBoVSSqlMaVAopZTKlAaFUkqpTGlQKKWUypQGhVJKqUx5OLqAnBAYGGiCg4MdXYZSSuUpO3fuvGyMCbp9u0sGRXBwMDt27HB0GUoplaeISNidtuulJ6WUUplyqaAQka4iMjk6OtrRpSillMtwqaAwxqwyxowICAhwdClKKeUyXLKPQimlAJKSkggPDyc+Pt7RpTgVHx8fypQpg6enZ5b216BQSrms8PBw/P39CQ4ORkQcXY5TMMYQFRVFeHg4FSpUyNJ7XOrSk1JKpRcfH0+xYsU0JNIREYoVK2ZTK8ulWhQi0hXoWrly5dz7UGMgJRGSbkJSPLh7pj28wN0b3DSLlXIkDYn/Zes5camgMMasAlaFhIQMt9tB465B1HG4fNT6b/Q5iLkAMRch9iIkxIJJufN7xQ38ioN/CfC/DwLKQsnaUKIOFK8BXr52K1Mp5ZzGjx/PF198wcWLF3nllVd49dVX/2efggULEhsb64DqssalgiLbYi7B+d1wYQ+c32P9N+bCn6+7eYB/KfAvCUHVoEJr8CkEnr7g5Qce3pCaYrUwkhMg8QbEXrJCJfocnN4I29N+GcQNStSCSu2hcnso2ww8vBzzcyulcsykSZNYu3YtZcqUcXQp90yDIr3lT8OJnwGBwKpWEJSoBcWqWM+LlLcuK6UxxpCQnEpcYgpxSSnEJ6Xg6e6W9hAKeLnj65XuFKemwrXTcDEULu6HsM2wZQJs+gw8/aBqB6jfHyq2BXf9X6NUXjdq1ChOnjxJp06dGDJkCCdOnGDChAmcOnWKfv36ERsbS/fu3R1d5l3pt1F6bV6F1i9ByTrgXRBjDBevx3My8gYnjsVyMvIoF6LjuHQ9gYjr8UTGJpCUkvlSsgW9PSju703xQt6ULuxLjfv8qXlfC2o07UiRdl6QEAOnfoPjP8GB5XBgGRQsAXX7QMgQKJq1UQlKqcy9veoAB89ft+sxa5YqxFtda2X4+pdffskPP/zAunXrWL169R/bn3vuOZ5++mkGDhzIxIkT7VpTTnCpoMhuZ3aYby32nL1GaOgZ9p+L5sD568TEJ//xup+XO6WLFKBEIR8qBQUS5O+Nv48Hvl7u+Hq54+3hTnKqISkllcTkVG4kJhMZk0DE9QQuXY/n16ORLNkV/sfxgov50rpqEK2rNKL5Qx3w6/gvOLYG9syFLROt1katntDyebivbnZPj1LKSWzatIklS5YAMGDAAF555RUHV5Q5lwqK7HZmj1t5gHVHIvHycKNGSX+61StF9fsKUSnQj0rFC1Lc3zvbIygiYxI4dOE6By9cZ9upKyzaEc7MLWF4ugutKgfSu1EI7Xt3xicuArZOgh1TIXQJVH4QWr0AwS2z9flK5VeZ/eXvCHlpNJZLBUV2/b1DNV58uBpVS/jj6Z4zw1qD/L0J8g+iddUgRj1QiYTkFHaevsr6o5Gs2nueZ+buopCPB93ql2JAs5epdv8LsH0KbP0CpneGci2g9d+tTvA89IumlPpTy5YtmT9/Pk8++SRz5sxxdDl3pYP806ldOoBapQJyLCTuxNvDnRaVA3m9cw02vtKOWUOb0K56cRbvDOfhzzYwdMFxdpQbAs/vh47/gmthMLsXfN3W6ttQSuU5n3/+ORMnTqROnTqcO3fO0eXclRiTeWdsXhQSEmLy+noU124mMnNLGNM2neLqzSQaBxdhdJvKtKkcgOydDxs+huizUKMrPPSOdnordQeHDh2iRo0aji7DKd3p3IjITmNMyO37aovCSRX29WJs+ypserUd47rW5NzVOAZP306XSdv43qsDqaO3Qds34PjPMLEJrB1n3fynlFJ2pkHh5Hy9PHiqZQXWv9SWj3rV5WZiCk/P2cXDE7fzc/GBmDE7oNajsPFTKzAOLLemFVFKKTvRoMgjvDzceLxxWda+8ADj+zYgxRiGztjBwMXhHG35CQz5EXyLwqJBMKsnRB51dMlKKRfhUkGRH1a4c3cTutUrxZrnW/OPLjXZe/YanT7/jTd3+xH95E/Q6WM4twsmNYPlo+HKKUeXrJTK41wqKPLTCnee7m4MbWVdkurbpCyzt4bR9tONLHTvROqYHdB0lHX/xX8bwYoxcOWko0tWSuVRLhUU+VFRPy/e7VGHVc+2okKgHy8v3kfvWccIrfMKPLcXmgyHfQthfAOY0c0Kj+QER5etlMpDNChcRK1SASwa2ZyPe9clLOomXf67kadXnONIgzfg+X3WCKkrp2DxEPhPDfjxDYg64eiylVKZCA4O5vLly5nu8/777+d4HRoULsTNTXgspCy/vNiGse0q89uxy3T8fAPPrDrPwSojrRbGk0ugfEvrTu//NrRaGQeWQ0qSo8tXSt0DDQp1TwIKePJCh2psfKUto9tUYv3hCDqP/43uX2xh/pWq3OgxDf52ANq9YfVdLBpkXZr6/StIvOno8pVyGadPn6Z27dp/PP/kk08YN24cbdq04bnnnqN+/frUrl2bbdu2ARAVFUWHDh2oVasWw4YNI/0N0T169KBRo0bUqlWLyZMnA/Dqq68SFxdH/fr16d+/PwCzZ8+mSZMm1K9fn5EjR5KSksHCajbQO7PzgWs3E1my6xzzt53hWEQsfl7udG9Qmn5NylH7voJwdA1s+hzOboUCRa2O8ObPgHdBR5euVLb85e7j71+11oGxp5J1oNOHGb58+vRpunTpQmhoKGAFRWxsLOvXr6dKlSp8/fXXbNiwgdGjRxMaGsrYsWMJDAzkzTff5Ntvv6VLly5ERkYSGBjIlStXKFq0KHFxcTRu3Jhff/2VYsWK/WV1vEOHDvHyyy+zdOlSPD09GT16NM2aNWPgwIGZn5s0Gd2ZrZMC5gOFfb0Y2qoCQ1oGs+vMVeb+fpYlO8OZ+/sZ6pUtTP+mdeg28Dt8zm+zFlFa/z7snQs9voDyLRxdvlIuqW/fvgC0bt2a69evc+3aNTZs2MDSpUsBeOSRRyhSpMgf+48fP55ly5YBcPbsWY4dO0axYsX+csyff/6ZnTt30rhxYwDi4uIoXrx4tmvVoMhHRIRG5YvSqHxR3uxSkyW7wpm77QwvL97HRz8cZnDLCjzZczYBl7ZZq/1N62y1LNq9AZ4FHF2+UtmTyV/+OcXDw4PU1NQ/nsfHx//x79unGc9s2vH169ezdu1atmzZgq+vL23atPnLsW4xxjBo0CA++OADO1T/J+2jyKcCfD0Z0qoCP/2tNXOHN6VWqQA+XnOElh/+wgcHixI9+FcIGWwtnvRVa71xT6l7UKJECSIiIoiKiiIhIeEvq9wtWLAAgI0bNxIQEEBAQACtW7dm7ty5AHz//fdcvXoVgOjoaIoUKYKvry+HDx9m69atfxzH09OTpCRrMEr79u1ZvHgxERERAFy5coWwsLBs/xx5okUhIn7Ar8A4Y8zqu+2vsk5EaFEpkBaVAjlwPpqvfj3J17+dZMWe8/yr9+s8UKOrNaR2WicYuBKCqjq6ZKXyDE9PT958802aNGlC6dKlqV69+h+v+fj40KBBA5KSkpg6dSoAb731Fn379qVWrVq0aNGCcuXKAdCxY0e+/PJLatSoQbVq1WjWrNkfxxkxYgR169alYcOGzJkzh3fffZcOHTqQmpqKp6cnEydOpHz58tn6ORzSmS0iU4EuQIQxpna67R2BzwF34BtjzIdp2/8JxAIHsxIU2pmdPfvCr/HCwr0cj4ilb5Ny/KOxwXd+LzCpMHAFlKx994Mo5QScdZrxNm3a8MknnxAS8j/9xrkmL0wzPh3omH6DiLgDE4FOQE2gr4jUFJGHgINARG4XmV/VLVOY1c+2YmTriszffoYOcy8T1n0xeHjD9EcgfKejS1RK5SKHBIUxZgNw5bbNTYDjxpiTxphEYD7QHWgDNAP6AcNF5I41i8gIEdkhIjsiIyNzrvh8wsfTndc612DRyObEJ6Xy6IIIjj2yCHwCYGZ3CNvi6BKVyrPWr1/v0NaErZypM7s0cDbd83CgtDHm/4wxzwNzga+NMal3erMxZrIxJsQYExIUFJQL5eYPIcFFWTiyGV4ebvSef44DHReCfwlrOVZdilWpfMGZgiJTxpjpd+ufyA/TjDtCxaCCLBzZnEIFPOgzL4zd7edC4bIw5zE48Yujy1MqU654U3F22XpOnCkozgFl0z0vk7Yty/LTNOO5rWxRXxaNbEHxQt70m3eKbQ/MhGKVYe4TcOR7R5en1B35+PgQFRWlYZGOMYaoqCh8fHyy/B6HTeEhIsHA6lujnkTEAzgKtMcKiO1AP2PMAVuPraOeck5kTAL9v9lKWNRNpj9RmeabhsGFPda0H+3fAi9fR5eo1B+SkpIIDw+/481p+ZmPjw9lypTB09PzL9szGvXkqOGx87A6qQOBS8BbxpgpItIZ+AxreOxUY8x7Nh63K9C1cuXKw48dO2bnqtUtUbEJ9P/md05evsE3fWvQOmwSbPsKilaypv0o19TRJSql7oFTBUVO0xZFzrt6I5H+3/zO8YhYJvVvyIMFjsCKZyA6HBoMgMbD4L66ji5TKWUDZ7uPIkdoZ3buKeLnxdzhTalW0p/hs3bw3sFAEob/ZgXEvgXw1f0wuS3smqlTlyuVx2mLQmXLzcRk3v/uELO3nqF6SX8+7VOfGoVTYO8C2DkNIg9D4XLwyKdQ5UFHl6uUykS+aFGo3Ofr5cG7Peow7anGXI5NpPuETfz7twgiaw2G0VutKT/cvWFOL1g8FGL1Bnul8hqXalFoZ7ZjRcUm8ObKA3y77wJe7m50qXcfQ1pWoHYJH/jtP7DxP+DpC49OhqoPO7pcpdRttDNb5ZqTkbHM2HyaRTvDuZmYwsO1SvBezzoExp2GJcPg0gHo+SXUfdzRpSql0tGgULkuOi6JmZtP899fjuPv48F7PevQsbIvzO8Hp3+DTh9B05GOLlMplUb7KFSuCyjgybPtq7B6bCvuK+zDqNk7+duKk8T0ngfVu8D3L8P6D8EF/1hRypW4VFDo8FjnVLWEP8tGt+T5B6uwcu95BszYx/Vu30D9/rD+A2vq8gv7HF2mUioDLhUUOteT8/J0d+P5B6vyRf+GHDgfzcBpu7j+8GfQ5VNrCO1XrWHlWIjVKeKVcjYuFRTK+XWoVZKJ/RoSei6aQdO2E1N7ADy7C5qNhj1zYHx9+O4liDzi6FKVUmk0KFSu61CrJBP7N2R/eDQDp24jKqUAdHzfuu+iehfYOR0mNoEZXeHoGkeXq1S+51KjnvQ+irzlh9CLjJ23Gz9vd8Z1q0W3eqUQEbhxGXbNgB3TIPos1OsLnT8Gb39Hl6yUS9PhscopHbsUw8tL9rH7zDXaVy/Ouz1rc19AAevFlGTY8DFs+AgKl4deU6BMI8cWrJQL06BQTisl1TB982k+WXMEN4FBLYIZ2qoCxQp6WzuEbYGlwyHmArT6GzR/BgoUcWzRSrkgDQrl9M5E3eRfaw7z3f4L+Hi4079pOUa0rkjxQj4Qdw2+exH2LwIvf2g8BJo9Y63frZSyCw0KlWccj4hh0roTrNh7ngKe7nzapz4P1UwLhAv7YOOncHA5uHlCo0HQ+iUoWNyxRSvlAjQoVJ5z6vINnpu/m33h0bzwUFXGtK2Mm5tYL0adsAJjz1zw8IHmo6HFs+Cj99Aoda/yRVDoqCfXE5+UwmtL97Ns9zk61irJvx+vh5+3x587XD4O696FA8usfosWY63Fk3wKOa5opfKofBEUt2iLwrUYY5iy8RTvf3eIskV9efnh6nSuU9IaSnvL+T3wyztwfC14B0DTEdD0afAr5rjClcpjNChUnrflRBRvrQzl6KVY6pUtzGudqtOs4m1BcG6Xte7FoVXg6QeNnrJGSQWUdkjNSuUlGhTKJaSkGpbsCufTn45yITqeh2qW4M0uNSlb1PevO0Yctvow9i8CcYO6faDlcxBU1TGFK5UHaFAolxKflMKUjaeY8MtxDIYxbSszvHVFvD3c/7rj1TDYMgF2zYTkeKjSwVoDo2I7cNMZbJRKT4NCuaTz1+J499uDfLf/IhUC/fhHlxq0rVb8r/0XYM1Ku/0b2DEVbkRAscrQZCTUe0I7vpVKo0GhXNqvRyMZt/IApy7foFnForzeuQZ1yxT+3x2TE617MH7/Es7tBK+CVlg0HgbFa+R+4Uo5kXwRFDo8Nn9LSkll3rYzfL72GFE3EularxQvdqhK+WJ+d37DuZ2w7RsIXQIpCVC+FYQMhhpdwcM7d4tXygnki6C4RVsU+VtMfBKTN5zkm99OkZSSSr+m5RjTrjLF/X3u/IYbUbB7FuycBldPQ4GiUL+fNWIqsEpulq6UQ2lQqHwn4no8n/98jPnbz+Lt4cbQVhUY1qoiAb6ed35DaiqcWm9Nb37kO0hNhnItoOFAqNkdvHzv/D6lXIQGhcq3Tl2+wb9/PMLqfRco6O3BwObl/zo77Z3EXIK986zRUldOgHchqNMbGgyAUg3g9s5ypVyABoXK9w5duM6Edcf/mJ22X9NyDL+/IiUDMrgkBWAMhG22FlI6uMIaYluiDjQcAHUf1+nOlUvRoFAqzfGIWCatP86KPedxE+jVsAwjH6hEhcAMOr1vibsGoYutVsaFvdZkhDW7W30Z5ZprK0PleRoUSt3m7JWbTN5wkgU7zpKUkkrn2vcx7P4KNCiXhVbChb1WYOxbCAnXIbAqNBoM9ftqK0PlWRoUSmUgMiaBqZtOMXtrGDHxyTQOLsKw+yvyYI0SuLvdpZWQeAMOLLdGTIVvB48CUKeXdV9GqQa58wMoZSfZCgoRKZqFz0g1xly7l+LsTYNC3YvYhGQWbj/L1E2nCL8aR/livgxqHsxjIWXw98lgpFR6F/bBjilWKyPpJpRtBs2ehupdwN3j7u9XysGyGxTxwHkgsz+v3I0x5e69RPvRoFDZkZySypoDl5i66RQ7w67i5+XOYyFlGdQi+O79GADx0daCSr9/ad2XEVAWmgy3Lk3pdCHKiWU3KHYbYzJtR2dln3shIjWA54BA4GdjzBd3e48GhbKXfeHXmLbpNKv3nScpxfBA1SCeahHMA1WD/lxtLyOpKXB0DWydBKd/s9bJaDLMWiejYFDu/ABK2SC7QeFjjInP7j7p9p0KdAEijDG1023vCHwOuAPfGGM+TPeaGzDTGPPk3Y6vQaHsLSImnnm/n2XO72FExCQQXMyXAWmXpQpl5bLU+d1pa32vtEZLNRwI978A/iVzvnilssipOrNFpDUQi/XFXzttmztwFHgICAe2A32NMQdFpBvwNDDLGDP3bsfXoFA5JTE5lR8OXGTG5tPsDLuKr5c7jzYszaDmwVQp4X/3A1w+Bps+g73zwc3TuiTV8nldiU85hXsOChEZBbQAvgOeBL7NyuWfLBQUDKxOFxTNgXHGmIfTnr8GYIz5IN17vjXGPHK3Y2tQqNwQei6a6ZtPs3LveRKTU2lVOZDBLYNpW6343S9LXTkJ6/8F+xaAlx+0eNZ6eGWhD0SpHJKdoFgI9MH6Un9ERL40xoyyQ0HB/DUoegMdjTHD0p4PAJoCi4FHAW9gnzFmYgbHGwGMAChXrlyjsLCw7JaoVJZExSYwb9sZZm0N49J167LUoBbBPBZSloLedxntFHEY1r0Hh1aCfyl4cBzUeUwXVVIOkVFQZOW3McpYafJl2vMEu1Z2F8aY9caYscaYkRmFRNp+k40xIcaYkKAg7ShUuadYQW/GtKvCxlfaMb5vAwr7evH2qoO0+OBnPvz+MBejM+m6K14d+syCwT+AfwlYNgK+aQ/h2iJWziMrQfE5gDFmVdrzpTlUyzmgbLrnZdK2ZZmIdBWRydHR0XYtTKms8HR3o1u9Uix/piVLR7egVZVAJm84wf0f/cILC/dw7FJMxm8u3xyG/QI9voSYC/DNg/DtixB/Pfd+AKUykOXObBEJNMZcttsH/++lJw+szuz2WAGxHehnjDlg67G1j0I5izNRN5m66RQLtp8lLimFh2uV4Jm2le+8+t4tCTHwy7vw+1fWqKjOH1uLKSmVw7I96klEVhpjutmpmHlAG6x7Iy4BbxljpohIZ+AzrOGxU40x79l4XF3hTjmlKzcSmb7pFNM3n+Z6fDL3Vwnkbw9VpWFm80qF74RVz8Gl/VCzB3T5FHyzMkmCUvfGHkGxyhiTJ/6s0RaFclYx8UnM+f0MX284SdSNRNpWC+JvD1XNuIWRkgSbx8O6D8C3GPSYCJUfzN2iVb6Rnc7sW1xv9kClcpm/jyejHqjEhpfb8nLHauw+e41uEzYxctYOTkTG/u8b3D3h/r/D8J+hQGGY3cvqu0iKy/3iVb7lUi0KvfSk8pqY+CSmbTrN5A0niUtKoV+Tcjz3YBUC77T6XlI8/PxP2DrRWjzp8RlQrFLuF61clj0uPdU2xoTavbIcoJeeVF5zOTaBz9ceY+62M/h4uPFMu8oMbVUBbw/3/9352E+wdLg1l1T3iVDTLl2HStlnCg8R8QZ6AcHAH3cSGWP+aYca7UaDQuVVJyJj+fD7w/x08BIVA/0Y160Wrave4b6ga2dh0SA4txOaPQMPvW1dplIqG+zRRwGwAugOJAM30j2cgt5HofK6SkEF+XpgCNMHNybVGAZO3caoWTs5f+22PonCZa2b9JqMtC5FzekNcVcdU7Ryeba2KELTz/bqrLRFoVxBQnIKX284yYR1x/Fwc+PVTtXp16Tc/84jtXs2rHoeipSHfgu130LdM3u1KDaLSB071aSUyoS3hztj2lXhx+cfoF7ZAN5YHkrfr7dy+vJtjfgGT8KglXDzCnzdDk7+6piClcvK6noU+7GGx3oAVYCTWHM+CWCMMXVzssis0lFPylUZY1iw/SzvfXuIpNRUXutUg4HNyyOSrnVx5RTMewKijlud3PWecFzBKk/K7sJF5TN73RjjVFO16qUn5aouRsfz6tJ9rD8SSdtqQXzUux5B/umG0sZHw4In4dQGeOif0GIsyF2mPFcqjVMtXJTTNCiUKzPGMHNLGO9/d4iC3h78q1ddHqxZ4s8dkhNg2Sg4sBSajYYO7+m05SpL7rmPQkRGichMEXlCRFaLyNM5U6JSKitEhEEtgln1bCuC/L0ZNnMH7393iOSUVGsHD2/oNcUKia2TYOkwSE50bNEqT8vKnxntgEHAAGNMF6BezpaklMqKqiX8WTGmJQOalWfyhpP0/+Z3ImLS1r5wc4OH34cH34bQJdblKJ32Q90jp1+4yBZ6H4XKb7w93HmnR23+83g99oZfo8v4jew4fcV6UQRaPW/NOnvsR5jzGCTcYT4ppe7CmRYuyjZjzCpjzIiAgABHl6JUrnq0YRmWjW6Jr5c7T0zeyrxtZ/58MWQI9PwKwjbDrB56Y56y2V2Dwhhz+LbnOkhbKSdU475CrBjTihaVA3lt6X7GrTzwZ79FvT7WJIIX9sKMrtY9F0plkU1DIURkhogUTve8iIhMtX9ZSql7EVDAk6mDQhjcMpjpm08zePp2ouOSrBdrdIUn5kHkUZjRDW5EObZYlWfYOmaurjHm2q0nxpirQAP7lqSUyg4Pdzfe6lqLDx6tw5YTUTw6aRNnr9y0XqzyIPSbD1HHrJZFbKRji1V5gq1B4SYif6zdKCJFSTeLrKNpZ7ZSf+rbpByzhjYlMiaBnpM2sy887W+8Su2g3wK4chJmdIHYCMcWqpyerUHxb2CriLwjIu8Cm4GP7F/WvdHObKX+qnmlYiwd3QJvDzf6fLWVnw9dsl6o2Ab6L4RrZ7Rloe7KpqAwxswEegKXgAvAo8aYWTlRmFLKPioX92fZMy2oVNyP4TN3MOf3tBl3KrS2Zpu9GgYztc9CZczWzmwfoCPQHutGvIfTtimlnFhxfx8WjGjOA1WD+L9loXy+9hjGGKhwv9VnceWkFRY6Gkrdga2XnmYCtYDxwASgJqAtCqXyAD9vDyYPDKFXwzJ8uvYob608QEqqsS5D9Z0Hl49pWKg7srUjurYxpma65+tE5KA9C1JK5RxPdzc+eawuxQp6MXnDSaJuJPKfx+vhXakd9J0L8/rB7Edh4Arw0b4+ZbG1RbFLRJrdeiIiTQGdplWpPEREeL1zDV7rVJ1v911g2Iwd3ExMhsoPwuMz4WIozO4NCTGOLlU5CVuDohHWKnenReQ0sAVoLCL7RWSf3atTSuWYkQ9U4uPeddl0/DJPfvM70TeToFpH6D0Vzu2EuU9A4k1Hl6mcgK1rZjv1Aka6wp1Stvsh9ALPzttNpaCCzBra1FoIaf9iWDrcGhnVdwF46piV/EAXLlJKZWjD0UhGztpJyQAfZg1tQpkivrBnLiwfDVU6QJ/Z4OHl6DJVDsvuUqgrM3vdGNMtG7XZnQaFUrbbGXaFp6Ztx9/bgznDm1Eh0A92TIXVf4Ma3aD3NHB3mokYVA7IblBEAmeBecDvwF8W4XW2GWU1KJS6N6Hnohk4dRtuIswZ1pRqJf1hyyRY8xrUecyartzN3dFlqhxyz0uhpikJvA7Uxlqf4iHgsjHmV2cLCaXUvatdOoAFI5rhJtBn8hb2h0dD89HQ/k3YvwhWjYXUVEeXqXJZloLCGJNijPnBGDMIaAYcB9aLyJgcrU4pleuqlPBn0ajm+Hl50O/rrdaKeff/HVq/DLtnww+vgAv2baqMZXl4rIh4i8ijwGzgGay7s5flVGFKKccpX8yPRaOaE+TvzYAp29h0/DK0fR2aj4Ftk2HtOA2LfCRLQSEiM7HumWgIvG2MaWyMeccYcy5Hq1NKOUypwgWYP7IZ5Yr6Mnj6dn45EgEd3oWQobDpM9jwsaNLVLkkqy2KJ4EqwHNYN9xdT3vEiMj1nCtPKeVIxf19mPJyhrYAABamSURBVD+iGdVK+DNy1k6+D70InT+Bev1g3XuwabyjS1S5IKt9FG7GGP+0R6F0D39jTKGcLlIp5ThF/LyYM7wpdcsUZsy83Szbex66/Rdq9YSf/gHbv3F0iSqHOf2gaBHpATwCFAKmGGN+dHBJSuU7hXw8mTmkCcNn7uCFhXuJS0ylX8/JkBQP3/4dPH2hfj9Hl6lySFb7KHbZY590+04VkQgRCb1te0cROSIix0XkVQBjzHJjzHBgFNAnq5+hlLIvP28Ppj7VmDZVg3h92X6mbj0Hj02Him1hxTMQusTRJaocktUWRY27TPongC1zEk/HWs9i5h8HEHEHJmLdoxEObBeRlcaYW9OYv5H2ulLKQXw83flqQAhj5+3mn6sPEpeUwjNPzIXZvWDpCPAoANU7O7pMZWdZDYrqWdgnJasfaozZICLBt21uAhw3xpwEEJH5QHcROQR8CHxvjMmw1SIiI4ARAOXKlctqKUopG3l5uDGhXwNeXLSXj9cc4WZiMi/2m4/M6gmLBkHf+VC5vaPLVHaUpaDIpVlhS2NNE3JLONAUeBZ4EAgQkcrGmC/v9GZjzGRgMlhTeORwrUrlax7ubvz78foU8HJn4roT3EhI4c1+S3Cb1RXm94cnF0NwK0eXqezE6TuzjTHjsW7uu6t004znbFFKKdzdhPd71sHXy4MpG09xMzGZD/ovw31mF5jzOAxcDmWbOLpMZQe2LlyUk84BZdM9L5O2LcuMMauMMSMCAnQJR6Vyg4jwxiM1GNu+Cgt3hPPcqrMk9lsG/iWsfovzux1dorKDewoKEfFL63y2p+1AFRGpICJewBNAptObK6UcT0R44aGqvNapOqv3XWDUinPE91sOPoVhVk9raVWVp2V1eKybiPQTkW9FJAI4DFwQkYMi8rGI2HStR0TmYU0JUk1EwkVkqDEmGRgDrAEOAQuNMQdsPG5XEZkcHR1ty9uUUnYw8oFKvNezNuuORDBoyXli+y617q+Y2R0iDju6PJUNWV2P4ldgLbACCDXGpKZtLwq0BfoBy4wxs3Ow1izT9SiUcpwVe87xwsK91C5ViJndixGwoLv1wlPfQaD2Hzqz7C5c5GmMScruPjlN18xWyjmsPXiJ0XN3Ub6oL3N7FCZo8aPg7gWDv4OiFRxdnspAthYuuhUAItLoDgfukn4fR9LObKWcw4M1SzB9cGMuRMfTY2EU4d3mQ3IczOgKV3NjtL2yJ1s7s78Wkdq3nohIX+Af9i1JKeUKWlQKZN7wZsQlpdBj8TVOdJoNCdetsLh29u4HUE7D1qDoDcwUkeoiMhwYDXSwf1n3RjuzlXIudcoEsGhUc7zc3eix5Aah7WZA3DUrLKJ1OZu8wqagSJte4wlgKdAL6GCMcZpvZb30pJTzqRRUkMVPt6B4IW8eXRnP1pZfw43LVlhcv+Do8lQWZHV47H4R2Zc2MeBioChQAfj9LpMFKqUUpQoXYNGoFtS8rxD9vk/mx4aTIPYSzOiiYZEHZHXUU0UymfTPGBMmImKycrBcoMNjlXJONxOTGT1nF+uPRPJxk5v0Pvw84l8SBq2GQvc5urx8L1ujnoCpQDfAGGPCbj2AC0AlEZkBDLJfufdG+yiUcm6+Xh58PTCERxuU5qVtvkwu9xEm5qK2LJxcVoOiI1aLYp6InE+7I/skcAzoC3xmjJmeQzVmmfZRKOX8PN3d+OSxeox6oBIfhBbmX8Xe1bBwclm69PSXN4h4AoFAnDHmWo5UlU166UmpvGHmltO8tfIAfUqc44Mb4xD/EjBoFQSUcXRp+VK2Lj2JiI+IPC8iE4DBQKSzhoRSKu8Y2DyYL/o3Ytnlsjzj/g9SYyNhWme4dsbRpal0snrpaQYQAuwHOgP/zrGKskH7KJTKezrWLsnc4c3YkliJgUmvkXzzKkx7BK6ccnRpKk1WRz3tN8bUSfu3B7DNGNMwp4u7V3rpSam859TlGwyZvp2AawdZWOBDvAoUtC5DFavk6NLyjeyOevpjHqe06cCVUsquKgT6sfTpFniWqU/32FeJi7uBmdYJIg45urR8L6tBUU9Erqc9YoC6t/4tItdzskClVP5RxM+LWUObUqVuc7rGvk5MfDJmWme4sNfRpeVrWZ091t0YUyjt4W+M8Uj370I5XaRSKv/w8XTnsz716dyuLV1v/B+XEz1Ind4Fzm53dGn5ljOtma2UUgC4uVnLq/7t8Y48lvAPzif6kjqjG5za4OjS8iWXCgod9aSUa+nRoDT/Ht6VoW7vcCK5GKmzesHh7xxdVr7jUkGhd2Yr5XoalS/ClDFdeL3Qh+xLLkvqgicxexc4uqx8xaWCQinlmsoU8WX6Mx2ZWukztiRXxywbSdLWyY4uK9/QoFBK5Ql+3h58NuB+drb6irUpDfH84SVi17wLzjFptUvToFBK5RlubsLYh+uQ0nsGS1MfoOCWj4lc8CykZrgKgrIDDQqlVJ7TqV5ZaoyaxRyPngQdnsWZr/tCcoKjy3JZGhRKqTypRqkAHnlhMvMChlPuwhpOfNaJxBs6V2lO0KBQSuVZhX29eGzsR6yq+BblYvZw7tO2RJw77eiyXI5LBYXeR6FU/uPh7kbXgS+wq9WXlEg6R/LXD7J39zZHl+VSXCoo9D4KpfKvpg89TuRjy/CRJMot78mq1UuxdWE2dWcuFRRKqfytfO2WeI5cS6JXAB22j2DKV58Sm6ATXmeXBoVSyqX4l6xC0HO/cSWgFsMuvs2c/7zAsYs6yXV2aFAopVyOW8Fi3PfsGi6X78zIhBns+GIIK3eFObqsPEuDQinlmjx9CBw0h9iQMfSVn/BfNoB3lmwlIVlvzrOVBoVSynW5uVGwy3skP/IpD7iH0nvvMJ6esIKzV246urI8RYNCKeXyPBoPwW3AEip7X+Oja8/zyvhp/HjgoqPLyjM0KJRS+UOltniO+JnChQKYxjhWzJnIu6sPkpic6ujKnJ7TB4WIVBSRKSKy2NG1KKXyuKBqeIxch2fZhkz0Gk/BrR/T58tNhF/VS1GZcUhQiMhUEYkQkdDbtncUkSMiclxEXgUwxpw0xgx1RJ1KKRfkF4jboJVQ/0me91jKqMh36fX5z/x08JKjK3NajmpRTAc6pt8gIu7ARKATUBPoKyI1c780pZTL8/CG7hOgw7t0kN+Z4/4Wb85cw9urDuioqDtwSFAYYzYAV27b3AQ4ntaCSATmA91zvTilVP4gAi2eRfotpJJHBD8VfJP9m3+g1xebOX35hqOrcyrO1EdRGjib7nk4UFpEionIl0ADEXktozeLyAgR2SEiOyIjI3O6VqWUq6jaARn2MwULFWWhzwc0jlpFl/9uZMWec46uzGk4U1DckTEmyhgzyhhTyRjzQSb7TTbGhBhjQoKCgnKzRKVUXhdUDYb/jFvF1rzFV3ziO4MX5+/gxUV7uaFzRTlVUJwDyqZ7XiZtW5bpNONKqXtWoAj0XwQtnqVj3LesD/o3v+4KpeuEjRw4n7+/U5wpKLYDVUSkgoh4AU8AK205gE4zrpTKFjd36PAu9JpC6bijbCz8NhXiDtJz4mambDyVb6ctd9Tw2HnAFqCaiISLyFBjTDIwBlgDHAIWGmMO2HhcbVEopbKvTm8Y9hPe3j58k/omb5TcyjurDzB4+nYiY/Lf2tziigkZEhJiduzY4egylFJ53c0rsGQYnPiZ46V78GjYo3j5+PHJY3VpU624o6uzOxHZaYwJuX27M116Ukop5+Jb1Oq3aP0Slc8tZ1vJj6hZ4ApPTdvO26sOEJ+UP+65cKmg0EtPSim7c3OHdm9A3/n4xJxlRtJLvFvrAtM2nabHxE0cuRjj6ApznEsFhXZmK6VyTLVOMHI9ElCWJ0+8yPpGm7gSc5OuEzYyfZNrd3S7VFAopVSOKloRhv4I9fsRfGAiG8tMomOwO+NWHWSIC3d0u1RQ6KUnpVSO8/KF7hOh63i8wrfy+fXnmdQ6mU0nouj42QZ+Oex6kwu6VFDopSelVK4QgUaDYNhPiLsnnXcMYWPrwwQV9GLI9B28tSLUpTq6XSoolFIqV91XD0b8ClUepvjmcXx739eMahbIjC1hdJ+wiaOXXKOj26WCQi89KaVyXYHC8MQceOgd3I98x6tnRrGwR0GibiTQ9b8bmbU1LM93dLtUUOilJ6WUQ4hAy7Hw1GpIiqPJ2sf5pf05mlUsxj+Wh/L07F1E30xydJX3zKWCQimlHKp8Cxi5Aco2odCa55hedAZvPlyBtYcu0Xn8b+w6c9XRFd4TDQqllLKngsVhwHJo/RKyZzZDDo9gRb9SiMDjX27hy19PkJqaty5FaVAopZS93bqbu98iiD5LrVXdWNP5Jh1qleDD7w8zfOaOPHUpyqWCQjuzlVJOpWoHGPkrFCmP35L+TLzve/7ZtTobjkXyyH9/Y1/4NUdXmCUuFRTama2UcjpFgtPu5n4S2fAxA0++xJKnapCaauj9xRZm54FRUS4VFEop5ZQ8C0D3CdD1czj9G3W/68EPTxSleaVivLE8lBcX7XPqG/Q0KJRSKjeIQKOn4KnvIDmBQnM7M63xWca2r8KSXeH0+mIzZ6/cdHSVd6RBoZRSualsY+tu7pJ1cVsyhBeYzZQBDThzxZqJdsPRSEdX+D9cKii0M1splSf4l4BBqyBkKGz6nPa7x/Lt8DqULOTDU9O28cX6E07Vb+FSQaGd2UqpPMPDC7r8B7p8BifXUW5pN5b1CeKRuqX41w+HeWbuLm4kJDu6SsDFgkIppfKckMFW6yLuKgWmP8z4RpH8X+ca/BB6kZ6TNnHq8g1HV6hBoZRSDle+BYxYB0XKIfP6MNzjW2YObkJkTALdJmxk3ZEIh5anQaGUUs6gcDkYsgZqdIUf36DVwbdYOaoxZYv4MmT6diauO+6wfgsNCqWUchZeftB7OrR5DfbMoezKx1kyoBJd65bi4zVHHNZvoUGhlFLOxM0N2rwKj82AS6EUmP4Qnz8gf/RbOOJ+Cw0KpZRyRrV6wJAfAINM68TwwP1MH9yE89fi6D5xE9tOXcm1UlwqKPQ+CqWUS7mvHgxfB8VrwsKBtL4wjeWjW1DY15P+32xl/rYzuVKGSwWF3kehlHI5/iXgqW+hzuOw7j0qbnieZSMa0aJSIK8u3c87qw+SksPrW3jk6NGVUkpln6cPPDoZileHn/9JwLUzTO0zh3fW+TFl4ynCom7y+RP18fPOma90l2pRKKWUyxKB+/9udXJf3I/7lPaMa+bO291q8cvhSzz+1RYuXY/PkY/WoFBKqbykVg8Y/C0kJ8CUhxhU4hRTBjXm9OUbdJ+wiWOXYuz+kRoUSimV15RuBMN/gYCyMKc3bePXsmhUCyoE+hFY0NvuH6dBoZRSeVFAGRjyPQS3guVPU/PoF8wb3pQifl52/ygNCqWUyqt8AqDfIqjXD9a/DyvGQEqS3T9Gg0IppfIyDy/oMQkeeAX2zYfze+z/EXY/olJKqdwlAm1fh7p9oFglux/e6YNCRPyASUAisN4YM8fBJSmllHPKgZAAB116EpGpIhIhIqG3be8oIkdE5LiIvJq2+VFgsTFmONAt14tVSql8zlF9FNOBjuk3iIg7MBHoBNQE+opITaAMcDZtt5RcrFEppRQOCgpjzAbg9qkPmwDHjTEnjTGJwHygOxCOFRaQSb0iMkJEdojIjsjIyJwoWyml8iVnGvVUmj9bDmAFRGlgKdBLRL4AVmX0ZmPMZGNMiDEmJCgoKGcrVUqpfMTpO7ONMTeAwVnZV0S6Al0rV66cs0UppVQ+4kwtinNA2XTPy6RtyzKdZlwppezPmYJiO1BFRCqIiBfwBLDSwTUppVS+55BLTyIyD2gDBIpIOPCWMWaKiIwB1gDuwFRjzAEbj9sV6ApcF5FjaZsDgNuXvLt9W/rngcBlWz7XBneqxV7vu9s+Gb2elfNzp22ucM7utp+eM9v303Nm+37OdM7K33GrMcalH8Dku21L/xzYkZu12Ot9d9sno9ezcn5c9ZzdbT89Z3rO9JxZD2e69JRT7jRS6vZtGY6msrN7/ZysvO9u+2T0elbOz522ucI5u9t+es5s30/Pme37Of05k7TUUWlEZIcxJsTRdeQles5sp+fMdnrObGevc5YfWhS2muzoAvIgPWe203NmOz1ntrPLOdMWhVJKqUxpi0IppVSmNCiUUkplSoNCKaVUpjQobCAiPUTkaxFZICIdHF1PXiAiFUVkiogsdnQtzkxE/ERkRtrvV39H15MX6O+W7e71OyzfBIWNiyXdkTFmubEWUBoF9MnJep2Bnc7ZSWPM0Jyt1DnpAl22s+Wc5effrfRsPGf39B2Wb4ICGxZLEpE6IrL6tkfxdG99I+19rm469jtn+dF0dIEuW00n6+dMWaZj+zmz6TvM6acZtxdjzAYRCb5t8x+LJQGIyHyguzHmA6DL7ccQEQE+BL43xuzK2Yodzx7nLD+z5fzx5wJde8hff8D9hY3n7GDuVuecbDlnInKIe/gOy7e/kGkyWiwpI88CDwK9RWRUThbmxGw6ZyJSTES+BBqIyGs5XVwekK0FuvKpO54z/d3KVEa/Z/f0HZZvWhT2YIwZD4x3dB15iTEmCut6qMqEsWGBLmXR3y3b3et3WH5vUWR7saR8SM9Z9uj5s52eM9vZ9Zzl96DQxZJsp+cse/T82U7Pme3ses7yTVCkLZa0BagmIuEiMtQYkwzcWizpELDQ2LhYkivTc5Y9ev5sp+fMdrlxznRSQKWUUpnKNy0KpZRS90aDQimlVKY0KJRSSmVKg0IppVSmNCiUUkplSoNCKaVUpjQolFJKZUqDQimlVKY0KJRyYrqKm3IGGhQq3xOR4NtXB7vD63EisifdtpEiYkSkTbptz6Rte8hetWW0ipuItBeRWbdtKyAie0QkUUQC7VWDUjrNuFJZc8IYUz/d8zrAXqA6sF5EfIFhQCSwz9aDi0gd4IPbNg8xxkRk8JZ6wO70G4wxcUB9ETlt6+crlRltUSiVTtqlnt0i0vguu9YF5mMFBcBYYBGQaoy5lHaseWItYr9NRMJE5JG07aVEZEna5xwWkSbGmP3GmC63PTIKCbCCoqSIbBCRMyLyYPZ+cqUypkGhVBoRqQYsAZ4yxmy/y+41gIVAdREpjLVQ/WYg/SWsesBJY0wToD/wloh4AN8D04wxDYCGWLN7ZlRTRqu41QMijTGtgefSjq9UjtBLT0pZgoAVwKPGmEzXYhaRskCUMeakiBQHXgL+C1QF9qft45N2zLfT3nYQKAL0AA4ZY1YDGGNuZvZZd1rFTUQ8gWLAv9M2eQLXsvZjKmU7bVEoZYkGzgCtsrBvHdICAYgBOgIz0rbf6p+oDRwzxsSnPW+I1adRH9iazVprAHuNMalpz+vy15aMUnalQaGUJRHoCQwUkX532bcufwbFx8AYY0wKfw2QekA5EfERET+slsWnwEWg1q0DiUjQPdRaDyt00tdjcwe6UlmlQaFUGmPMDaAL8DcR6ZbJrnVI+wveGLPaGLMlbXtN4NYqYvWApcDvWMtSfmGM2QRMB0qIyIG04bbN76HUevw1GGqjLQqVg3SFO6XuQkSCgdXGmNo2vOdXYIQx5khO1ZXJZ58GQowxl3P7s5Vr0haFUneXAgSkv+EuCyoBx3Konju6dcMdVud26t32VyqrtEWhlFIqU9qiUEoplSkNCqWUUpnSoFBKKZUpDQqllFKZ0qBQSimVKQ0KpZRSmdKgUEoplSkNCqWUUpnSoFBKKZWp/wd1TuTLhi6EZAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(hm_fid.k_hm, hm_fid.power_auto_tracer, label=\"fid\")\n", "plt.plot(hm.k_hm, hm.power_auto_tracer, label=\"update\")\n", "plt.xscale(\"log\")\n", "plt.yscale(\"log\")\n", "\n", "plt.xlabel(\"k [$Mpc^{-1} h$]\")\n", "plt.ylabel(r\"$\\rm P(k) \\ [{\\rm Mpc^3}h^{-3}]$\")\n", "plt.legend(loc=\"upper right\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just like that, we're all set." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## MCMC-Fitting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For a naive first-look, let's create some fake error bar:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "pkerr = np.linspace(0.01, 0.5, num=80) * hm_fid.power_auto_tracer" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEQCAYAAACugzM1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3deXzU1b3/8ddnZjKTdRIgCSRhFagYULBEEJde7Sa2qG31unVRS0Fabe39/drftbf3d2376692ubetXq1IlSLaulTrgtXa1iouoAJurMouYUvYsu85948EjYEkM8lMZns/H488Hp2T73znw2nMJ+dzzvccc84hIiLSE0+sAxARkfimRCEiIr1SohARkV4pUYiISK+UKEREpFdKFCIi0itfrAOIhvz8fDd27NhYhyEiklDWrFlzwDlX0L09qRKFmV0AXDBhwgRWr14d63BERBKKme08XntSlZ6cc8ucc/Nzc3NjHYqISNJIqkQhIiKRp0QhIiK9SqpEYWYXmNmiqqqqWIciIpI0kipRaI5CRCTykipRiIhI5ClRiIhIr5LqOYrB0NbuOFTXTEVNI5U1TdQ1tdHQ0kZDcytNre34PIbP68Hv9ZDu95Kf7acwJ53CYICcgA8zi/U/QUQkLEoUPaioaWTDnmq2VNSy/UAd2w/UsXrHYZrb2vt9T68Zp47OY1JRDi9tPkB2wMfj15+F16PkISLxK6kSRdcns/tj6cod/GNTBev3VFNZ0/R+e15mGuPys5hzShHFeRkUBgMU5gQoyAmQHUgjI81Lht9LIM1DW5ujpa2d5rZ2GprbqKxpoqKmiV/+7R0aW9oxg8ff2ENNUysA03/8N84YP4yNe6rJy/Tz6HVnRqAnREQix5LxKNSysjLXny08/s/Db/F2eRWlxUEmF+cyuTjIicNzGJLlj2h8zjnKDzewZudhXtpygJc2H2BfdSMAZ04YxuemlTB7yghy0tMi+rkiIr0xszXOubJj2pUoPuCci8kcgnOOC297mUN1Tfi8HnYerMcM8rP8/H7e6XxkeM6gxyQiqUeJIkE453hj1xEW3LuGA7VNtDs458QC9lU1Ekz38dCCM2IdoogkqZ4SRVLNUSQDM+Ojo4fw2vc/yaG6Zu57ZSdLV+7gQG0zWX4vT769h9mTR+DzamWziAwOjSgSQGNLG+f/+gX2VjfS2NJOwOehKDedv/7LP+H3KWGISGT0NKLQb5kEkJ7m5bnvnsv6H85m4Zem4/MaOw7W88lfLufPb+8lGZO9iMSPpCo9DXR5bLzzeozZU0aw+KUgVQ0tmBnX/eF1sgNeRg/N5KkbPhbrEEUkCan0lMDa2h2PrCnn+4+tpaXNMeeUIr73mZMoycuIdWgikoA0mZ2EvB7j0tNG8dDqXeytauBvG/bz9437GZYVoCg3nYe/rhVSIjJwShRJ4GhC2H2kgZuf2siTb++loqaRxS9t54oZo8nwe2McoYgkMpWektD5t7xA+eEGahpbyc/2k5HmZXhQIwwR6Z1WPaWQYHoapUVBHrp2FicVBdl1uIHX3zvMd/74Fq9uO8ilC1dw2Z0rYx2miCQIjShSwGdvfZGK6ibqm1upa24j4PNQkBPgka+fwfBgeqzDE5E4ocnsFJYd8JFd4ON315zG02v38YNl6yk/3MCsm5/l45MKee9gPXmZadoeRESOS4kiBTx47az3//fF00fy0OpdNLa0ccaEfB5eU05lTRMBn4e7X9rOZaeNYu6SVce8T0RSl0pPKa61rZ3zb3mRfVWN1DS1kpPuIzvgozg3nUe+obMxRFJJQk9mm1mWma02szmxjiXZ+Lwehmb5KS0O8th1Z/KxjxSwt6qRt3dX8Zd1+2IdnojEgZiMKMxsMTAHqHDOTenSPhu4BfACdznnftrZ/iOgFtjgnHuyr/trRDEwc259kW0H6qhvbmNoZhpj87P4k0YXIkkv3kYUS4DZXRvMzAvcDpwPlAJXmFmpmX0K2ABUDHaQqSor4GNycZDvnncih+tbeLu8ilU7DsU6LBGJkZhMZjvnXjCzsd2aZwBbnHPbAMzsAeAiIBvIoiN5NJjZU8659u73NLP5wHyA0aNHRy/4FNB1EvuZdft4t6KGL9/9Knd8cTrnTiqMYWQiEgvxtOqpBNjV5XU5MNM5dz2AmV0NHDhekgBwzi0CFkFH6Sm6oaaODL+X0qIgzW3tzFu6mjHDMsnPDmhFlEgKiadE0Svn3JK+rkn2bcZj4WhCqGlsYd7S1byy7RCt7crDIqkknlY97QZGdXk9srMtZM65Zc65+bm5uRENTCAnPY0l18xgSGYaOw/Wc9s/NuvAJJEUEU+JYhUw0czGmZkfuBx4IpwbmNkFZraoqqoqKgGmuvQ0LxMLs8nP9vOff32Xn/5lk5KFSAqISaIws/uBlcCJZlZuZnOdc63A9cAzwEbgIefc+nDuqxFF9JkZJ+Rn8eXTx3Dn8m3M/MmzXLpwRazDEpEoitWqpyt6aH8KeGqQw5EwHJ2zcM6RFfCxcPlWWtsdVQ0t5GakxTg6EYmGeCo9DZhKT4PHzLjx/EmMGpLBobpmzvvVCzz/TgWX3blSW5iLJJmkShQqPQ2+4rwMJhcHyUn3cfXvVrGtspbW9uOuYBaRBJVUiUJiIzvg48lvncXXzxlPZW0zb75XxQ+eWM+WilqNMESSQFLtHtvlOYp5mzdvjnU4KWnOrS+yt6qR6sYWWtocwXQfJUMyePqGj8U6NBHpQ7zt9RQVKj3FXlbAx4TCbFbc+Am+e96JNLS0sXFvDf/x+Dpqm1o1whBJQAnzZLYkhq5be1x37gSe21RB+eF67n1lJ89urCAn3afVUSIJJqlGFFr1FH+8HmPMsCweXjCLQJqHTftqKD/coAf1RBJIUs1RHKXzKOJTY0sbZ/3sHxyobebafzqBG2dPwsxiHZaIdOppjkKlJxk06WleTsjPwmPGncu30dTSzoY9VZiZdqMViWNJVXqS+GdmjB2WydyzxrFkxQ62H6xXGUokziXViELbjMe/rluApKd5uP25rdQ1tbK2vIof/3nDh64RkfiQVCMKLY9NHGbGd8+bxITCbFra2rno9pfYebCONp11IRJ3kipRSOIZluXnlJJcrpw5mn3VTbxVfoQlL2+noblNz1yIxAklCok5n9fDjz93MqVFOQR8Xn6wbANn/uwf7D7cQGub9o0SibWkmqOQxNN1PiInPY3JxWl857wTWfj8Vp7dVMHe6kae21TBuZMKYxilSGpTopC4c9rYoZx29VAu+O8X2VpZx1fvWcU3Pz6RV7Ye0FJakRhIqkShVU+JrXsCyPT7mFwUZEx+Frc+u5ncjDTGF2TFKDqR1JVUcxRa9ZR8PB7jF5ecwk8+fzLVDS2s3V3Fkpe309SqyW6RwaItPCRhzLn1RXYeqqemsZWSvAwCPg/52X4eWnBGrEMTSQopsc24JLesgI+TRuRw39yZ5Gf72XagjrW7q3lp8wEAjTBEokSJQhKKmXHWxHweu+5MJhZm0+4cX7r7VeYtXU1jS1uswxNJSkk1mS3Jretkt5kxNMtPXkYa50wq5PbnttDQ3MaI3HQO1zUzJMv//uhCq6REBkYjCkloHo9x3bkT+Mf/Podh2X72VjXysZ8/x63PbtZ2ICIRklQjCi2PTS1dRwojctMZX5BNUW4rxXkZ/PJv7+LzGMV56TS2tHHV4teOeY+IhCapRhRaHiuZfh93frmMx647k0y/l/cONfCxnz/HvupG2rus8NPEt0jokipRiBw1bVQeJxUFOWlEDmOHZbHzYD1v7arinhU7aGjWpLdIOJKq9CSp7XhlpWBGGg/MP53zb3mR8sMN3PTEem55djOZaV6GBwPvX6eJb5GeaUQhSc/MyM1IY3JxkD8umMW0UXmUH2ngjV1H+OGy9ew6VH/Me1SaEvmARhSStI43Oui64eDeqkbuXbmTe1bsIC/TT1FuegyiFIl/GlFISsr0+xhfkM2L/3ou884+gar6FtbvqebiO1bw5Nt7PjTxDRphSGrTiEJSQk9zD0W5GXzvMyexeudhKmuaqKxp4vo/vIHf66EwGOBAbRP52YFj3qc5DUklGlGIAD6PUZSbznPfOYe7vlJGepqH8sMNnHHzP/j2A29Q09hCMm6gKRKKuB9RmNlJwA1APvCsc+6OGIckSaCnkYDXY3yydDgnFQVpaG7jo2OG8MiacmqaWsn0e/n9qzv53LSSY96nEYYks5iMKMxssZlVmNm6bu2zzewdM9tiZjcCOOc2OucWAJcCZ8YiXklNGX4vP7hwMq/82ycYOywTgO8/uo6ZP3mW7QfqqG9uPe77NJ8hySZWpaclwOyuDWbmBW4HzgdKgSvMrLTzexcCfwaeGtwwJVU8eO2sHkcDWQEfw4PpTCkO8sjXz+DTpcOprG1i7e5q/nnhCh5/c/cxk98iySSk0pOZDQ3hsnbn3JFQ7uece8HMxnZrngFscc5t6/zMB4CLgA3OuSeAJ8zsz8AfQvkMkUgzM6aPGcL0MUPYcbCOA7Udk983PPAmPo9RkBPo8ZkMUFlKEleocxR7Or+sl2u8wOgBxFIC7OryuhyYaWbnAF8AAvQyojCz+cB8gNGjBxKGSN+/1NO8HopyM7h/3um8vPUA37r/DfZWNfJPv3iOYEYaw3MCtLc7PJ7e/pMRSQyhJoqNzrlTe7vAzN6IQDzHcM49DzwfwnWLgEXQcRRqNGIR6c7jMc6eWMBHhufQ1NrGWRMKWLh8K0fqW/jUr5Zz9RljaWt3eLskDI0wJNGEmihC+Yke6E/9bmBUl9cjO9tCpm3GJVpC+aUe8Hn5znkn8ur2gxyqayYr4OP/Pr4er8cozAmw50gDxXkZx7xPiUPiXUiJwjnXGIlr+rAKmGhm4+hIEJcDV4ZzA+fcMmBZWVnZvAHGItKr3n6pe8zIzw7wwPzTef29I8xbuvr9A5UunFpMfXMrmf64X5ku8r4+Vz2Z2QIzW2pml5vZk2b29YF+qJndD6wETjSzcjOb65xrBa4HngE2Ag8559aHed8LzGxRVVXVQEMUGbCjk98TC7OZNjKXL88aw1/W72Pt7mo27athzc5Dx32fltdKvAnlz5qPA5cBTzrnPmtmCwf6oc65K3pof4oBLIHViEJipa+yUSDNy00XTOaGT0xkzn+/xL6qRi6+YyVnjB9GdUMLwYy0QYpUJHyhJIqDzjnXJUE0RTMgkWSWl+mnJC+DEcF0Zk8ZwcLl2zhQ20ROuo81Ow8zfcyQWIcocoxQEsUt8P5f6wB/il44A6PJbIkHoUxKez3G184+gS+dPobzfvUCe6oauPiOFXyqdPgxcxia7JZY63OOwjm3CcDM8jtfL492UP2lM7Ml0aSneRmRm87UkXl859Mf4ZWtB1m7u5ptlbVU1Ax0fYhIZISz9GIxcGG0AhFJVqGOMK7/+ES+OHMM59/yIvurGzn3F89z/ccn0u4cHtNzGBI74SSKuH/EVKUnSXRDsvyMGZbJ8GCAgpx0fvaXTQR8HsZ0bkooEgvhbAoY9087q/QkiaC3DQiPSk/zctdVZdw7dwZm8O7+Wq77/evsr/5wOUpLaWUwJNWIQiTZnD2xgJNLctlb1cjfNu7nhXcrGZbtpzDn2FP3RKIlnETxvahFESEqPUki6mt04TGjJC+D++bO5PuPreXlLQc5WNd83J1qRaIh5NKTc26dmQXM7Eoz+zcz+4+jX9EMMBwqPUkyG5ufxX1zZ3JCfhb1TW3M/vULVFQ3fuiIVpWiJBrC3XDmcaAKWIMevBOJit5GGGYd514EM3xk+n2s2HqQQ/UtVNY0UaBylERJuIlipHNudt+XiUg0BXxe7ps7k3P/63neO1TPZ259kVsunxbrsCRJhZsoVpjZyc65tVGJZoA0RyHJqKcRhsdjjAimE0z3Ud/cxpfuepWi3AxK8tLfv0bPXEgkhDRHYWZrzext4CzgdTN7x8ze7tIeFzRHIako0+/jievP4qJpJew+0sCmfTUcrFVlWCIn1BHFnKhGISIDkhXw8ctLp/LmriPsOFjHhbe9zJ1fnh7rsCRJhHpw0c5oByIioempjGTWcZJept/L4bpmLr5jBSOHZJCf/cEkt0pR0h8xObhIRKInO+DjiW+exbRReWytrGPnwTpa29pjHZYksFDmKD4OXAV82Tk3B5ga3ZD6TyfciXTIzw5w39dmMjwYYF91E19bupqaxpZYhyUJKqkOLtIJd5JqeishpXk9jB2WRUaalxc3H+CSO1aSkeYhkOYdxAglGYQyokiYg4tE5FjDg+ncc80M9lY1sG5P9YdGFnqSW0IR8sFFXV7H7cFFInJ8Z03M59HrzsTrMTbuq+HptXtjHZIkkHC2GcfM7jGzvC6vh5jZ4siHJSL90dsW5uMLsplcHCTL7+Mbf3idu1/aPsjRSaIK98nsU5xzR46+cM4dNrNTIxyTiERJmtfDSSNyGJYd4P89uYERwQCjh35wKJKWz8rxhDWiADxmNuToCzMbSvjJRkRiyOMxbv/iR7nmzLHsq25iS0UtjS1tsQ5L4li4v+T/C3jFzB6i4yCjS4D/H/GoRCQiehoZeD3GTRdM5tmN+3nvUANX/+41Fn2lbJCjk0QRVqJwzi01s9V0PFvhgC845zZEJbJ+0KaAIuEpys0gzethzc7DXLpwJRlpXvy+DwoNKkUJhD+ZnQ7MBj5BR7I4r7MtLmhTQJHw5WcHWHz1aew6VM/6vdU0qAwl3YQ7R7EUmAzcCtwGlAL3RjooEYmOnlZFnT2xgAfmz6K93bFhTzVry7W7gXwg3DmKKc650i6vnzOzuCk9iUj/nTwyl8nFQTbtq+HyRSv5reYspFO4I4rXzez0oy/MbCawOrIhiUispKd5KS0KMnJIJlf/bhUH65rf/56e4k5d4SaK6XSccrfDzHYAK4HT4u0AIxHpP7/Pw0PXzuKUkblsqailorox1iFJjIVbetJ52SJJpKfVTLmZadw7dyazbn6W7Qfruf25LTjnMLNBjlDiQbjLY3WAkUiKyPB7mTg8m22VdfzimXcYEUxn9NCM97+vpbOpI6REYWZP9PZ959yFkQlHROKJx4zxBVlcMLWYJSt20NreTmtbOz5vuFVrSWShjihmAbuA+4FX6Xgqe1CY2eeAzwJB4G7n3F8H67NFUs3xRgdmxk0XlPK3DfvZfaSBBfe9zm1Xaou3VBLqnwUjgH8DptBxPsWngAPOueX92XbczBabWYWZrevWPtvM3jGzLWZ2I4Bz7jHn3DxgAXBZuJ8lIgNnZowcksGYYZk8u2k/X1n8Gq3tOl41VYSUKJxzbc65vzjnrgJOB7YAz5vZ9f383CV0mxg3My9wO3A+HQ/yXWFmXZ/Z+PfO74tIjIwIpvPry6bx+s7DbNxbQ0uXs7i1fDZ5hVxoNLOAmX0BuA+4jo6nsx/tz4c6514ADnVrngFscc5tc841Aw8AF1mHnwFPO+de78/niUjkXDSthLuuKqOxpY31e6rZdag+1iFJlIU6mb2UjrLTU8APnXPr+nhLf5TQMQ9yVDkwE/gm8Ekg18wmOOcWHu/NZjYfmA8wevToKIQnknp6WtF0zomFTBqRwzv7a7n4jhUsnTtjkCOTwRTqiOJLwETgBjoeuKvu/Koxs+rohQfOuVudc9Odcwt6ShKd1y1yzpU558oKCgqiGZKIADnpaZQW5WAGly5c+aGzuEGlqGQS6hyFxzmX0/kV7PKV45wLRiiW3cCoLq9HdraFzMwuMLNFVVXa0ExkMGT6fTy84AyGZQfYtK+Gw/XNfb9JEk48LYZeBUw0s3Fm5gcuB3p9fqM7bTMuMvhGDc3kjwtmkZHm5d39tTy8pjzWIUmEhTpH8bpz7qMDvabLtfcD5wD5ZlYO3OScu7tzFdUzgBdY7JxbH8r9utxXBxeJRElvT2DnZwc4qSjIu/tr+M4f3+JAbZO2/EgioT5wd1Ifm/4ZEPKf8c65K3pof4qOCfN+cc4tA5aVlZXN6+89RKR/vB7jxBE5jMjN4KdPb2JEMMDooZnvf19bfiSuUBPFpBCu0bFYIinOY8Ytl01jWJafJSt20NLmaGptI+Dzxjo0GYBQJ7N3hvAV88KkJrNFYs/j6djyY9SQDA7WNXPN71ZR3W1FlCSWcLcZj2sqPYkMnt5KSGZGcV4GaV4Pr20/xKULV5KR5sXv++BvU5WiEkc8rXoaMI0oROJLQU6AxVefxq5D9azfU019syrUiahficLMsjr3ZoorWh4rEn8+9pECHrx2Fg7Hhr3VrNh6INYhSZhCXR7roeO5hi8CpwFNQMDMDgB/Bu50zm2JWpQiEvd6KyFNKcllclGQTftruGrxa/z8klOOuUalqPgV6ojiOWA88D1ghHNulHOuEDgLeAX4mZl9KUoxikgSCKR5mVwUZPqYIfzLg2+x+0gDzrlYhyUhCHUy+5POuWOWLTjnDgGPAI+YWVpEI+sHPXAnEt98Xg/3fHUGNz6ylkff2E1TSxvNre0fmuSW+BPq8tgWADOb3v17Zjan6zWxpDkKkfgX8Hn55aVTKclLp7K2masWv0ZVvTYUjGfhLo/9rZl95eg242Z2BfBt4MmIRyYiCa2v5bMjh2SSnuZlzc7DfP6Ol8kJ+EhPi7s1MkL4q54uAZaa2SQzmwd8A/h05MMSkVSQnx3gvq/N5HBdM+v3VFPdEPPChBxHWInCObeNjtVPfwIuBj7tnIubhxb0HIVI4pkxbiiPfuNMfF5j074aHlz13jHXqBQVWyElCjNba2Zvd24M+DAwFBgHvNrHZoGDSnMUIolpbH4Wk4uCBDN8/Osja9l5sE4rouJIqHMUF9HHpn9mZk7/z4pID/p6PsLn9XDi8BxKi3NZsmIHDS3tVDW0kJsR8wWVKS/U0tNi4ELAdd0IENgLjDeze4CrohWkiKQGM+MHF05m3LBMqhta+PztL7OlovaY61SKGlyhjihmA18F7jezccARIJ2OA4b+CvzaOfdGdEIUkVRTGEwn3e+lorqJz9/+MkV56QzJ9Mc6rJQVUqJwzjUCvwF+0/lgXT7Q4Jw7Es3gwqUH7kQSR1+lqGB6GndddRrX3ruadburGTkkQ6fmxUiok9npZvZtM7sNuAaojLckAZrMFkk2JXkZ/PHaMxiW5af8cAML7ltDbVPrMdepFBVdoZae7gFagBeBzwCTgRuiFZSIyFEZfi/jC7LICvj4+8YKLrrtJbL8PjL8ejhvsIQ6mV3qnPuSc+5OOh66OzuKMYmIfIiZUZSbzr1zZ3CkvoV1e6o4VNcc67BSRqiJ4v3HJZ1zx477REQG6MFrZ/U5b3HG+HyWffMsMtK8bK6o5adPb6K1rf2Y61SKiqxQS09Tzay6838bkNH52uhYMhuMSnQiIt0U52VQWhRk56F6Fi7fypu7DtPS1k6aVzvQRkuoq55UDBSRuOHxGOPys/jX2ZP4/mNraWt3TCzMjnVYSUspWETiTihlKICLp4/k0W+ciceMDXtruHP5Vtrbj90gQqWogQl3m/G4pucoRFLPSUVBppQE2V5Zx81Pb2LVjkO0trXjUykqYpKqJ/UchUhq8nk8TCjM5gcXlLL83UrW7qk+7vMWoNFFfyRVohCR5BRKKcrMuPrMcfxxwRkAbNhTzV0vbtMutBGQVKUnEZFpo/I4uTjItgN1/PjPG3ll20GVogZIiUJEko7P62FiYTbnn1zET57aiGFMKMw67rVHy1ChTJ6nKiUKEUk4ofxSNzOuOXMc08cM4Z8XrmTD3hpu+8dmbSzYDxqLiUhSO2VkHlNKchmW5ec///oum/bV0Nx67NPc0jMlChFJej6PMb4gi59fcgq1Ta2s3V3Fc5sqjnutVkUdS4lCRFKCmXFp2SimFOfi93m4Zskqfrhs/XEf0JMPi/s5CjM7Afg+kOucuyTW8YhI/AlnIjrD72VyUZDJJbn87uUdZPq9TCjoefsPTXbHaERhZovNrMLM1nVrn21m75jZFjO7EcA5t805NzcWcYpIcvJ4Os7mXnx1Gc2t7azbU8XvX92pZy56EKvS0xI6zuF+n5l5gduB84FS4AozKx380EQkVXx80nBOLsklO+Dj+4+uY/69a2g5zrblqS4mpSfn3AtmNrZb8wxgi3NuG4CZPQBcBGwY3OhEJNGFUyby+zxMGpHDpyeP4Od/eQeHY7xKUR8ST5PZJcCuLq/LgRIzG2ZmC4FTzex7Pb3ZzOab2WozW11ZWRntWEUkiZgZXzv7BB697gy8HmPTvhp+tGwDjS1tsQ4tLsT9ZLZz7iCwIITrFgGLAMrKylRoFJGwTS7OZUpxLrsO1bP45e28vOUAfp+R6Y/7X5VRFU//+t3AqC6vR3a2hUzbjIvI8YRTJvJ6jLH5Wfz04lP47sNvc7C2iVFDM2hvd3g8xz7RnQqlqHgqPa0CJprZODPzA5cDT4RzA20zLiKRcu6kQp759tnkZabx3qEGrrzrFcoP18c6rJiI1fLY+4GVwIlmVm5mc51zrcD1wDPARuAh59z6MO97gZktqqqqinzQIpJyhmUHmFiYzbj8LNaWV3H+r1+ksqap12W0yfhkd6xWPV3RQ/tTwFMDuO8yYFlZWdm8/t5DRJJbuCUiM6MwJ8DSr87gfz30Jqt2HOZwfTMHa5sYlh2IUpTxJZ5KTwOmEYWIRMuooZk8MH8Wo4ZkcKS+hfN+/QJ/27A/1mENiqRKFJqjEJFo8nqM4rwMppQEKchJZ97S1WyrrKW1h/2ikqUMFU+rnkREBl1/Vitl+n3cO3cmtzz7Lrc/t5WqxlZWbj3IrPHDohBh7CXViEKlJxEZLH6fh++eN4nSohw8wBW/fYUfLdvQ6260iTrCSKpEodKTiAy2nPQ0ppTk8pVZY1j88nbW7qmitqk11mFFlEpPIiJd9KcU5fUYP7poCp8uHcFXl6xiw55qbvl78hy7mlQjChGRWDprYj4nlwQZmuXnV39/l/V7q2noZb+oRClFJVWi0ByFiMSaz+thQmE2t115Ko0t7azbXcV9ryT2WRdJVXrSA3ciEmn93cNpzinF3P3idrZW1vLvj61j+buVtLS1k+ZNvL/PkypRiIjEk+OddXFCfuKddZF4qU1EJIEcPevisevOxOfx8CX7+D8AAAnYSURBVM7+Gm5+emNCnaSXVCMKbTMuItHW37/2S4uDTCkOsvNQPXcu38ar2w7hnCM9zRvhCCMvqUYUeo5CROKZx2OMy8/i9is/ytbKWtbtruZgXXOP18fLqqikShQiIoPtwWtnhT3K+OwpRTz1rbNJ93vYUlHLTY+vo6k1fo9dTarSk4hIohg1NJPSoiC7DjVwz8qdvLHrCAZxWYrSiEJEJEY8ZowZlsmdX57O9gN1rNtTzeE4LEUlVaLQA3ciEmv9KUWdN3kEf/7m2aT7PLxbUcvNT2+kNY5WRSVVotBktogkqtHDMiktDlKYE+DO5du48rev0twaH8kiqRKFiEgi81jHqqhfXTaVtburWLu7iqqGlh6vH6xSlBKFiEiU9KcMBfD5U0fy+PVn4vMam/bV8Jvnt/R6zkW0adWTiEgc+sjwHKYU57LtQB0//8s7vL7zCK1t7fhisFeURhQiInHK6zEmFGTxH3NKef6dCtbtqaauh0ORolmG0ohCRGSQ9KcMZWZ89axxTB2Vy+WLXmHD3moef3M3F00riUKEx6dEISKSAKaPGcrJJbls3l/LDQ+8yVu7qmh3Ds8gnKCXVIlCmwKKSDJL83qYVJTD5OJcFr+8nZx0HxMLe962PFKSao5Cz1GISCLpz6oojxk/uHAyv7psKrVNrazbXc2GPdVRirDzM6N6dxERiYrPnzqSyUVBHI6L71jBoV62/hiopCo9iYikkqyAjynFuTjgzV1HKMnLoL3d4fFEdt5CIwoRkTjRn1KU3+fhgfmnk5/tZ/eRBta8dzjicWlEISKS4NLTvJyQn0VhToDTxg6N+P01ohARSQJmRk56WlTurRGFiEic6u/53JGmEYWIiPQq7kcUZpYF/AZoBp53zv0+xiGJiKSUmIwozGyxmVWY2bpu7bPN7B0z22JmN3Y2fwF42Dk3D7hw0IMVEUlxsRpRLAFuA5YebTAzL3A78CmgHFhlZk8AI4G1nZe1DW6YIiLxI1ZzFjEZUTjnXgAOdWueAWxxzm1zzjUDDwAX0ZE0RnZeozkVEZFBFk+/eEuAXV1el3e2/Qm42MzuAJb19GYzm29mq81sdWVlZXQjFRFJIXE/me2cqwOuCeG6RcAigLKystidGSgiMkgGqxQVTyOK3cCoLq9HdraFzMwuMLNFVVVVEQ1MRCSVxVOiWAVMNLNxZuYHLgeeCOcG2mZcRCTyYlJ6MrP7gXOAfDMrB25yzt1tZtcDzwBeYLFzbn2Y99XBRSKSkqJZhjLnkq+cX1ZW5lavXh3rMEREEoqZrXHOlXVvj6fS04BpjkJEJPKSKlFojkJEJPKSKlGIiEjkJVWiUOlJRCTykipRqPQkIhJ5SZUoREQk8pIqUaj0JCISeUmVKFR6EhGJvKR84M7MKoGdnS9zge5DjO5tXV/nAweiFNrxYonU+/q6pqfvh9I/x2tLhj7r6zr1WfjXqc/Cvy6e+myMc67gmFbnXFJ/AYv6auv6Glg9mLFE6n19XdPT90Ppn2Tts76uU5+pz9RnHV9JVXrqwfHOsOje1uM5FxHW388J5X19XdPT90Ppn+O1JUOf9XWd+iz869Rn4V8X932WlKWngTCz1e44e51Iz9Rn4VOfhU99Fr5I9VkqjCjCtSjWASQg9Vn41GfhU5+FLyJ9phGFiIj0SiMKERHplRKFiIj0SolCRER6pUQRBjP7nJn91sweNLNPxzqeRGBmJ5jZ3Wb2cKxjiWdmlmVm93T+fH0x1vEkAv1sha+/v8NSJlGY2WIzqzCzdd3aZ5vZO2a2xcxu7O0ezrnHnHPzgAXAZdGMNx5EqM+2OefmRjfS+BRm/30BeLjz5+vCQQ82ToTTZ6n8s9VVmH3Wr99hKZMogCXA7K4NZuYFbgfOB0qBK8ys1MxONrMnu30Vdnnrv3e+L9ktIXJ9loqWEGL/ASOBXZ2XtQ1ijPFmCaH3mXRYQvh9FtbvMN/AY0wMzrkXzGxst+YZwBbn3DYAM3sAuMg5dzMwp/s9zMyAnwJPO+dej27EsReJPktl4fQfUE5HsniT1PoD7kPC7LMNgxtdfAqnz8xsI/34HZayP5CdSvjgrzjo+I+1pJfrvwl8ErjEzBZEM7A4FlafmdkwM1sInGpm34t2cAmgp/77E3Cxmd3B4G1bkSiO22f62epVTz9n/fodljIjikhwzt0K3BrrOBKJc+4gHfVQ6YVzrg64JtZxJBL9bIWvv7/DUn1EsRsY1eX1yM426Zn6bGDUf+FTn4Uvon2W6oliFTDRzMaZmR+4HHgixjHFO/XZwKj/wqc+C19E+yxlEoWZ3Q+sBE40s3Izm+ucawWuB54BNgIPOefWxzLOeKI+Gxj1X/jUZ+EbjD7TpoAiItKrlBlRiIhI/yhRiIhIr5QoRESkV0oUIiLSKyUKERHplRKFiIj0SolCRER6pUQhIiK9UqIQiWM6xU3igRKFpDwzG9v9dLDjfL/BzN7s0natmTkzO6dL23WdbZ+KVGw9neJmZp8ws3u7tWWY2Ztm1mxm+ZGKQUTbjIuEZqtzblqX1ycDbwGTgOfNLBP4GlAJvB3uzc3sZODmbs1fdc5V9PCWqcAbXRuccw3ANDPbEe7ni/RGIwqRLjpLPW+Y2Wl9XHoK8AAdiQLgW8AfgXbn3P7Oe91vHYfYv2ZmO83ss53txWb2SOfnbDKzGc65tc65Od2+ekoS0JEoRpjZC2b2npl9cmD/cpGeKVGIdDKzE4FHgKudc6v6uPwk4CFgkpnl0XFQ/QqgawlrKrDNOTcD+CJwk5n5gKeB3znnTgU+Ssfunj3F1NMpblOBSufcx4AbOu8vEhUqPYl0KAAeB77gnOv1LGYzGwUcdM5tM7NC4LvAfwMfAdZ2XpPeec8fdr5tAzAE+Byw0Tn3JIBzrr63zzreKW5mlgYMA/6rsykNOBLaP1MkfBpRiHSoAt4Dzgrh2pPpTAhADTAbuKez/ej8xBRgs3OusfP1R+mY05gGvDLAWE8C3nLOtXe+PoUPj2REIkqJQqRDM/B54CtmdmUf157CB4niF8D1zrk2PpxApgKjzSzdzLLoGFn8CtgHTD56IzMr6EesU+lIOl3jCXsCXSRUShQinZxzdcAc4F/M7MJeLj2Zzr/gnXNPOudWdraXAkdPEZsK/Al4lY5jKe9wzr0MLAGGm9n6zuW2s/oR6lQ+nBimoBGFRJFOuBPpg5mNBZ50zk0J4z3LgfnOuXeiFVcvn70DKHPOHRjsz5bkpBGFSN/agNyuD9yFYDywOUrxHNfRB+7omNxu7+t6kVBpRCEiIr3SiEJERHqlRCEiIr1SohARkV4pUYiISK+UKEREpFdKFCIi0islChER6ZUShYiI9EqJQkREevU/sCoXxfrTYkIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.errorbar(hm_fid.k_hm, hm_fid.power_auto_tracer, yerr=pkerr)\n", "\n", "plt.xscale(\"log\")\n", "plt.yscale(\"log\")\n", "\n", "plt.xlabel(\"k [$Mpc^{-1} h$]\")\n", "plt.ylabel(r\"$\\rm P(k) \\ [{\\rm Mpc^3}h^{-3}]$\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And construct a simple Gaussian likelihood function with flat prior:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def autopower(theta, k):\n", " hm.update(hod_params=theta)\n", " pk = scipy.interpolate.interp1d(hm.k_hm, hm.power_auto_tracer)\n", " return pk(k)\n", "\n", "\n", "def lnprior_flat(params):\n", " if (\n", " params[0] > 9.00\n", " and params[0] < 13.00\n", " and params[1] < 16.00\n", " and params[1] > 9.00\n", " and params[2] < 4\n", " and params[2] > 0\n", " ):\n", " return 0.0\n", " else:\n", " return -np.inf\n", "\n", "\n", "def log_likelihood_flat(params, x, y, yerr):\n", " theta = {\"M_min\": params[0], \"M_1\": params[1], \"alpha\": params[2]}\n", " yfit = autopower(theta, x)\n", " lp = lnprior_flat(params)\n", " return lp - 0.5 * np.sum(((y - yfit) / yerr) ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test against the fiducial values:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/ztchen/work/gitproject/halomod/src/halomod/tools.py:534: RuntimeWarning: divide by zero encountered in true_divide\n", " norm = self._spl(match_x) / fnc(match_x)\n" ] } ], "source": [ "pars = [11.6222, 12.851, 1.049]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just for a taste of it, let's run the mcmc with 100 walkers and 1000 steps:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [20:45<00:00, 1.25s/it]\n" ] } ], "source": [ "pars = np.array([11.6222, 12.851, 1.049])\n", "rng = np.random.default_rng()\n", "ndim, nwalkers = 3, 100\n", "pos = [pars + 1e-2 * rng.uniform(0, 1, ndim) * pars for i in range(nwalkers)]\n", "with Pool() as pool:\n", " sampler = emcee.EnsembleSampler(\n", " nwalkers,\n", " ndim,\n", " log_likelihood_flat,\n", " args=(hm_fid.k_hm, hm_fid.power_auto_tracer, pkerr),\n", " pool=pool,\n", " )\n", " # start = time.time()\n", " sampler.run_mcmc(pos, 1000, progress=True)\n", " # end = time.time()\n", " # multi_time = end - start\n", " # print(\"Multiprocessing took {0:.1f} seconds\".format(multi_time))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Getting the chains and extracting posterior:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "samples = sampler.get_chain().reshape((-1, 3))" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "mmin, m1, alpha = (\n", " (v[1], v[2] - v[1], v[1] - v[0]) for v in zip(*np.percentile((samples), [16, 50, 84], axis=0))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 1-d confidence interval:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(11.569923415144125, 0.20428071115065016, 0.22297037607466308)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the posterior distribution as a corner plot:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAHvCAYAAACboJyJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3iUVf7+8fdJryQhIYQSElqkSS8CAgoCCnYQWEXWtvbGz0VW+e7aUFdFUXQVWF0VUQQVcAUUJDaUIr23AAkJISG9J5Nkzu+PwKwoVQMZyP26rlyGmTxnzjObzT3nec75HGOtRURERNyTR013QERERI5PQS0iIuLGFNQiIiJuTEEtIiLixhTUIiIibkxBLSIi4sa8aroDxxIREWFjY2Nruhtyjlq7dm2mtbZeTfdDRKQ6uGVQx8bGsmbNmpruhpyjjDFJNd0HEZHqokvfIiIibkxBLSIi4sYU1CIiIm5MQS0iIuLGFNQiIiJuTEEtIiLixhTUIiIibkxBLSIi4sYU1CIiIm5MQS0iIuLGFNQiIiJuTEFdi8TGxmKMOe6XNkIREXE/brkph5wZSUlJWGuP+7wx5iz2RkREToVG1OeZE42aY2Jiarp7IiJymjSiPs+cbNQsIiLnFo2oRURE3JiCWkRExI0pqM9Bug8tIlJ76B71OUj3oUVEag+NqEVERNyYglpERMSNKahFRETcmILaTWnCmIiIgCaTuS1NGBMREdCIWkRExK0pqEVERNyYglpERMSNKahFRETcmIJaRETEjSmoa5CWYImIyMloeVYN0hIsERE5GY2oRURE3JiCWkRExI0pqEVERNyYglpERMSNKahFRETcmIJaRETEjSmoRURE3JiCWkRExI0pqMUlJibmuJXSYmNja7p7IiK1kiqTiUtiYuJxnzPGnL2OiIiIi0bUZ9CJanmrnreIiJwKjajPINXyFhGRP0ojahERETemoBYREXFjCmoRERE3pqAWERFxYwpqERERN6agFhERcWMKahERETemoBYREXFjCmoRERE3pqAWERFxYwrqP+hE9bxVy1tERP4o1fr+g1TPW0REziSNqEVERNyYglpERMSNKahFRETcmIJaRETEjSmoRURE3JiCWkRExI0pqEVERNyYglpERMSNKahFRETcmIJaRETEjSmoRURE3JiCWkRExI0pqEVERNyYglpOSUxMzHG384yNja3p7omInLe0zaWcksTExOM+Z4w5ex0REallNKIWERFxYwpqERERN6agFhERcWMKahERETemoBYREXFjCmoRERE3pqAWERFxYwpqERERN6agFhERcWMKahERETemoBYREXFjCmoRERE3pqAWERFxYwrqUxAbG3vcLR5jYmJqunsiInIe0zaXpyApKQlrbU13Q0REaiGNqEVERNyYglpERMSNKahFRETcmIJaRETEjSmoRURE3JiCWkRExI0pqEVERNyYglpERMSNKajlD4uJiTlu5bbY2Nia7p6IyDlNlcnkD0tMTDzuc8aYs9cREZHzkEbUIiIibkxBLSIi4sYU1CIiIm5MQS0iIuLGFNQiIiJuTEEtIiLixhTUIiIibkxBLSIi4sYU1CIiIm5MQS0iIuLGFNSHxcbGHrdedUxMTE13T0REainV+j4sKSkJa21Nd0NEROQoGlGLiIi4MQW1iIiIG1NQi4iIuDEFtYiIiBtTUIuIiLgxBbWIiIgbU1DLGRUTE3Pc9emxsbE13T0REbenddRyRiUmJh73OWPM2euIiMg5SiNqERERN6agFhERcWMKahERETemoBYREXFjCmoRERE3pqAWERFxYwpqERERN6agFhERcWMKahERETemoBYREXFjCmoRERE3pqAWERFxY7UqqGNjY4+7k1NMTExNd6/WOdHOWtpdS0SkSq3aPSspKQlrbU13Qw470c5aoN21RESglo2oRUREzjUKahERETemoBYREXFjCmoRERE3pqAWERFxYwpqERERN6agFhERcWPnVVCfqKCJipqce05UEEXFUESktjivCp6ooMn55UQFUVQMRURqi/NqRC0iInK+UVCLiIi4sXMuqLWxhoiI1Cbn3D1q3YcW+N9EMxGR851xx9AzxmQASSf5sQgg8yx0pza+Zk29bnW9Zoy1tl41tCMiUuPcMqhPhTFmjbW2q17z/HndmjpXERF3ds7doxYREalNFNQiIiJu7FwO6ul6zfPudWvqXEVE3NY5e49aRESkNjiXR9QiIiLnPbdcRx0REWG16YL8HhUVFWzcuDHPWht6rOf1uyV/xNq1azO19E/ONrcM6tjYWNasWVPT3ZAadKJbMtba3xQ7ycrKYt68eTRq1IihQ4fmHO9Y/W7JH2GMOVl9B5Fq55ZBLXKq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33yTVq1a8cQTT3D11Vdzww03sGLFCtc96UWLFtGqVSstv5ITrpMGrZUWOVNO+zqmtTYT2ERVZbJhCumzLzU1leuuu449e/bw7rvvsnLlSiZPnsyNN954ym188cUXvPHGG3Tq1Imnn34aT09PrrzyShYtWuQK6W+++YZWrVqdwTORc8mRddLH+9J2lCJnxmkHtTEmjKrtKwdZazdXf5fk10pKSli1ahUlJSXs27ePG264gcTERKZNm8Ybb7zBZ599xuOPP+6qIHYi1lqWLVvGO++8Q48ePfi///s/KisreeKJJ/juu+/w9vamSZMmLFmyhNjY2DN/ciIickKnXULUWptjjLnKWlt6Jjokv7Vp0yZ+/PFHZsyYwSeffILD4eCll17iySef5MCBA0ydOpW1a9eycOHCE7ZTWlrKM888w+rVq2nevDkPPfQQpaWl/OMf/2DPnj14enoSFxdHkyZNKCkpOUtnJyIiJ/K7pvAqpM+uVq1asXTpUt5++23q1q3LM888w+OPP05BQQHz5s0jPz+ff//739xzzz0nbGf16tVs2rSJ22+/nZdffhlrLRMmTGDv3r0AtG3blqioKEaNGkVcXNzZODURETkJ7Unohqy1FBcX4+PjQ1paGo8++iiLFy9m0KBBXHrppYwdO5bWrVszc+ZMEhISeOyxxxg0aBBPPvkkb7311nHbDQ0N5cUXX6R+/frk5uby97//neTkZKy1NG/enKlTpxIaGkrTpk3x9vY+i2csIiLHo6CuISdagrVjxw727duHt7c3r7/+OgsWLOC2226jpKSExx57jEaNGtGmTRvGjRvH999/T3BwMCEhIYwdO/aEr9muXTuCgoL4+OOPmT9/PmVlZTidTi644AJuvvlmIiIiaNasWXWfqoiI/AGqXuEGfjlZDODgwYOsXLmSSZMmsWDBAh555BG2b9/OrFmzuO+++4iKimLDhg3Ex8fj6elJbGws+/fvZ8+ePdx4443s2bOHAQMGAHDTTTeRkJDAvn376Nu3L/feey8ffvghMTExVFZW0rt3b3788UdGjhzpKohyrC8REakZGlG7gU2bNrFu3ToAevToQXZ2NsuWLeP7779n7NixfPrpp6SlpfHaa69x/fXXc/HFF5OUlERgYCAXXHDBUZepCwsLGTp0KAkJCUyaNInhw4fz7rvv8sYbb5CVlUXbtm3x8vJi27ZtXHHFFcyZM4fAwEDq1q2rQBYRcUMK6rOotLSUXbt20axZMwoLC4mIiMDT05P27dsD0L59ewoLC3n11VdZsWIF48aN4/3336e8vJzZs2fTpUsX/v3vf5OUlERISAgtW7bE09PT1X5BQQEbNmzAz8+P2bNnk5iYSLdu3cjIyKBdu3Z4eHiwdetWevbsyTPPPMMdd9yhcBYRcXMK6rNo165dbNmyhczMTEJDQ6moqMDLy4uIiAjatGnDokWLmDJlCitXruRvf/sbb7/9NgCffPIJF1xwAQDLli0DICws7KiQzs3NZffu3QQEBPDll1/y8ccfM2XKFHr16sVNN93Ea6+9Rrt27bj77rsZPHgwrVu3VkiLiJwDFNRn0ZElT40bN2bXrl04HA4OHTqE0+lk8eLFvPPOO6xcuZLHHnuMqVOn4unpyezZs2nRooWrjX/9619cdNFFJCYmUlZWRnR0NDk5OSQkJODv789ll13G9OnTee+997jlllvo2LEjY8eOpV+/fjRr1ozY2Fg6dOhAQEBATb0NIiJyGhTUZ5Gfnx/t27dn9+7dpKenExISQlRUFHv37uXf//43q1ev5p///CfPP/883t7ezJkz5zezsIODg2nZsiXJyckcPHiQgwcPAhAUFETLli1Zv349SUlJPPDAAzRv3twV0jfffDPl5eVce+21BAYG1sTpi5y2mJiY4175iYmJUdlSqRUU1GfQsZZgOZ1OfH19CQwMJDc3l+XLl/Paa6+xfft2/va3v/Hcc89RXl7O8OHD+fLLLykrK2PHjh20adPGNWmsuLiYJk2a4OvrS0pKCsHBwTRr1oy9e/eSl5fHhAkTKC8v5+GHH6Zfv36MGjWKrl27Ur9+fcLCws722yDyu50oiHXrRmoLBfVZVlRURGlpKZ6enrz77rt8++23JCcnM2HCBF577TUCAgLo3bs3ZWVlJCUlsXTpUjIyMti2bRv9+vXDGMNVV13F448/DlR9GCgoKODGG28kPz+fF154gc2bNzNz5kxatmxJu3btaN68Oe3atdNSKxGRc5DWUdcAp9PJggULWLRoEenp6Tz55JNMnjyZwMBAZs+eTXBwMA6Hg6VLl5KZmenaXnDjxo2/aSsnJ4drr72WFStW8MorrzB//nxmzpzJRRddxFNPPcUVV1zBxRdfrICWUxIbG3vctfTaxlKkZpyREbUxxsda6zgTbZ/r/P39WbJkCTNmzMBay+OPP87EiROpW7cuH3/8MdHR0ZSXl/P999+TmZlJv379aNKkCV5eXmzcuJGQkBDq168PQHJyMjfccAP79u3jxRdfZMqUKaSmptKxY0cmT55MeHg4MTExKgcqp+zIVpYi4j6qfURtjLkS+Ovh7TDlF/Ly8njqqad45pln8Pb25tlnn+Xpp5+mYcOGfPbZZ0RHRwOQnp5ORkYG9erVo1GjRhhjXMuzdu7cCcDu3bu5/PLLSU1N5ZVXXuGf//wnBQUF3Hnnnbz99tt07dqVFi1aKKRFRM5x1TqiNsb0B14D7rXW5vzqOWNP8FHdGHMncCdAkyZNqrNbZ1VxcTGbNm2iffv2+Pv7ux7/+eefGT16NNZarLW8/PLLPPjgg0RERDBr1iwiIyNdP9uoUSM6duzIhg0bWLRoEe3atWPVqlUEBATQs2dPDh06xBVXXIExhjfeeINHHnkET09POnTowCWXXEKnTp10qVtE5DxR3SPqy4GXrLWLjTH1jDEdjDGtAay11pwgPay10621Xa21XevVq1fN3Tp7Nm3axNq1a9m0aRNFRUXEx8ezZcsW/vKXvxAWFkZqaiozZsxgwoQJVFRUMGPGjKNCGqpms3bo0IHLLruMoqIili1bhq+vL1dccQVlZWXMmjULX19fXnrpJf7f//t/eHp60rFjR7p3707Hjh0V0iIi55HqvkddABw6/P3nQCpQYYw5YK195EQj6vPFL8uBrly5kiVLllBYWEiDBg1YunQps2bN4umnnyY1NZVZs2bRvHnz47bVqFEjrrrqKhwOB35+fuTl5fHNN98QFBTEI488wt13301UVBTdunWjW7duDB06lLp1656tUxURkbOguoN6M/CiMWYI8Ja19gNjTAdgnDGmh7V2VTW/Xo379WcPf39/evToAUDDhg1p2LAhCxYsID4+nkmTJvHOO+/w888/c/PNN3PgwAEOHDjwmzYHDhzIiBEjjnps0aJF3HzzzcTFxXHNNdfwyCOP0KNHDy6//HIuuOACLrnkEiIjI7UES0TkPFOtQW2tnW+MiQL+DsQffmyjMcYCQdX5Wu7K6XRSVFREcXExiYmJfPXVV8THx/Piiy+yadMmlixZwnPPPXfUJK+cnBz27NlDly5djhmyc+bM4S9/+QsdOnSgTZs2PP/889xwww20bNmSu+66yxXQIiJy/qmWoDbGeFhrnYf/OQuIBiYaY/YDTYFWwJ7qeC135nA42LJlCykpKaxbt441a9awePFinn/+eTIyMpgxYwYPPPAAt912Gx988AEA+fn5TJkyhczMTBwOB7169XK153Q6efHFF3n22We56KKL8Pf3Z+bMmYSHh7NixQruu+8+hbSIyHnudwW1MaYzEAA4rLU/W2udR2Z1W2vzgAnGmM3ASCAcuM1am1htvXZDDoeDn376ibVr17Js2TJ++OEH8vLymDhxIt7e3rz00kuMGDHCVVHsiCVLlpCZmQnAggULXEHtdDq5+9ev8nMAACAASURBVO67+eijj7j++uvZt28fP//8M1FRUXTu3JkRI0bQs2dPhbSIyHnutIP68DrpZ6i6H+1njIm31k47Mqv7yIQxa+3HxphPqr51jbbPWykpKSQnJ/Ptt9/yww8/UFRUxMMPP0yHDh24/vrrufTSS5k8efJvgrVv376sX7+e/Px8Bg8eDFTd9x47diwfffQR48aN47vvvmPLli20aNGCIUOGcMstt9CmTZujtrkUEZHz02kFtTGmE/AccPPhe883AK5rtUdC2hgzGPjeWltanZ11Vzk5OcyfP5+5c+eyevVqKisrGTZsGKNHj2bIkCE0atSIt95665jBGhkZyRNPPIGnpyeenp5Ya5k9ezZLlizhwQcfZNWqVaxbt46oqCiuvvpq+vfvT2hoqEJaRKSWON0RtT/wprX2SNHp9VTN6I4GUn6x/KonsBNIrJZe1jCn00lxcTF+fn6UlpbidDpZs2YNHTt2JC0tjblz5/LZZ5+xbds2/Pz8aNGiBVOnTmXQoEEUFhYyZ84cQkNDj9u+j4+P6/tFixaxZMkS7rrrLpKSkvjhhx9o0KABI0aMoHnz5vj6+p6wLREROb+cUlAbY+KstbustcuNMbsPP+ZJ1TrpdCDv8KXvltba3dbaJ89cl8++4uJi8vPzyc/Pp6ioiK1bt/Ltt9+yZ88eHA4H5eXlxMXFkZmZSXl5Oe+//z4PP/ww69evZ+LEiXh6erJ79+6j2szPz//NqDg+Pp6vvvqK3r1743A4+Pzzz4mMjOSqq64iMDCQmJgYOnbsiIeH9lIREaktThrUh+9JzzHG/NdaO8pam3F4lnelMab0SBvGmJuBEcaYMb8uH3quO1IKtKKiguzsbA4dOoSXlxfZ2dmUlpaSlJTEqlWrKCgoYP78+Xz11Vd8+OGHjBkzhkGDBh2zzSuvvJLWrVu7/v3WW2+xcOFCbrjhBmJiYpg0aRIAgwcPJikpidzcXPr06eMaTWsSmYhI7XDCoDbGBAL3Aw8DvYwxM621ow/P8vakqgRpIfAK0BE470Iaqi59FxYWEhQUxMaNG9m7dy/WWpKTk8nJyWHFihXk5OQwb948CgsLefzxxxk8eDC33nrrSdvOzs5m0qRJvPHGG1x55ZV07tyZxx57DG9vb66++moiIyPp2bMn0dHRRy3dEhGR2uGEQW2tLTLG3AbkA3OBqb8I60qg0hjjTdWEsuustTvPfJfPvqysLA4ePIjD4WD//v1s27aNkJAQCgoK2L59OxkZGcydO5fmzZvTrVs3mjZtyrRp00hKSjphu+vWrePaa68lLy+PP//5z/Tp04e//OUvDB06FICuXbvSvn17+vfvj6+v79k4VakFjuxvfizac1rE/Zz00re1NvXwt4XGmLuA6UfC2hjTEtgGPH6+hjRAeHg4DoeDvLw8oqKiCA4OprCwkO+++468vDw++eQTunbtyptvvklGRgYffvghderUOWGb+/fv55577qFOnTp8+eWXFBUVMXToULp3786+ffto0aIFo0aNonHjxprhLdVKe06LnFtOa9a3tTbrcFi/ZIzZdfjhPtba9OrvWs2pqKggMzOTiIgIHA4H69evp7S0lO3bt7Np0yZSU1PZs2cPJSUlDBs2jAEDBlBWVsZbb71Fz5496dq16wnbz8zM5KGHHsJay7x581yXuRs0aEBJSQmdOnXi2muvJSIiQiEtIlLLnXbBE2ttpjFmE3AFMPB8C2moCtLU1FQcDgfff/89S5cuxVpLTk4OmzdvJjMzk169epGXl8czzzwDwIcffsiBAwd49dVXT9h2YWEhDz30EDk5OSxatIi6desycOBAysvLiYqKom3btrRt25bOnTvj5+d3Nk5XRETc2O+pTBYGDAEGWWs3V3+Xzr5fXwYMDw8nPz+f//73v6xfv56MjAxKS0spLi4mICCA0NBQvv76a1555RUqKyvZv38/kyZNolOnTrRt25b09KrPLrm5uUe1W1ZWxqOPPsrevXt54YUXuOCCC7j66qtJSUkhJiaGa6+9lkOHDuHv709ubi6RkZEEBgaetfdBRETcz+8ZUecYY646n6uOeXh4sHnzZjZs2EBaWhre3t6kpaWRn5+P0+mksrKSTp06ceedd3Lw4EE++ugj0tLSmDRpEgEBAa52LrjgAurXrw9AZWUlt956Kxs2bGD69Olcd9113HLLLaxbtw5PT0+SkpLYuHEjHTt2pHXr1hQXF+Pl5aVlWCIitdzvqpxxPoc0QElJCXFxcbRt25Zhw4YRGxtLfn4+ULWcKj09nddeew1PT0/Kysp488036datG7179z5me+vWrWPkyJF88cUXPPfccwwfPpyxY8eycOFCPDw8XPehv/nmG/r06UPdunUpKCg45l7VIiJSu6jEFVWTx9LT06moqKC8vJwdO3Ywb948cnNzWb16NXv37gWqKpQVFBRwxx130K1bNwDmzZtHeno6Y8eO/c3oNzc3lxEjRjBgwADWrl3Lc889xz333MMLL7zAzJkz8fT0pGHDhlx22WV4eHiQl5fHhx9+SFxcHHFxcURHR5/190JERNxLtexHfa46Mru7oqKCQ4cOAVBQUMCcOXNYt24dZWVlFBUVudYwFxQUEB4ezvPPP+9q40id7uzs7KPazsjIYMyYMSQmJvLkk09y2223ERwczOeff84LL7xAREQEBQUFOBwO6tevT+vWrcnJySE6OhofHx+aN29+lt4FERFxZ7V6RJ2WlsamTZvIz88nJSWFvLw8HA4HwcHBREREuAqdlJWVYa3F19eXQYMGHTXB65prrqFt27ZMnDiRoqIiAA4cOMCIESNITk5m9uzZPPTQQwQHB7NlyxbuvfdeunXrRkxMDMYYfH19WblyJUFBQVx11VXcfvvtNfV2iIiIG6qVI+ojI2mHw0FJSQmbN2/mu+++Y8+ePeTk5LBt2zY2bdrEvn37AAgJCcHhcJCVlcWAAQOOasvT05Onn36aYcOG8frrrzNy5EhuuukmCgoKeOedd7jkkkuAqhH36NGjCQkJcZUj9fPzo169evj5+dG/f38efvhhgoODz/bbISIibqzWjKitta6vI+ukj6xdzsjIAKomkWVkZOBwOHA6nURERBAREcGFF17ouvzdu3dvSktLXV8FBQW0bt2a6667jqlTp3LppZdSUlLCu+++S5s2bbDWkpeXx6hRozh48CD16tVzrZ1+6KGHaNeuHT169GD06NEEBQW5+ijyR8TGxmKMOeaXyoSKnFtq5Yg6IiICp9OJn58fycnJ7Nmzh9LSUtd/y8rKKCwspLKyEoCUlBQaNWpEYGAgjRs3Pqqthg0b4ufnx4svvkh8fDz5+fksXryYuLg4rLVUVFQwfPhwNm7ciI+PD8nJyQDUq1ePt956i/fee48rrriCJk2aaCmWVJvaUCb0yO2jEz2fmJh49jokcobUyqB2Op2kpqZSUFDg2kP64MGD7N+/n7CwMNLT010hDVVroFesWMH9999/3Dbr1avH/v37qaysdC23ysjIYPjw4ezcuRNfX1+8vb0BaNmyJaNHj2bt2rXs27ePlJQU2rdvf2ZPWuQ8c7IQ1gdfOV/UuqCurKzk559/Zvny5UBVFbLw8HAKCgpITk4mIyOD4uLio47Jz8+nvLz8N/enj+VISKelpXHNNdewf/9+vL29XSEdHR3NTTfdRFRUFA888ADNmzdXqVARETmuWhXUZWVlLF++3LUkKyYmhg0bNpCamsqhQ4coLi7G4XBQXl5+1HEVFRUAJ90R64jMzEyuvfZaUlJS8PT0dIU0VI2y16xZw6JFi9ixYwceHh707Nmz+k5SRETOK7VmMhnArl27OHDgAAcOHCAhIQFrLQEBAWRkZLB7924KCwtxOBy/OS4sLAwfHx/mzJlz0tfIzc3luuuuIzExkaZNm7pCOjw8nKioKOrUqUPDhg3p3bs3LVu2ZPz48fj7+1f7uYqIyPmhVgV1XFwcHTp0wOFwsGbNGj744AMSEhLIy8tzjZqPxcvLi8GDB/Ppp58ede/61/Lz8xk2bBg7d+6kQYMGhIaGup7z8fHBx8eHuLg4vL29adu2Lf/617+45pprqvUcRUTk/HJeXfo+3ixXay3FxcV4e3sTERFBYGAgRUVFpKSkUFFRQUhICGVlZb+55H1EXFwc69atIy0tjfj4eNfaaACHw4G1lvnz5zNlyhR2795Ny5YtCQ8Pp06dOnh4VH0WSk9PJygoiKCgIPbu3UuDBg3o3r37UZfFRUREfq3ag9oYEwP4Wmt3/eIxY2torUhZWRk//vija1mUl5cXq1atIjw8nNDQUCIjI9m9e7dra8pj2b59OwUFBdSpU4e5c+dyxRVXAJCamsr06dP5z3/+w6FDh7jgggvw9/fn0KFDHDp0CA8PD3JyclwfDPz9/QkLC6OgoACAqKgozUwVEZETqtagNsYMByYAZcaY5cA6a+1Ma62tibAuKytjwYIFrFq1in379uHr60tgYCD5+flcfPHFXHjhhbz33nuUlpbi6en5m8vaXl5erkviHh4eOJ1O5s+fz6hRo3jvvfeYN28elZWVDBkyhB9++IGMjAxX7e9f6t+/PyUlJbRv3961bebw4cPx8jqvLmiIiMgZUG1JYYwJBO4B/gJsA/4EXGSMibDWvnqykDbG3AncCdCkSZNq6dOuXbtcNby7devGvn37KC8vp6SkhNDQUDZs2OAqDHGse8+/vm8dFBREWloaQ4cOJSQkhICAABo3bszKlSuPGdB16tShoKCA3Nxcnn76abZu3YqXlxddu3aloKCAyMjIajlPERE5f1XnZDIDeAOe1tpiYA6wGGhujBlxsoOttdOttV2ttV3r1atXLR2Ki4sjKyuLHTt2sG/fPkpKSsjNzcXHx4dVq1bx9ttvk5aWBnBKa5n9/Pxo3Lix67J5eHi4q7Tor3l6enLFFVcQEhLChRdeiNPppHfv3jz22GN07NhRW1iKiMgpqbYRtbW20BjzMTDOGDPeWrvHGPM9EA30oCq4zyqn04mnpyceHh40bNjQtXVkZmbmb2Zwl5aWnrQ9Y8xRxUtOJDg4GE9PT8LCwsjIyKB79+6uZViBgYGUlJTg5eXlmmwmIiJyLNWSEuZ/M6LmAZuAh4wxza21+cAHVF0C/8M7ATidTgoLC6moqKCwsBCn0+l6Lj8/n0WLFpGVlcWuXbvYunUrL730EhUVFVx44YX4+PjQs2dPmjVrhsPhwNvbm6ioqGoPyiMh3r17d+677z7atWuHl5eXa+QOVZt/5Ofn/6YCmoiIyK9V14jaANZae9AY8zlwNTDZGPMC0ISqS+IFf/RFiouLyc/PJyMjgy1bttCjRw/Xfd5ly5axbNkyDhw4gKenJ5s3byYjI8MVxuvWrcPDw4NBgwbh6+tLZGQkpaWlRwUoVG1pmZeX97v65+3tzVVXXYW3tzf33nuva8vKFStW8Morr/D6668DuEbWAQEBv/etECE2NpakpKRjPqcdskTOH78rqI0xnYEAwGGt/dla6zTGeFhrndbajcaYVOAQ8BhVIX63tTb7j3b2SLCtW7eOLVu2EBYW5grqPn36ANC2bVt27NhBvXr1yM7OZsiQIezdu5cvvviC0tJStmzZgr+/P06nk8DAQHx9fY/aWjI3N/c3r5uXl3fMx6FqdFxYWAjA8OHDufDCC+nfvz+tWrXC6XRy1113MWPGDO666y7XUixPT0+CgoL+6NshtVxt2CFLRH5HUBtjrgSeATYDfsaYeGvttMNhbWyVDGCaMeZDqsL8t3U5fwcPDw+CgoJo1aoVeXl5xMXFAVWXxD08PLj88suBqkBPSEjgsssuw9/fH4fDQfPmzcnIyMBa61qKtWfPHpxOJ0FBQWRnn9rniKCgIFcw/1pJSQnp6els3bqVFi1a4OPjQ//+/bnooos0ehYRkd/ltG7QGmM6Ac8Bt1hrxwCfAK2OPH9kCZYxZrAxxs9aW1hdIf1LERERXHrppURERAD/uyReUlKCh4cHaWlpJCUlkZCQAFRVD6usrMTDw4OMjAxSU1Pp0qUL/v7+lJeXHzd4j+VEI+GFCxeSmZmJv78/KSkpwP8+XGjSmIiI/B6nO6L2B9601m48/O/1VM3yjgZSfrFWuiewE0isll7+ypHwO+LIaPXIvd8WLVq4Jms9//zztGjRgl27dlFQUEB4eDgOh4OSkhJGjRrF559/jjGGrKysU5rc9et72r+2b98+/Pz8qF+//h84QxERkSqnFNTGmDhr7S5r7XJjzO7Dj3kCqUA6kHe4+lhLa+1ua+2TZ67LVZxOJ8XFxQQEBLiC+8jnhJSUFP7zn/+wadMmSkpKCA8Px8PDg8jISFq1asXixYvZuHEjPXr0oFu3buzfv99VYvR0+fj40KBBAyIjI8nOziY6OprMzEz27dtHmzZtXPtTi4iI/B4nvR57+J70hsNrpLHWZhyeOFYJlHI47I0xNwOvGGPCzmSHjzhyufvXo+Dy8nKmTp3Kd999R05ODnXr1sXf35+SkhKKiorYv38/27ZtIzs7m4SEBHJycti5c+dRbRyrtGf37t3p0KEDAQEBhIeHu9ZTl5eXc/DgQcLDw7n++uu55ZZbSElJwel0UlJSckbfAxEROf+dMKgPlwW9H3gYKDXGzAQ4PHHME/AECoFXgIeA8dbanDPb5SoBAQHUqVPnN5O0kpOT6dChA507d8bDw4M+ffrQv39/Wrduzfbt23nvvffw8PCgQ4cOhIWFsXXr1t/sQf3r0qFRUVF0796dgwcPUlxcTHFxMf369WP06NGuUfzWrVu55pprSEpKIjk52TW7XERE5I844aVva22RMeY2IB+YC0w1xsy01o4+PKKuNMZ4A72A66y1O0/U3qlyOp2umdzH6BNQVSUsMDDQ9Zi1lt27dzNjxgyGDBmCv78/eXl5zJkzhxEjRlBeXk5mZqarnb///e98/fXXpKenExISQnx8PMHBwRQVFR1VsSwyMpKhQ4fy/vvvk5ubi7e3N82bNyctLY2cnBzCw8MpLy/nySefpE2bNrRq1Qp/f3/69++vnbFEROQPO+k9amtt6uFvC40xdwHTj4S1MaYlVRtwPF5dIQ1QWVlJcXHxaa01Li4uZvr06fz44494e3szbtw4srKy6NChA8HBwRw8eJCysjJCQ0N5/PHH8fLyom7dugQFBeHv788FF1xARkYGnTp1orCwkJSUFBITE4mNjWXq1KmuWdxQNWEsPT2d8PBw+vbty4wZM+jYsaMrmENDQ+nRowe9evXi2WefpWHDhtX11oiISC1zWmuGrLVZwF1AuTFmF7AQeM1au606O+Xp6XnCdcfWWoqKilyj6wMHDjBx4kSaNWtG//79ueOOO9izZw8HDhygtLSU77//nuTkZOrUqcOwYcO46qqrXBt0REVF8eWXX7Ju3TpSU1MpLCykbt26rvvMe/bscW3AcURFRQXNmjUjOjqajh070qlTp6NGzw8++CC7du1i5syZvPvuu9X51oiISC1z2ot7rbWZVNXzrgMMs9amV3unPDxOuO44NzeXTZs2uaqFTZ8+nfnz57Nw4UKuueYaGjVqxL/+9S92797NzJkzSUlJITc3l86dO3P77bezZs0a/vvf/5KQkMBnn33G/v37KSwsJCYmhgYNGrB69WocDgchISH06tWLzMxMmjZtyoQJE2jYsCHt2rVj2rRpXHfddfz5z3/+Tf+mTJlCXFwco0eP5tZbb63ut0dERGqR31OZLAwYAgyy1m6u/i6dXFZWFocOHaJevXqEhYVx5513Ul5eTs+ePWnfvj0FBQU0a9aMLVu20LRpU/bs2UNxcTErVqygoqKCNm3a8PXXX7No0SL8/f2JiIigW7duXHbZZXz44YccOHAAqNrlavXq1RQWFrJ582aGDh3KTTfdxLfffsu3337LE088ccz+XXrppezYsQNA96lFROQPOe2gttbmGGOustaefF/IMyQmJgYPDw/Xns6NGjXi2Wefpbi4GF9fX7777jsCAwMZM2YMTZs2JTY2ljFjxlBSUsI//vEP/va3vxEfH09ubi65ubkUFBSQk5PDpk2bSE//3wWC1NRUfH19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f/55dDoder2eiRMn0rt3b+6++26KiooICQlBp9Nx7tw5tVGq1TUNDevQ4gw1KKkV66/9nJGRwb/+9S969uxJcXExTz75JD4+Pqxfv57Dhw9TXFxMYWGhmsv7559/pry8nNraWi5evEhaWhqlpaXk5eVha2vL2LFjGwTqODs7o9PpGuiQnp6upua8kp/a19eX3bt3M2vWLKqrq3n77beZOHEioLy8PTw8WLt2LU888QR9+/bFwcGBqqoq7OzskFKSlJSE0WgkKiqKixcvUlVVhYuLS4Pc3FqEd8siLy+PL774giFDhlBUVERQUBBvvPEGZWVlakrbjIwMtm7dil6vJy8vDx8fHxISEhoMN+t0ukvqZB16vf6K85rz8vKYPn06GzZsYMiQIRQWFuLi4kJycjJZWVno9XrKysooLy/H09NTq2saGs2AFmmoG/P++++zZcsWsrKyePnll/Hz82PZsmW8//77dOvWjYcffpiwsDAiIyPx9fUlPT2dnJwciouL1V6GTqfDycmJ3r174+/vf02ZKSkpVx0ev3jxIvPmzWPz5s307NmTpUuXXpLveM2aNWou5jq/eWJiIp6envTr148jR46QlJREdXU1wcHB6uIitra2Wu7kFsrSpUtZv349VVVVxMfH8+KLL1JZWUlUVBSdOnXCYDCwbds2pJRqzvutW7eqS0TeCt9//z1PPPEEeXl5CCGIjY3F29ubzZs3c+HCBfbt24derycsLEx1E2l54DU0rE+LNNR1c06dnJywsbHhiSeeIC0tTV1/ui6T0vnz59Hr9QwaNIjMzEw2b94MQGJiIkVFReTk5KiG2t7enszMTBYvXnxN+UajkdTUVAICAjh//vwlCUb++9//8txzz5Gfn8/cuXOZOXPmJVNpvvrqK37729/Sr18/Dh8+zIABA5g8eTIffPAB/v7+hIaG0rp1awoKCvD29qa6uppWrVpdknhFo/lTv7727t2b3bt3c+rUKdasWUN+fj6gRF6fPXuWixcvUlJSQr9+/fjuu+/48ssv1fXVbxYpJQsXLmTx4sV06NABGxsbWrduzYQJEzhw4ADx8fG4ubnRpk0b3N3db2g5TA0NDcvTIg21wWCguLiYiooKMjMzCQsL46WXXiIxMZHOnTsDig9PSklhYSHbt2/n7NmzfPjhhxiNRgICAggKCqJLly6UlZUxYsQIvvvu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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = corner.corner(samples);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Constraining derived parameters" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that `halomod` provides a large pool of tools to calculate various quantities of potential interest, making it easier to perform posterior analysis on some parameters derived from your choice of halo model. For example, let's rewrite the likelihood function to add a `blob` containing galaxy number density(`mean_tracer_den`) and linear galaxy bias(`bias_effective_tracer`):" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def autopower_blobs(theta, k):\n", " hm.update(hod_params=theta)\n", " pk = scipy.interpolate.interp1d(hm.k_hm, hm.power_auto_tracer)\n", " return pk(k), np.array([hm.mean_tracer_den, hm.bias_effective_tracer])\n", "\n", "\n", "def log_likelihood_flat(params, x, y, yerr):\n", " theta = {\"M_min\": params[0], \"M_1\": params[1], \"alpha\": params[2]}\n", " yfit, arr = autopower_blobs(theta, x)\n", " lp = lnprior_flat(params)\n", " return lp - 0.5 * np.sum(((y - yfit) / yerr) ** 2), arr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now the likelihood function also returns the blob:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0.0, array([0.01495764, 1.11274361]))\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/ztchen/work/gitproject/halomod/src/halomod/tools.py:534: RuntimeWarning: divide by zero encountered in true_divide\n", " norm = self._spl(match_x) / fnc(match_x)\n" ] } ], "source": [ "pars = [11.6222, 12.851, 1.049]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rerun the same fitting:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [20:52<00:00, 1.25s/it]\n" ] } ], "source": [ "pars = np.array([11.6222, 12.851, 1.049])\n", "\n", "rng = np.random.default_rng()\n", "\n", "ndim, nwalkers = 3, 100\n", "pos = [pars + 1e-2 * rng.uniform(0, 1, ndim) * pars for i in range(nwalkers)]\n", "with Pool() as pool:\n", " sampler = emcee.EnsembleSampler(\n", " nwalkers,\n", " ndim,\n", " log_likelihood_flat,\n", " args=(hm_fid.k_hm, hm_fid.power_auto_tracer, pkerr),\n", " pool=pool,\n", " )\n", " # start = time.time()\n", " sampler.run_mcmc(pos, 1000, progress=True)\n", " # end = time.time()\n", " # multi_time = end - start\n", " # print(\"Multiprocessing took {0:.1f} seconds\".format(multi_time))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extracting the blob:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "blob = sampler.get_blobs().reshape((-1, 2))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "ng, b0 = (\n", " (v[1], v[2] - v[1], v[1] - v[0]) for v in zip(*np.percentile((blob), [16, 50, 84], axis=0))\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 1$\\sigma$ confidence interval is:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0.01652902170349346, 0.018470496973996536, 0.006735292723657369)\n", "(1.112664171509334, 0.0038656722599357263, 0.003738854055712615)\n" ] } ], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 4 }