csiborgtools/notebooks/flow/flow_calibration.ipynb

1709 lines
1.7 MiB
Text
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calibrating the velocity field against observations "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The autoreload extension is already loaded. To reload it, use:\n",
" %reload_ext autoreload\n"
]
}
],
"source": [
"# Copyright (C) 2024 Richard Stiskalek\n",
"# This program is free software; you can redistribute it and/or modify it\n",
"# under the terms of the GNU General Public License as published by the\n",
"# Free Software Foundation; either version 3 of the License, or (at your\n",
"# option) any later version.\n",
"#\n",
"# This program is distributed in the hope that it will be useful, but\n",
"# WITHOUT ANY WARRANTY; without even the implied warranty of\n",
"# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\n",
"# Public License for more details.\n",
"#\n",
"# You should have received a copy of the GNU General Public License along\n",
"# with this program; if not, write to the Free Software Foundation, Inc.,\n",
"# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import jax\n",
"from jax import numpy as jnp\n",
2024-03-16 17:16:22 +00:00
"from numpyro.infer import MCMC, NUTS, init_to_median\n",
"import corner\n",
"from getdist import plots\n",
"from scipy.stats import multivariate_normal\n",
"\n",
"import csiborgtools\n",
"\n",
"from flow_calibration import *\n",
"\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
2024-03-16 17:16:22 +00:00
"%matplotlib inline\n",
"\n",
"paths = csiborgtools.read.Paths(**csiborgtools.paths_glamdring)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## LOS density & radial velocity plots "
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-06-27 14:51:05.432759: reading the catalogue,\n",
"2024-06-27 14:51:05.440889: reading the interpolated field,\n",
"2024-06-27 14:51:05.448475: calculating the radial velocity.\n",
"2024-06-27 14:51:05.457636: reading the catalogue,\n",
"2024-06-27 14:51:05.463423: reading the interpolated field,\n",
"2024-06-27 14:51:05.469637: calculating the radial velocity.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/mnt/users/rstiskalek/csiborgtools/csiborgtools/flow/flow_model.py:91: UserWarning: The number of radial steps is even. Skipping the first step at 0.0 because Simpson's rule requires an odd number of steps.\n",
" warn(f\"The number of radial steps is even. Skipping the first \"\n"
]
}
],
"source": [
"fpath = \"/mnt/extraspace/rstiskalek/catalogs/PV_compilation.hdf5\"\n",
"\n",
"loader_carrick = csiborgtools.flow.DataLoader(\"Carrick2015\", [0], \"LOSS\", fpath, paths, ksmooth=0, )\n",
"# loaders_csiborg2X = [csiborgtools.flow.DataLoader(\"csiborg2X\", i, \"LOSS\", fpath, paths, ksmooth=1, verbose=False) for i in range(20)]\n",
"# loaders_csiborg2 = [csiborgtools.flow.DataLoader(\"csiborg2_main\", i, \"LOSS\", fpath, paths, ksmooth=1, verbose=False) for i in range(20)]\n",
"\n",
"loader_CF4 = csiborgtools.flow.DataLoader(\"CF4gp\", [0], \"LOSS\", fpath, paths, ksmooth=0, )"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAKyCAYAAAApeT2AAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd1hU19aH35mhd0GqooAodrCBvcRuYqJJNN3E9GKaadf7pdyUG9OLidE0r2lGY0w0pphYYu8FuygIClIUEJBeZr4/toeBKEiZM439Ps88+8icOWcNDmd+Z+3fXktjMBgMSCQSiUQikUgkNobW0gFIJBKJRCKRSCRNQQpZiUQikUgkEolNIoWsRCKRSCQSicQmkUJWIpFIJBKJRGKTSCErkUgkEolEIrFJpJCVSCQSiUQikdgkUshKJBKJRCKRSGwSKWQlEolEIpFIJDaJg6UDsGX0ej3p6el4enqi0WgsHY5EIpFIJBKJVWEwGLhw4QIhISFotabPn0oh2wzS09MJDQ21dBgSiUQikUgkVk1qaipt27Y1+XGlkG0Gnp6egPjP8fLysnA0EolEIpFIJNZFQUEBoaGh1ZrJ1Egh2wwUO4GXl5cUshKJRCKRSCR1oJYFUy72kkgkEolEIpHYJFLISiQSiUQikUhsEilkJRKJRCKRSCQ2ifTISiQSiUQioaqqioqKCkuHIbExHB0d0el0Fju/FLISiUQikbRgDAYDmZmZ5OXlWToUiY3i4+NDUFCQRWrqSyErkUgkEkkLRhGxAQEBuLm5yQY/kgZjMBgoLi7m7NmzAAQHB5s9BilkJRKJRCJpoVRVVVWLWD8/P0uHI7FBXF1dATh79iwBAQFmtxnIxV4SiUQikbRQFE+sm5ubhSOR2DLK58cSHmspZCUSiUQiaeFIO4GkOVjy82MTQnb27Nn069cPT09PAgICmDRpEgkJCVd83dKlS+ncuTMuLi706NGD33//vdbzBoOBF198keDgYFxdXRk1ahQnTpxQ621IJBKJ1VBVqcegN1g6DIlEImkWNiFkN2zYwCOPPML27dtZvXo1FRUVjBkzhqKiojpfs3XrVm655Rbuuece9u3bx6RJk5g0aRKHDh2q3uett95izpw5zJ8/nx07duDu7s7YsWMpLS01x9uSSCQSi5CemMfnT2xk/qPr+eaFbaz4YB/rvjnKjl9Osm/1aQ5vOsOZ4+fRV+ktHapEYjWkpKSg0WiIj49v0P533XUXkyZNUjUmiY0I2VWrVnHXXXfRrVs3oqOjWbhwIadPn2bPnj11vubDDz9k3LhxPPPMM3Tp0oVXX32V3r178/HHHwMiG/vBBx/w/PPPc91119GzZ0++/vpr0tPTWb58uZnemUQikZgXvd7AxsXHqarUo68yUHCuhLRj5zm6JYPdv6ewdVki679LYPl7+/jfc1s4uD5NZm4lVktmZiaPPvooERERODs7ExoaysSJE1m7dq3JzxUaGkpGRgbdu3c3+bGvREVFBc899xw9evTA3d2dkJAQpk2bRnp6eq39cnNzue222/Dy8sLHx4d77rmHwsLC6udLS0u566676NGjBw4ODpcV2uvXr0ej0VzyyMzMVPttNgmbrFqQn58PgK+vb537bNu2jZkzZ9b62dixY6tFanJyMpmZmYwaNar6eW9vb+Li4ti2bRs333yz6QOXSCQSC3NsWwY5aYU4uTpw/dO9KSuu5EJOCQU5pRQXlFNeUklZSSVZJwsoLaxg4+LjJO07x1V3dMartaulw5dIqklJSWHQoEH4+Pjw9ttv06NHDyoqKvjzzz955JFHOHbsWKOPWVVVhUajQautnecrLy/HycmJoKAgU4V/Cf/5z39ISUlh4cKFlzxXXFzM3r17eeGFF4iOjub8+fM8/vjjXHvttezevbt6v9tuu42MjIzq2evp06dz//33s2jRour35+rqymOPPcayZcvqjSchIQEvL6/qfwcEBJjmjZoYm8jI1kSv1/PEE08waNCgeu+KMjMzCQwMrPWzwMDA6jsKZaxvn39SVlZGQUFBrYdEIpHYCuWllWxfcRKAfleH4dfGg5COPkT1D6bf1eEMuyWK0Xd345pHopn+1iCG3NQJByctZxLOs/jVnRzedAaDQWZnJdbBww8/jEajYefOndxwww106tSJbt26MXPmTLZv3w7Ae++9V53FDA0N5eGHH66VoVy4cCE+Pj788ssvdO3aFWdnZ06fPk1YWBivvvoq06ZNw8vLi/vvv/+y1oLDhw9zzTXX4OXlhaenJ0OGDCEpKemy8e7atQt/f3/efPPNRr9Xb29vVq9ezdSpU4mKiqJ///58/PHH7Nmzh9OnTwNw9OhRVq1axRdffEFcXByDBw/mo48+YvHixdWZW3d3d+bNm8d99913RVEeEBBAUFBQ9eOf4t5asM6o6uGRRx7h0KFDLF682Oznnj17Nt7e3tWP0NBQs8cgkUgkTWXvqlOUFJTj7e9Kj+Ft691Xq9PSc0Rbbno+luAO3lSUVbH+uwR+n3eQivIqM0UsMTsGAxQVWebRiJuk3NxcVq1axSOPPIK7u/slz/v4+ACg1WqZM2cOhw8f5quvvmLdunU8++yztfYtLi7mzTff5IsvvuDw4cPVmcd33nmH6Oho9u3bxwsvvHDJOc6cOcPQoUNxdnZm3bp17Nmzh7vvvpvKyspL9l23bh2jR4/mv//9L88991yD32d95Ofno9Foqt/rtm3b8PHxoW/fvtX7jBo1Cq1Wy44dOxp9/JiYGIKDgxk9ejRbtmwxScxqYFPWghkzZvDrr7+yceNG2rat/yIcFBREVlZWrZ9lZWVV34EoY1ZWVq1OFFlZWcTExFz2mLNmzaplVygoKJBiViKR2AQFOSXEr0kFYOANkegcGpbH8AlwY9JTvTmwLpXty0+SciCblXPiufqRaJxdbeorRNIQiovBw8My5y4shMuI0suRmJiIwWCgc+fO9e73xBNPVG+HhYXx2muv8eCDD/LJJ59U/7yiooJPPvmE6OjoWq+96qqreOqpp6r/nZKSUuv5uXPn4u3tzeLFi3F0dASgU6dOl8Tw888/M23aNL744gtuuummBr2/K1FaWspzzz3HLbfcUj39n5mZecn0v4ODA76+vo3ytwYHBzN//nz69u1LWVkZX3zxBcOHD2fHjh307t3bJPGbEpvIyBoMBmbMmMHPP//MunXrCA8Pv+JrBgwYcInZe/Xq1QwYMACA8PBwgoKCau1TUFDAjh07qvf5J87Oznh5edV6SCQSiS2wfflJqir1tOnkQ3h060a9VqvVEDOqHdc+EYOTqwMZifksf28vxQXlKkUrkdRPQy0ua9asYeTIkbRp0wZPT0/uuOMOcnJyKC4urt7HycmJnj17XvLampnNyxEfH8+QIUOqRezl2LFjB1OmTOGbb765RMRu2rQJDw+P6sfrr7/Od999V+tn33333SXHrKioYOrUqRgMBubNm3elX0GjiYqK4oEHHqBPnz4MHDiQBQsWMHDgQN5//32Tn8sU2MTt9COPPMKiRYtYsWIFnp6e1XcW3t7e1a3Rpk2bRps2bZg9ezYAjz/+OMOGDePdd9/l6quvZvHixezevZvPPvsMEMV7n3jiCV577TU6duxIeHg4L7zwAiEhIbJchkQisSuykgs4sSsLNDDoxo5NLl4eEunDpJm9WDknnuzUQn5+dy/XPh6Dp6+LiSOWWAw3N5EZtdS5G0jHjuJzXN+CrpSUFK655hoeeugh/vvf/+Lr68vmzZu55557KC8vr+5G5erqetm/ictZFmqi6I/66NChA35+fixYsICrr766lujt27dvLb/tnDlzOHPmTC0P7T/X8Sgi9tSpU6xbt65WQi0oKIizZ8/W2r+yspLc3NxmL1KLjY1l8+bNzTqGWthERnbevHnk5+czfPhwgoODqx9Lliyp3uf06dNkZGRU/3vgwIEsWrSIzz77jOjoaH788UeWL19ea4HYs88+y6OPPsr9999Pv379KCwsZNWqVbi4WPiinJ8Pn34K990H/5jKkEgkksZgMBjY8qNo9NI5Lgj/dp7NOp5/qCfXP90
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAKyCAYAAAApeT2AAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUZdrH8e+kF1IIEEIJTXrvGFSwoAiIoq6o64oFdVVQEV4Lu+ruWhZde8FesCFWiqgoUlUQpYQSIHRCSwIE0uvMvH88TiDSEjKTMzP5fa5rrjOZOXPOPSEk9zznfu7H5nQ6nYiIiIiI+JgAqwMQERERETkdSmRFRERExCcpkRURERERn6REVkRERER8khJZEREREfFJSmRFRERExCcpkRURERERn6REVkRERER8UpDVAfgyh8PB3r17iYqKwmazWR2OiIiIiFdxOp3k5ubSuHFjAgLcP36qRLYa9u7dS2JiotVhiIiIiHi1Xbt20bRpU7cfV4lsNURFRQHmHyc6OtriaERERES8S05ODomJieU5k7spka0GVzlBdHS0ElkRERGRE/BUCaYme4mIiIiIT1IiKyIiIiI+SYmsiIiIiPgk1ciKiIgIdrud0tJSq8MQHxMcHExgYKBl51ciKyIiUos5nU7S09M5fPiw1aGIj4qNjSUhIcGSnvpKZEVERGoxVxIbHx9PRESEFviRSnM6nRQUFJCZmQlAo0aNajwGJbIiIiK1lN1uL09i69WrZ3U44oPCw8MByMzMJD4+vsbLDDTZS0REpJZy1cRGRERYHIn4MtfPjxU11kpkRUREajmVE0h1WPnzo0RWRES8n91udQQi4oWUyIqIiHf75huoXx/uvNPqSKQW27FjBzabjeTk5Ertf+ONNzJixAiPxiRKZEVExJvNnAkjRsDhw/D223DggNURiRdJT0/nrrvuolWrVoSGhpKYmMjw4cOZN2+e28+VmJjIvn376Ny5s9uPfSqlpaU88MADdOnShcjISBo3bsyoUaPYu3dvhf2ysrK47rrriI6OJjY2ltGjR5OXl1f+fFFRETfeeCNdunQhKCjouIn2woULsdlsx9zS09M9/TZPixJZERHxXv/8J5SVQVAQlJbCp59aHZF4iR07dtCrVy/mz5/P008/zdq1a5kzZw7nnXceY8aMOa1j2u12HA7HMY+XlJQQGBhIQkICQUGeafj073//mxtvvPG4zxUUFLBy5UoefvhhVq5cyVdffUVqaiqXXnpphf2uu+46UlJSmDt3LrNnz2bx4sXcdttt5c/b7XbCw8O5++67GTRo0EnjSU1NZd++feW3+Pj4ar9HT1AiKyIi3mnPHkhJgYAAmDjRPPbhh9bGJF7jzjvvxGaz8dtvv3HllVfStm1bOnXqxPjx4/n1118BeO6558pHMRMTE7nzzjsrjFBOmTKF2NhYZs2aRceOHQkNDSUtLY0WLVrw2GOPMWrUKKKjo7ntttuOW1qQkpLCJZdcQnR0NFFRUZxzzjls3br1uPH+/vvvNGjQgKeeeqrK7zUmJoa5c+cycuRI2rVrx5lnnskrr7zCihUrSEtLA2DDhg3MmTOHt99+m379+nH22Wfz8ssvM23atPKR28jISF577TVuvfVWEhISTnrO+Ph4EhISym8BAd6ZMnpnVCIiInPnmm2fPjBmDAQGwrJlsHmztXH5M6cT8vOtuTmdlQ4zKyuLOXPmMGbMGCIjI495PjY2FoCAgABeeuklUlJSeP/995k/fz73339/hX0LCgp46qmnePvtt0lJSSkfeXzmmWfo1q0bq1at4uGHHz7mHHv27GHAgAGEhoYyf/58VqxYwc0330xZWdkx+86fP58LL7yQJ554ggceeKDS7/NksrOzsdls5e916dKlxMbG0rt37/J9Bg0aREBAAMuWLavy8bt3706jRo248MIL+eWXX9wSsydoQQQREfFOP/xgthddBA0bwsCBMH++SXDbtLE2Nn9VUAB16lhz7rw8OE5SejxbtmzB6XTSvn37k+43bty48vstWrTg8ccf5/bbb+fVV18tf7y0tJRXX32Vbt26VXjt+eefz4QJE8q/3rFjR4XnJ0+eTExMDNOmTSM4OBiAtm3bHhPD9OnTGTVqFG+//TZXX311pd7fqRQVFfHAAw9w7bXXEh0dDZh64T9f/g8KCiIuLq5K9a2NGjXi9ddfp3fv3hQXF/P2229z7rnnsmzZMnr27OmW+N1JiayIiHgfh+PIiOxFF5ntueeaRHbxYnUwqOWclRy9/fHHH5k0aRIbN24kJyeHsrIyioqKKCgoKG/iHxISQteuXY957dEjm8eTnJzMOeecU57EHs+yZcuYPXs2X3zxxTETq3766SeGDBlS/nVJSQlOp5Mvvvii/LE33niD6667rsLrSktLGTlyJE6nk9dee+2kMZ6Odu3a0a5du/Kv+/fvz9atW3n++ef50AtLe5TIioiI91m50nQoiIqCfv3MYwMGmO2iReYytJr4u19EhBkZtercldSmTRtsNhsbN2484T47duzgkksu4Y477uCJJ54gLi6On3/+mdGjR1NSUlKeyIaHhx+3of/xShaO5lqa9WTOOOMM6tWrx7vvvsuwYcMqJL29e/euUG/70ksvsWfPngo1tA0bNqxwPFcSu3PnTubPn18+GguQkJBAZmZmhf3LysrIyso6ZT3sqfTt25eff/65WsfwFCWyIiLifb75xmwvuABcf/z79YOQEEhPhy1bVF7gCTZbpS/vWykuLo7BgwczefJk7r777mOSzsOHD7NixQocDgfPPvts+USlzz77zG0xdO3alffff5/S0tITjsrWr1+fr776inPPPZeRI0fy2Wefle8bHh5O69atK7ynnJycCo8dzZXEbt68mQULFlCvXr0KzyclJZW/7169egGmNtfhcNDP9WHwNCUnJ9OoUaNqHcNTNNlLRES8z+zZZjt8+JHHwsKOjM4uWlTzMYlXmTx5Mna7nb59+/Lll1+yefNmNmzYwEsvvURSUhKtW7emtLSUl19+mW3btvHhhx/y+uuvu+38Y8eOJScnh2uuuYbly5ezefNmPvzwQ1JTUyvsFx8fz/z589m4cSPXXnvtcSeDnUppaSl/+ctfWL58OR9//DF2u5309HTS09MpKSkBoEOHDlx88cXceuut/Pbbb/zyyy+MHTuWa665hsaNG5cfa/369SQnJ5OVlUV2djbJyckVRoZfeOEFZs6cyZYtW1i3bh3jxo1j/vz5p93SzNOUyIqIiHfZtw+WLzf3hw6t+JyrvGDx4pqNSbxOq1atWLlyJeeddx4TJkygc+fOXHjhhcybN4/XXnuNbt268dxzz/HUU0/RuXNnPv74YyZNmuS289erV4/58+eTl5fHwIED6dWrF2+99dZxR2cTEhKYP38+a9eu5brrrsNexSWX9+zZw6xZs9i9e3d5NwHXbcmSJeX7ffzxx7Rv354LLriAoUOHcvbZZ/Pmm29WONbQoUPp0aMHX3/9NQsXLqRHjx706NGj/PmSkhImTJhAly5dGDhwIKtXr+bHH3/kggsuqOJ3qGbYnJWtmJZj5OTkEBMTQ3Z2doU6FRERqYZ33oFbbjFtt377reJzc+eayV/Nm8OfZpFL1RUVFbF9+3ZatmxJWFiY1eGIjzrZz5GncyWNyIqIiHeZNctshw079rmkJNNPdudOcxORWk2JrIiIeI/sbJgzx9y/4opjn69TB1xtkVReIFLrKZEVERHvMXMmlJRAhw7QufPx9zm6DZeI1GpKZEVExHu42iONHHniPrGa8CUif1AiKyIi3uHQoSPL0o4ceeL9zj7bJLmbN5sOByJSaymRFRER7zBjBpSWmpKCjh1PvF9sLHTrZu5rVFakVlMiKyIi3uHTT8326qtPve/AgWarRFakVvObRPa1116ja9euREdHEx0dTVJSEt99990J958yZQo2m63CTT30REQscvAg/PijuX+ysgIXTfgSESDI6gDcpWnTpjz55JO0adMGp9PJ+++/z2WXXcaqVavo1KnTcV8THR1dYSk524kmFoiIiGd99RXY7dC9O7Rte+r9zzn
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAKxCAYAAACv7U8uAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAADdbElEQVR4nOzdd3xV9f3H8dfNutkJCSQhEPbeS5DhRpGlKM6iYB04EETQqv0V27pwVLQoxdW66mqdSAUHyFD23nsECEmAkITs5N7z++NLLkRWQm5y703ez0dvz7nrnM9N8N53vvc7bJZlWYiIiIiI+Bg/TxcgIiIiInI+FGRFRERExCcpyIqIiIiIT1KQFRERERGfpCArIiIiIj5JQVZEREREfJKCrIiIiIj4pABPF+DLnE4nKSkpREREYLPZPF2OiIiIiFexLItjx46RmJiIn5/7208VZCshJSWFpKQkT5chIiIi4tX27dtHw4YN3X5cBdlKiIiIAMwvJzIy0sPViIiIiHiX7OxskpKSXJnJ3RRkK6G0O0FkZKSCrIiIiMgZVFUXTA32EhERERGfpCArIiIiIj5JQVZEREREfJL6yIqIiAgOh4Pi4mJPlyE+JjAwEH9/f4+dX0FWRESkFrMsi9TUVDIzMz1divio6OhoEhISPDKnvoKsiIhILVYaYuPi4ggNDdUCP1JulmWRl5dHeno6APXr16/2GhRkRUREaimHw+EKsbGxsZ4uR3xQSEgIAOnp6cTFxVV7NwMN9hIREamlSvvEhoaGergS8WWl/3480cdaQVZERKSWU3cCqQxP/vtRkBURERERn6QgKyIi7rd3L7RoARdcANOnQ0mJub2oCGbNgqwsz9YnIjWCgqyIiLjftGmwcyesWAEPPAAXXwz/+Ad07QqDBsHEiZ6uUKRC9uzZg81mY82aNeV6/B133MGwYcOqtCZRkBUREXcrLob33zf7d94JkZGweDGMGQObNpnbf/rJc/VJjZGamsrYsWNp1qwZdrudpKQkhg4dypw5c9x+rqSkJA4ePEiHDh3cfuxzKS4u5rHHHqNjx46EhYWRmJjIyJEjSUlJKfO4jIwMRowYQWRkJNHR0dx1113k5OS47i8oKOCOO+6gY8eOBAQEnDZoz5s3D5vNdsolNTW1ql/meVGQFRER9/ruO0hPh7g4eOMNWLsW7r0Xrr8ebrvNPGbvXtAE/FIJe/bsoXv37sydO5eXXnqJ9evXM3v2bC677DLGjBlzXsd0OBw4nc5Tbi8qKsLf35+EhAQCAqpm5tK//OUv3HHHHae9Ly8vj1WrVjFp0iRWrVrFl19+ydatW7nmmmvKPG7EiBFs3LiRH3/8kZkzZ7JgwQJGjx7tut/hcBASEsK4cePo37//WevZunUrBw8edF3i4uIq/RqrgoKsiIi41wcfmO3IkRAYCE2amED7xRfw4YfmOsCqVZ6qUM7GsiA3t/ovllWhMh944AFsNhvLli1j+PDhtGrVivbt2zNhwgSWLFkCwJQpU1ytmElJSTzwwANlWijfe+89oqOjmTFjBu3atcNut5OcnEyTJk14+umnGTlyJJGRkYwePfq0XQs2btzIkCFDiIyMJCIigosuuoidO3eett7ly5dTr149XnjhhQr/SqKiovjxxx+56aabaN26NRdeeCGvv/46K1euJDk5GYDNmzcze/Zs3nnnHXr16kW/fv147bXX+PTTT10tt2FhYUyfPp177rmHhISEs54zLi6OhIQE18XPzzsjo3dWJSIivsmyYOFCs3/99ad/TI8eZrtiRfXUJBWTlwfh4dV/ycsrd4kZGRnMnj2bMWPGEBYWdsr90dHRAPj5+TF16lQ2btzI+++/z9y5c/nDH/7wm5ebxwsvvMA777zDxo0bXS2Pf/vb3+jcuTOrV69m0qRJp5zjwIEDXHzxxdjtdubOncvKlSu58847KSkd2HiSuXPncuWVV/Lss8/y2GOPlft1nk1WVhY2m831WhcvXkx0dDQ9Sv/7Avr374+fnx9Lly6t8PG7dOlC/fr1ufLKK/n111/dUnNV0MpeIiLiPsnJcOgQBASYgV2n06MHfP65gqyctx07dmBZFm3atDnr48aPH+/ab9KkCc888wz33Xcf//jHP1y3FxcX849//IPOnTuXee7ll1/OxJMGJe7Zs6fM/dOmTSMqKopPP/2UwMBAAFq1anVKDV999RUjR47knXfe4eabby7vSzyrgoICHnvsMW699VYiIyMB01/4t1//BwQEEBMTU6H+rfXr1+eNN96gR48eFBYW8s4773DppZeydOlSunXr5pb63UlBVkRE3GfZMrPt1AmCg0//GLXIerfQUDjp6/dqPW85WeXshvDTTz8xefJktmzZQnZ2NiUlJRQUFJCXl+dajSooKIhOnTqd8tyTWzZPZ82aNVx00UWuEHs6S5cuZebMmXz++eenDKxauHAhAwcOdF0vKirCsiw+//xz121vvvkmI0aMKPO84uJibrrpJizLYvr06Wet8Xy0bt2a1q1bu6736dOHnTt38sorr/Dhhx+6/XyVpSArIiLus3y52V5wwZkfU9qqs3s3ZGRATEzV1yXlZ7PBab6u9yYtW7bEZrOxZcuWMz5mz549DBkyhPvvv59nn32WmJgYfvnlF+666y6KiopcQTYkJOS0K1OdrsvCyUJCQs5ZZ/PmzYmNjeVf//oXgwcPLhN6e/ToUaa/7dSpUzlw4ECZPrTx8fFljlcaYvfu3cvcuXNdrbEACQkJpKenl3l8SUkJGRkZ5+wPey49e/bkl19+qdQxqor6yIqIiPuUJ8jWqQOlH6y/+bpWpDxiYmIYMGAA06ZNIzc395T7MzMzWblyJU6nk5dffpkLL7yQVq1anTJdVWV06tSJhQsXUlxcfMbH1K1bl7lz57Jjxw5uuummMo8NCQmhRYsWrktMTAwRERFlbouIiHA9vjTEbt++nZ9++onY2Ngy5+rdu7frdZeaO3cuTqeTXr16Veq1rlmzhvr161fqGFVFQVZERNzD4TjRXaBnz7M/tkEDsz1woGprkhpr2rRpOBwOevbsyRdffMH27dvZvHkzU6dOpXfv3rRo0YLi4mJee+01du3axYcffsgbb7zhtvM/+OCDZGdnc8stt7BixQq2b9/Ohx9+yNatW8s8Li4ujrlz57JlyxZuvfXW0w4GO5fi4mJuuOEGVqxYwUcffYTD4SA1NZXU1FSKiooAaNu2LVdffTX33HMPy5Yt49dff+XBBx/klltuITEx0XWsTZs2sWbNGjIyMsjKymLNmjVlWoZfffVVvvnmG3bs2MGGDRsYP348c+fOPe8pzaqagqyIiLjHli2mb2VoKLRte/bHKshKJTVr1oxVq1Zx2WWXMXHiRDp06MCVV17JnDlzmD59Op07d2bKlCm88MILdOjQgY8++ojJkye77fyxsbHMnTuXnJwcLrnkErp3787bb7992j6zCQkJzJ07l/Xr1zNixAgcDkeFznXgwAFmzJjB/v37XbMJlF4WLVrketxHH31EmzZtuOKKKxg0aBD9+vXjrbfeKnOsQYMG0bVrV7799lvmzZtH165d6XrSwMyioiImTpxIx44dueSSS1i7di0//fQTV1xxRQV/QtXDZpW3x7ScIjs7m6ioKLKyssr0UxERqZVeew3GjYPLL4dzraz0wAMwfTr86U/w9NPVU5+coqCggN27d9O0aVOCzzQ4T+QczvbvqKqzklpkRUTEPX780Wyvuurcj1WLrIi4gYKsiIhUXlER/Pyz2VeQFZFqUmOD7IIFCxg6dCiJiYnYbDa+/vpr133FxcU89thjrmXrEhMTGTlypFtHM4qI1CpLlpj+sfXqwW8mlj8tBVkRcYMaG2Rzc3Pp3Lkz06ZNO+W+vLw8Vq1axaRJk1i1ahVffvklW7du5ZprrvFApSIiNcAPP5jtlVdCedZkLx1FrSArIpVQYxdEGDhwYJkVM04WFRXFj6V9uY57/fXX6dmzJ8nJyTRq1Kg6ShQRqRksCz77zOwPGFC+55S2yGZmQl5ehVZ1EhEpVWODbEVlZWVhs9mIjo4+42MKCwspLCx0Xc/
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAKyCAYAAAApeT2AAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAADjNklEQVR4nOzddXicVfrG8e/E3bVtpO7uhpVSCi3usMiysEALiy6wAsuyUGAXlsXthyxuWyjWQluK1t1d0rSRxt1mfn8cJm2oRWbyziT357rmet9MZt55kkrunDnnOTaHw+FARERERMTL+FhdgIiIiIhIcyjIioiIiIhXUpAVEREREa+kICsiIiIiXklBVkRERES8koKsiIiIiHglBVkRERER8UoKsiIiIiLilfysLsCb2e129u3bR3h4ODabzepyRERERDyKw+GgpKSEDh064OPj+vFTBdkW2LdvHykpKVaXISIiIuLRMjIy6NSpk8uvqyDbAuHh4YD5w4mIiLC4GhERERHPUlxcTEpKSn1mcjUF2RZwTieIiIhQkBURERE5CndNwdRiLxERERHxSgqyIiIiIuKVFGRFRERExCtpjqyIiIhQV1dHTU2N1WWIl/H398fX19ey11eQFRERacccDgdZWVkUFhZaXYp4qaioKJKSkizpqa8gKyIi0o45Q2xCQgIhISHa4EcazeFwUF5eTk5ODgDJycmtXoOCrIiISDtVV1dXH2JjY2OtLke8UHBwMAA5OTkkJCS0+jQDLfYSERFpp5xzYkNCQiyuRLyZ8++PFXOsFWRFRETaOU0nkJaw8u+PgqyIiFVqa8HhsLoKERGvpSArImKFtWuhSxcYNQrsdqurEZHj2LVrFzabjVWrVjXq8VdffTXnnHOOW2sSBVkRkda3cCGceCJkZMCSJTBnjtUViXilrKwsbr75Zrp06UJgYCApKSlMnTqVefPmufy1UlJS2L9/P/369XP5tY+npqaGu+++m/79+xMaGkqHDh248sor2bdvX4PH5efnc/nllxMREUFUVBTXXnstpaWl9Z+vrKzk6quvpn///vj5+R0xaC9YsACbzXbYLSsry91fZrMoyIqItBaHA156CU46CQoKICjI3P/885aWJeKNdu3axdChQ5k/fz7//Oc/Wbt2LbNnz+bkk09m2rRpzbpmXV0d9iO8Q1JdXY2vry9JSUn4+bmn4dPf/vY3rr766iN+rry8nBUrVvDXv/6VFStW8L///Y/Nmzdz1llnNXjc5Zdfzvr16/nmm2/4/PPP+f7777n++uvrP19XV0dwcDC33HILp5566jHr2bx5M/v376+/JSQktPhrdAcFWRGR1lBYCJMnw+9/D9XVcN558OOP5nOffw67d1tanoi3uemmm7DZbCxZsoTzzz+fHj160LdvX26//XYWLVoEwBNPPFE/ipmSksJNN93UYITy9ddfJyoqilmzZtGnTx8CAwPZs2cP6enpPPjgg1x55ZVERERw/fXXH3Fqwfr165kyZQoRERGEh4czfvx4tm/ffsR6ly5dSnx8PI8++miTv9bIyEi++eYbLrroInr27MmoUaN45plnWL58OXv27AFg48aNzJ49m1deeYWRI0cybtw4nn76ad577736kdvQ0FCef/55rrvuOpKSko75mgkJCSQlJdXffHw8MzJ6ZlWtJDMzkyuuuILY2FiCg4Pp378/y5Yts7osEWmLHnvMTCEIDDTnH34IQ4fCKaeYkdq33rK6QhHzd7GszJpbExY+5ufnM3v2bKZNm0ZoaOhhn4+KigLAx8eHp556ivXr1/PGG28wf/58/vjHPzZ4bHl5OY8++iivvPIK69evrx95/Ne//sXAgQNZuXIlf/3rXw97jczMTE444QQCAwOZP38+y5cv57e//S21tbWHPXb+/PlMnDiRhx56iLvvvrvRX+exFBUVYbPZ6r/WhQsXEhUVxbBhw+ofc+qpp+Lj48PixYubfP1BgwaRnJzMxIkT+emnn1xSszu02w0RCgoKGDt2LCeffDJfffUV8fHxbN26lejoaKtLE5G26NtvzfG55+C3vz14/wUXwPz58PXX8Oc/W1ObiFN5OYSFWfPapaVwhFB6JNu2bcPhcNCrV69jPu7WW2+tP09PT+cf//gHN9xwA88991z9/TU1NTz33HMMHDiwwXNPOeUU7rjjjvqPd+3a1eDzzz77LJGRkbz33nv4+/sD0KNHj8NqmDlzJldeeSWvvPIKF198caO+vuOprKzk7rvv5tJLLyUiIgIw84V//fa/n58fMTExTZrfmpyczAsvvMCwYcOoqqrilVde4aSTTmLx4sUMGTLEJfW7UrsNso8++igpKSm89tpr9fd17tzZwopEpM0qKwPnuz2nnNLwc5MmmePPP0NxMfzyQ0lEjs7RyNHbuXPnMmPGDDZt2kRxcTG1tbVUVlZSXl5e38Q/ICCAAQMGHPbcQ0c2j2TVqlWMHz++PsQeyeLFi/n888/56KOPDltY9cMPPzB58uT6j6urq3E4HHz00Uf197344otcfvnlDZ5XU1PDRRddhMPh4Hk3zK/v2bMnPXv2rP94zJgxbN++nX//+9+8+eabLn+9lmq3QXbWrFlMmjSJCy+8kO+++46OHTty0003cd111x31OVVVVVRVVdV/XFxc3Bqlioi3W7zY9Izt1AnS0hp+rksX6NYNtm0zo7Znn21NjSIAISFmZNSq126k7t27Y7PZ2LRp01Efs2vXLqZMmcKNN97IQw89RExMDD/++CPXXnst1dXV9UE2ODj4iA39jzRl4VDOrVmPpWvXrsTGxvLqq69y5plnNgi9w4YNazDf9qmnniIzM7PBHNrExMQG13OG2N27dzN//vz60ViApKQkcnJyGjy+traW/Pz8486HPZ4RI0bwo3NOv4dpt3Nkd+zYwfPPP0/37t2ZM2cON954I7fccgtvvPHGUZ8zY8YMIiMj628pKSmtWLGIeK3vvzfHE06AI+2Ac9pp5vj1161Xk8iR2Gzm7X0rbk3YHSomJoZJkybx7LPPUlZWdtjnCwsLWb58OXa7nccff5xRo0bRo0ePw9pVtcSAAQP44Ycfjrkta1xcHPPnz2fbtm1cdNFFDR4bHBxMt27d6m8xMTGEh4c3uC88PLz+8c4Qu3XrVubOnUtsbGyD1xo9enT91+00f/587HY7I0eObNHXumrVKpKTk1t0DXdpt0HWbrczZMgQHn74YQYPHsz111/PddddxwsvvHDU59x7770UFRXV3zIyMlqxYhHxWj/8YI7jxx/5887pBQqyIo327LPPUldXx4gRI/j444/ZunUrGzdu5KmnnmL06NF069aNmpoann76aXbs2MGbb755zJ/xTTV9+nSKi4u55JJLWLZsGVu3buXNN99k8+bNDR6XkJDA/Pnz2bRpE5deeukRF4MdT01NDRdccAHLli3j7bffpq6ujqysLLKysqiurgagd+/enH766Vx33XUsWbKEn376ienTp3PJJZfQoUOH+mtt2LCBVatWkZ+fT1FREatWrWowMvzkk0/y6aefsm3bNtatW8ett97K/Pnzm93SzN3abZBNTk6mT58+De7r3bt3fRuLIwkMDCQiIqLBTUTkmOrq4JdWQEcNsieeaEajtm0DD206LuJpunTpwooVKzj55JO544476NevHxMnTmTevHk8//zzDBw4kCeeeIJHH32Ufv368fbbbzNjxgyXvX5sbCzz58+ntLSUE088kaFDh/Lyyy8fcc5sUlIS8+fPZ+3atVx++eXU1dU16bUyMzOZNWsWe/fure8m4Lz9/PPP9Y97++236dWrFxMmTOCMM85g3LhxvPTSSw2udcYZZzB48GA+++wzFixYwODBgxk8eHD956urq7njjjvo378/J554IqtXr2bu3LlMmDChid+h1mFzNHbGdBtz2WWXkZGRwQ/OkRLgtttuY/HixQ3+UhxLcXExkZGRFBUVKdSKyJFt2wbdu5vND0pLwdf3yI8bOBDWrIGPPzY9ZkVaQWVlJTt37qRz584EOTfoEGmiY/09cndWarcjsrfddhuLFi3i4YcfZtu2bbzzzju
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAKxCAYAAACv7U8uAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAD7RUlEQVR4nOzdd3iT5foH8G+a7r0XndBFC2WPsqcynUccKG6OCu4F5+fxOI6iHtfBgesoiOLACSogW/YulJYuoHvvnTTJ+/vjIYVCoSvpmzTfz3X1Spomb+7uO897P/etkCRJAhERERGRmbGSOwAiIiIioq5gIktEREREZomJLBERERGZJSayRERERGSWmMgSERERkVliIktEREREZomJLBERERGZJWu5AzBnOp0OBQUFcHFxgUKhkDscIiIiIpMiSRJqa2sRGBgIKyvDr58yke2GgoICBAcHyx0GERERkUnLzc1FUFCQwY/LRLYbXFxcAIhvjqurq8zREBEREZmWmpoaBAcHt+RMhsZEthv05QSurq5MZImIiIguw1glmNzsRURERERmiYksEREREZklJrJEREREZJZYI0tERETQarVobm6WOwwyMzY2NlAqlbI9PxNZIiIiCyZJEoqKilBVVSV3KGSm3N3d4e/vL0tPfSayREREFkyfxPr6+sLR0ZEDfqjDJElCQ0MDSkpKAAABAQE9HgMTWSIiIgul1WpbklgvLy+5wyEz5ODgAAAoKSmBr69vj5cZcLMXERGRhdLXxDo6OsocCZkz/c+PHDXWFp3I5ufn4/bbb4eXlxccHBwwcOBAHD58WO6wiIiIehTLCag75Pz5sdjSgsrKSowdOxaTJ0/Ghg0b4OPjg4yMDHh4eMgdGhERERF1gMUmsq+//jqCg4PxxRdftNwWHh4uY0REREQEAFCrgeJioLISsLUF+vYVl0QXsdjSgnXr1mH48OG46aab4OvriyFDhuDTTz+94mNUKhVqampavREREZGBaDRAYSFw8qRIZNVqoK4OOHUKqK+XNbSsrCwoFAokJiZ26P533XUXrrvuOqPGRBacyJ45cwYrVqxAZGQkNm3ahAcffBCPPPIIVq1addnHLFu2DG5ubi1vwcHBPRgxERFRL1ZRAZw4AeTnAzod4OwMhIcD9vZAczOQlibuc4GioiI8/PDD6Nu3L+zs7BAcHIy5c+di69at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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAArIAAAKxCAYAAACv7U8uAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAADb8ElEQVR4nOzdd3iUVfrG8e9MyqQnpCeQ0Kt0EEQUUVEEu1gX17Iqu4oF26q7q7u2ZXXV9Ye97K69d11FEQQb0hGkSQsJJSQQkkkvM/P74zCBQCghM3lnkvtzXXO9k5nJvE9CSO4585xzbB6Px4OIiIiISJCxW12AiIiIiMiRUJAVERERkaCkICsiIiIiQUlBVkRERESCkoKsiIiIiAQlBVkRERERCUoKsiIiIiISlBRkRURERCQoKciKiIiISFBSkBURERGRoNRqg+y3337LmWeeSWZmJjabjY8++qj+vtraWu644w769etHdHQ0mZmZXHbZZWzdutW6gkVERESkSUKtLsBfysvLGTBgAL/73e8477zzGtxXUVHB4sWLufvuuxkwYAC7du3ipptu4qyzzmLhwoWHfQ63283WrVuJjY3FZrP5+ksQERERCWoej4fS0lIyMzOx230/fmrzeDwenz9rgLHZbHz44Yecc845B3zMggULGDZsGJs2bSI7O/uwnnfz5s1kZWX5qEoRERGR1ikvL48OHTr4/Hlb7YhsU5WUlGCz2UhISDjgY6qrq6murq7/2PsaIC8vj7i4OH+XKCIiIhJUnE4nWVlZxMbG+uX5FWSBqqoq7rjjDi655JKDBtKpU6dy77337nd7XFycgqyIiIjIAfirBbPVTvY6XLW1tVx44YV4PB6eeeaZgz72rrvuoqSkpP6Sl5fXQlWKiIiIyL7a9IisN8Ru2rSJWbNmHXJU1eFw4HA4Wqg6ERERETmYNhtkvSF27dq1fPPNNyQlJVldkoiIiIg0QasNsmVlZaxbt67+440bN7J06VISExPJyMjg/PPPZ/HixXz22We4XC7y8/MBSExMJDw83KqyRURELOFyuaitrbW6DAkyYWFhhISEWHb+Vrv81uzZsznxxBP3u/3yyy/nb3/7G507d27087755htGjx59WOdwOp3Ex8dTUlKiyV4iIhKUPB4P+fn5FBcXW12KBKmEhATS09MbndDl76zUakdkR48ezcEyeivN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
"text/plain": [
"<Figure size 700x700 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ks = [i for i in range(15)]\n",
"# ks = [0, 1, 2, 3, 4, 5, 6, ]\n",
"\n",
"for k in ks:\n",
" fig, axs = plt.subplots(2, 1, figsize=(7, 7), sharex=True)\n",
" fig.subplots_adjust(wspace=0)\n",
" cols = plt.rcParams['axes.prop_cycle'].by_key()['color']\n",
"\n",
" # # CSiBORG2\n",
" # x = loaders_csiborg2X[0].rdist\n",
" # y = np.asarray([loaders_csiborg2[i].los_density[k, :] for i in range(len(loaders_csiborg2X))])\n",
" # ylow, ymed, yhigh = np.percentile(y, [16, 50, 84], axis=0)\n",
" # axs[0].fill_between(x, ylow, yhigh, color=cols[0], alpha=0.25)\n",
" # axs[0].plot(x, ymed, color=cols[0], label=\"CSiBORG2\")\n",
"\n",
" # y = np.asarray([loaders_csiborg2[i].los_radial_velocity[k, :] for i in range(len(loaders_csiborg2X))])\n",
" # ylow, ymed, yhigh = np.percentile(y, [16, 50, 84], axis=0)\n",
" # axs[1].fill_between(x, ylow, yhigh, color=cols[0], alpha=0.25)\n",
" # axs[1].plot(x, ymed, color=cols[0], label=\"CSiBORG2\")\n",
"\n",
" # # CSiBORG2X\n",
" # x = loaders_csiborg2X[0].rdist\n",
" # y = np.asarray([loaders_csiborg2X[i].los_density[k, :] for i in range(len(loaders_csiborg2X))])\n",
" # ylow, ymed, yhigh = np.percentile(y, [16, 50, 84], axis=0)\n",
" # axs[0].fill_between(x, ylow, yhigh, color=cols[1], alpha=0.25)\n",
" # axs[0].plot(x, ymed, color=cols[1], label=\"CSiBORG2X\")\n",
"\n",
" # y = np.asarray([loaders_csiborg2X[i].los_radial_velocity[k, :] for i in range(len(loaders_csiborg2X))])\n",
" # ylow, ymed, yhigh = np.percentile(y, [16, 50, 84], axis=0)\n",
" # axs[1].fill_between(x, ylow, yhigh, color=cols[1], alpha=0.25)\n",
" # axs[1].plot(x, ymed, color=cols[1], label=\"CSiBORG2X\")\n",
"\n",
" # Plot Carrick+2015\n",
" axs[0].plot(loader_carrick.rdist, loader_carrick.los_density[0, k, :], color=\"red\", label=\"Carrick+2015\")\n",
" axs[1].plot(loader_carrick.rdist, loader_carrick.los_radial_velocity[0, k, :] * 0.43, color=\"red\")\n",
"\n",
" # Plot CF4\n",
" c = cols[4]\n",
" axs[0].plot(loader_CF4.rdist, loader_CF4.los_density[0, k, :], color=c, label=\"CF4\")\n",
" axs[1].plot(loader_CF4.rdist, loader_CF4.los_radial_velocity[0, k, :], color=c)\n",
"\n",
"\n",
" axs[1].set_xlabel(r\"$r ~ [\\mathrm{Mpc} / h]$\")\n",
" axs[0].set_ylabel(r\"$\\rho_{\\rm LOS} / \\langle \\rho_{\\rm matter} \\rangle$\")\n",
" axs[1].set_ylabel(r\"$v_{\\rm LOS} ~ [\\mathrm{km/s}]$\")\n",
" # axs[0].set_yscale(\"log\")\n",
"\n",
" axs[0].legend(loc=\"upper right\")\n",
" axs[0].set_xlim(0, 200)\n",
"\n",
" fig.tight_layout(w_pad=0, h_pad=0)\n",
" # fig.savefig(f\"../../plots/LOSS_los_{k}.png\", dpi=500, bbox_inches=\"tight\")\n",
"\n",
" fig.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test running a model"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2024-06-27 13:05:36.632317: reading the catalogue,\n",
"2024-06-27 13:05:36.639136: reading the interpolated field,\n",
"2024-06-27 13:05:36.646839: calculating the radial velocity.\n"
]
}
],
"source": [
"fpath_data = \"/mnt/extraspace/rstiskalek/catalogs/PV_compilation.hdf5\"\n",
"# fpath_data = \"/mnt/extraspace/rstiskalek/catalogs/A2.h5\"\n",
"# fpath_data = \"/mnt/extraspace/rstiskalek/catalogs/PV_mock_CB2_17417_large.hdf5\"\n",
"\n",
"simname = \"CF4\"\n",
"catalogue = \"LOSS\"\n",
"loader = csiborgtools.flow.DataLoader(simname, [0], catalogue, fpath_data, paths, ksmooth=0, )\n",
"\n",
"SN_hyperparams = {\"e_mu_mean\": 0.1, \"e_mu_std\": 0.05, \n",
" \"mag_cal_mean\": -18.25, \"mag_cal_std\": 0.5,\n",
" \"alpha_cal_mean\": 0.148, \"alpha_cal_std\": 0.05,\n",
" \"beta_cal_mean\": 3.112, \"beta_cal_std\": 1.0,\n",
" }\n",
"calibration_hyperparams = {\"Vext_std\": 250,\n",
" \"alpha_mean\": 1.0, \"alpha_std\": 0.5,\n",
" \"beta_mean\": 1.0, \"beta_std\": 0.5,\n",
" \"sigma_v_mean\": 150., \"sigma_v_std\": 100.,\n",
" \"sample_alpha\": True, \"sample_beta\": True,\n",
" }\n",
"get_model_kwargs = {\"zcmb_max\": 0.05}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Running HMC"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Selected 50/50 galaxies.\n"
]
}
],
"source": [
"model = csiborgtools.flow.get_model(loader, **get_model_kwargs)\n",
"model_kwargs = {\"distmod_hyperparams\": SN_hyperparams, \"calibration_hyperparams\": calibration_hyperparams,}"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"warmup: 2%|▏ | 24/1000 [00:15<10:42, 1.52it/s, 1023 steps of size 1.33e-02. acc. prob=0.70]\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"Cell \u001b[0;32mIn[21], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m mcmc \u001b[38;5;241m=\u001b[39m MCMC(kernel, num_warmup\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m500\u001b[39m, num_samples\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m500\u001b[39m)\n\u001b[1;32m 4\u001b[0m rng_key \u001b[38;5;241m=\u001b[39m jax\u001b[38;5;241m.\u001b[39mrandom\u001b[38;5;241m.\u001b[39mPRNGKey(\u001b[38;5;241m5\u001b[39m)\n\u001b[0;32m----> 5\u001b[0m \u001b[43mmcmc\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrng_key\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_fields\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpotential_energy\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmodel_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m mcmc\u001b[38;5;241m.\u001b[39mprint_summary()\n\u001b[1;32m 7\u001b[0m samples \u001b[38;5;241m=\u001b[39m mcmc\u001b[38;5;241m.\u001b[39mget_samples()\n",
"File \u001b[0;32m~/csiborgtools/venv_csiborg/lib/python3.11/site-packages/numpyro/infer/mcmc.py:644\u001b[0m, in \u001b[0;36mMCMC.run\u001b[0;34m(self, rng_key, extra_fields, init_params, *args, **kwargs)\u001b[0m\n\u001b[1;32m 642\u001b[0m map_args \u001b[38;5;241m=\u001b[39m (rng_key, init_state, init_params)\n\u001b[1;32m 643\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnum_chains \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m--> 644\u001b[0m states_flat, last_state \u001b[38;5;241m=\u001b[39m \u001b[43mpartial_map_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmap_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 645\u001b[0m states \u001b[38;5;241m=\u001b[39m tree_map(\u001b[38;5;28;01mlambda\u001b[39;00m x: x[jnp\u001b[38;5;241m.\u001b[39mnewaxis, \u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m], states_flat)\n\u001b[1;32m 646\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
"File \u001b[0;32m~/csiborgtools/venv_csiborg/lib/python3.11/site-packages/numpyro/infer/mcmc.py:450\u001b[0m, in \u001b[0;36mMCMC._single_chain_mcmc\u001b[0;34m(self, init, args, kwargs, collect_fields)\u001b[0m\n\u001b[1;32m 444\u001b[0m collection_size \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_collection_params[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcollection_size\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 445\u001b[0m collection_size \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 446\u001b[0m collection_size\n\u001b[1;32m 447\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m collection_size \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 448\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m collection_size \u001b[38;5;241m/\u001b[39m\u001b[38;5;241m/\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mthinning\n\u001b[1;32m 449\u001b[0m )\n\u001b[0;32m--> 450\u001b[0m collect_vals \u001b[38;5;241m=\u001b[39m \u001b[43mfori_collect\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 451\u001b[0m \u001b[43m \u001b[49m\u001b[43mlower_idx\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 452\u001b[0m \u001b[43m \u001b[49m\u001b[43mupper_idx\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 453\u001b[0m \u001b[43m \u001b[49m\u001b[43msample_fn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 454\u001b[0m \u001b[43m \u001b[49m\u001b[43minit_val\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 455\u001b[0m \u001b[43m \u001b[49m\u001b[43mtransform\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_collect_fn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcollect_fields\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 456\u001b[0m \u001b[43m \u001b[49m\u001b[43mprogbar\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprogress_bar\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 457\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_last_val\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 458\u001b[0m \u001b[43m \u001b[49m\u001b[43mthinning\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mthinning\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 459\u001b[0m \u001b[43m \u001b[49m\u001b[43mcollection_size\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcollection_size\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 460\u001b[0m \u001b[43m \u001b[49m\u001b[43mprogbar_desc\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpartial\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_get_progbar_desc_str\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlower_idx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mphase\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 461\u001b[0m \u001b[43m \u001b[49m\u001b[43mdiagnostics_fn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdiagnostics\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 462\u001b[0m \u001b[43m \u001b[49m\u001b[43mnum_chains\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnum_chains\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mchain_method\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m==\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mparallel\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 463\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 464\u001b[0m states, last_val \u001b[38;5;241m=\u001b[39m collect_vals\n\u001b[1;32m 465\u001b[0m \u001b[38;5;66;0
"File \u001b[0;32m~/csiborgtools/venv_csiborg/lib/python3.11/site-packages/numpyro/util.py:367\u001b[0m, in \u001b[0;36mfori_collect\u001b[0;34m(lower, upper, body_fun, init_val, transform, progbar, return_last_val, collection_size, thinning, **progbar_opts)\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m tqdm\u001b[38;5;241m.\u001b[39mtrange(upper) \u001b[38;5;28;01mas\u001b[39;00m t:\n\u001b[1;32m 366\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i \u001b[38;5;129;01min\u001b[39;00m t:\n\u001b[0;32m--> 367\u001b[0m vals \u001b[38;5;241m=\u001b[39m \u001b[43mjit\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_body_fn\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43mi\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvals\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 368\u001b[0m t\u001b[38;5;241m.\u001b[39mset_description(progbar_desc(i), refresh\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n\u001b[1;32m 369\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m diagnostics_fn:\n",
"File \u001b[0;32m<string>:1\u001b[0m, in \u001b[0;36m<lambda>\u001b[0;34m(_cls, step_size, inverse_mass_matrix, mass_matrix_sqrt, mass_matrix_sqrt_inv, ss_state, mm_state, window_idx, rng_key)\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"kernel = NUTS(model, init_strategy=init_to_median(num_samples=100))\n",
"mcmc = MCMC(kernel, num_warmup=500, num_samples=500)\n",
"\n",
"rng_key = jax.random.PRNGKey(5)\n",
"mcmc.run(rng_key, extra_fields=(\"potential_energy\",), **model_kwargs)\n",
"mcmc.print_summary()\n",
"samples = mcmc.get_samples()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"from numpyro.infer import log_likelihood"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"ll_single = log_likelihood(model, samples, **model_kwargs)[\"ll\"]\n",
"ll_mult = log_likelihood(model_mult, samples, **model_kwargs, )[\"ll\"]"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
" 0., 0., 0., 0., 0., 0., 0.], dtype=float32)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ll_single - ll_mult"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Array([-374.78827, -376.5492 , -371.77686, -372.9841 , -378.55914,\n",
" -378.39984, -378.2459 , -375.273 , -377.44177, -377.93024,\n",
" -379.78754, -376.69867, -376.69543, -373.6802 , -378.27258,\n",
" -375.40875, -375.0953 , -372.4082 , -378.23706, -373.86218,\n",
" -378.33875, -376.94678, -373.83652, -378.32117, -378.96307,\n",
" -376.3273 , -378.99994, -375.4494 , -377.64166, -375.86154,\n",
" -378.59518, -380.15732, -377.50745, -380.40387, -376.8189 ,\n",
" -376.1007 , -373.51187, -377.10147, -374.32153, -374.2683 ,\n",
" -375.59872, -376.4356 , -377.2743 , -377.35114, -374.19208,\n",
" -376.06555, -380.0948 , -374.54852, -377.23047, -382.89264,\n",
" -380.85538, -378.4214 , -375.15735, -373.39212, -375.85846,\n",
" -375.65417, -376.16678, -375.97055, -378.42426, -376.42603,\n",
" -377.9259 , -372.40448, -373.42722, -374.55554, -378.3473 ,\n",
" -373.24213, -374.04 , -374.16534, -374.32443, -379.45923,\n",
" -375.31113, -378.57886, -375.84442, -377.4536 , -376.42334,\n",
" -377.72723, -376.27448, -377.9539 , -373.5795 , -374.67526,\n",
" -372.17963, -372.82324, -374.28815, -373.96506, -376.82507,\n",
" -376.93213, -375.63318, -375.7738 , -375.90573, -378.0384 ,\n",
" -378.0224 , -379.54617, -378.00513, -377.14618, -378.09073,\n",
" -375.86597, -378.58353, -375.02972, -378.62332, -375.34515,\n",
" -377.38895, -376.81897, -377.08514, -378.20892, -374.73334,\n",
" -374.945 , -374.85724, -374.56958, -375.57413, -375.072 ,\n",
" -377.19028, -377.54443, -374.5007 , -376.54013, -374.14465,\n",
" -374.65546, -375.77112, -373.91183, -374.46637, -374.3336 ,\n",
" -378.4422 , -375.58517, -376.24066, -374.48282, -376.95374,\n",
" -372.74634, -372.97794, -374.2119 , -376.01407, -378.1242 ,\n",
" -378.89832, -375.39142, -375.29816, -376.1898 , -374.10272,\n",
" -375.10376, -376.2453 , -377.4701 , -378.1543 , -373.8468 ,\n",
" -376.58026, -374.8551 , -375.1272 , -376.64966, -377.48123,\n",
" -380.61816, -378.7544 , -374.92545, -374.71252, -372.59912,\n",
" -373.55402, -373.39218, -374.92795, -373.6598 , -376.6132 ,\n",
" -377.88617, -373.76184, -378.83252, -378.48187, -378.70923,\n",
" -380.9616 , -381.7417 , -376.7549 , -379.59344, -380.48926,\n",
" -374.94775, -376.39612, -374.6676 , -379.39023, -381.8791 ,\n",
" -377.42413, -375.87958, -374.0121 , -375.43823, -372.45062,\n",
" -372.70752, -373.5069 , -375.3844 , -375.36328, -373.78485,\n",
" -376.49564, -374.79987, -375.86487, -374.06674, -377.0426 ,\n",
" -377.5667 , -379.7243 , -379.37122, -376.22632, -375.70654,\n",
" -377.56372, -377.34256, -373.73972, -377.02332, -375.53345,\n",
" -378.89685, -377.6688 , -378.84888, -383.19537, -382.12585,\n",
" -382.6466 , -376.49536, -375.93127, -377.6048 , -373.5756 ,\n",
" -375.25043, -374.0218 , -374.23123, -377.78134, -375.96564,\n",
" -378.48746, -376.1507 , -374.9716 , -373.93018, -374.73456,\n",
" -376.74103, -376.92188, -375.25317, -374.2467 , -374.29163,\n",
" -376.87674, -376.17133, -376.6051 , -376.20227, -378.027 ,\n",
" -374.63226, -373.1444 , -378.2168 , -374.78253, -377.88095,\n",
" -376.7299 , -374.00055, -374.18256, -374.50098, -377.90918,\n",
" -377.5914 , -376.723 , -375.05054, -374.03278, -372.99585,\n",
" -377.1592 , -378.5726 , -382.3648 , -381.95084, -379.8012 ,\n",
" -377.27887, -374.89774, -374.56357, -375.84525, -377.89868,\n",
" -382.2562 , -375.49042, -379.07535, -374.9853 , -376.29773,\n",
" -374.1893 , -375.35574, -380.31897, -376.27448, -376.47168,\n",
" -374.6464 , -378.147 , -375.70886, -376.68924, -375.76617,\n",
" -376.2506 , -378.01782, -382.2915 , -374.9214 , -376.70178,\n",
" -376.90546, -377.411 , -375.27643, -373.80533, -372.5861 ,\n",
" -373.1949 , -376.22168, -377.56824, -378.8287 , -375.53308,\n",
" -374.56818, -382.15012, -374.25894, -381.0781 , -374.3027 ,\n",
" -380.56134, -376.60718, -376.42545, -375.17792, -376.3213 ,\n",
" -374.37567, -373.76025, -374.4405 , -375.02045, -375.70337,\n",
" -374.74585, -375.88458, -374.74628, -374.50763, -375.70026,\n",
" -377.86438, -378.53693, -378.09235, -381.33105, -376.464 ,\n",
" -378.4175 , -378.98584, -375.14954, -378.98206, -376.01047,\n",
" -376.45996, -377.2332 , -374.2134 , -375.89975, -375.65414,\n",
" -374.02612, -372.55133, -375.69962, -374.4325 , -376.36453,\n",
" -373.98578, -375.55103, -377.81378, -377.8647 , -377.20526,\n",
" -376.3604 , -381.58832, -376.55713, -376.03836, -376.24966,\n",
" -373.95 , -379.94614, -377.0968 , -377.84164, -376.44522,\n",
" -377.85254, -378.3142 , -375.67706, -380.1999 , -376.95044,\n",
" -373.88947, -374.81598, -376.07452, -377.36395, -379.3869 ,\n",
" -375.50687, -377.68784, -376.3739 , -375.44025, -375.18735,\n",
" -376.06638, -376.60834, -376.28995, -377.0169 , -380.38916,\n",
" -379.51105, -382.0304 , -380.0194 , -378.8652 , -375.53314,\n",
" -375.5034 , -374.6402 , -376.51093, -377.72595, -380.00995,\n",
" -379.5835 , -377.2257 , -379.3488 , -379.24078, -377.37265,\n",
" -381.14996, -376.83673, -376.86017, -376.98822, -376.59003,\n",
" -377.82474, -378.2244 , -376.83997, -375.96432, -374.3552 ,\n",
" -372.27533, -380.0143 , -374.36603, -373.62616, -373.85562,\n",
" -373.1689 , -374.1674 , -373.0071 , -373.59494, -376.51263,\n",
" -373.30582, -374.53265, -374.3034 , -379.04468, -374.61243,\n",
" -376.40887, -376.2823 , -381.99615, -379.41455, -377.62433,\n",
" -376.36798, -378.97614, -375.00592, -377.91043, -377.10544,\n",
" -375.4801 , -376.89624, -374.7605 , -375.33405, -374.52933,\n",
" -375.02234, -375.1839 , -376.97693, -376.73566, -376.3647 ,\n",
" -377.85864, -376.54773, -377.09457, -379.05438, -378.02417,\n",
" -375.28592, -375.15805, -374.34442, -380.4338 , -376.1878 ,\n",
" -373.36633, -376.19815, -376.89926, -376.19022, -377.86075,\n",
" -377.2689 , -377.83676, -375.71466, -377.34888, -375.27258,\n",
" -376.75476, -377.30792, -377.51782, -379.70868, -376.17413,\n",
" -375.9779 , -377.96228, -374.87674, -373.77216, -375.6394 ,\n",
" -375.8968 , -373.49118, -373.32666, -374.5882 , -375.28967,\n",
" -375.78192, -377.6034 , -377.48282, -377.46722, -376.3749 ,\n",
" -376.20535, -376.85107, -376.78308, -376.67972, -376.1621 ,\n",
" -378.71033, -374.8225 , -377.3939 , -373.82043, -375.69586,\n",
" -377.2488 , -374.63022, -374.32742, -374.76212, -379.32126,\n",
" -379.09344, -375.42993, -378.1632 , -375.69092, -375.98285,\n",
" -377.10352, -376.98743, -374.9332 , -375.23105, -374.81265,\n",
" -374.3098 , -372.58917, -373.61246, -376.50525, -376.5714 ,\n",
" -374.68048, -375. , -375.02234, -377.66193, -379.3037 ,\n",
" -378.351 , -375.5417 , -378.686 , -376.46448, -377.3991 ,\n",
" -376.28412, -379.40198, -374.2234 , -372.92682, -376.41956], dtype=float32)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Array([391.9341 , 392.08212, 391.02206, 389.15616, 398.34534, 398.74045,\n",
" 394.00363, 394.9679 , 392.753 , 392.53403, 390.58237, 389.0428 ,\n",
" 390.0239 , 393.4534 , 392.26123, 390.88834, 389.4346 , 388.27728,\n",
" 388.42407, 390.7624 , 393.82834, 396.3672 , 393.64532, 392.78622,\n",
" 394.62543, 392.79187, 394.0692 , 394.19113, 393.68393, 393.9558 ,\n",
" 394.51782, 394.80338, 394.38104, 392.66638, 392.84058, 393.24478,\n",
" 394.0837 , 394.68433, 390.162 , 392.5648 , 390.56827, 394.7597 ,\n",
" 394.33154, 393.9468 , 391.83417, 394.58472, 394.23224, 391.1751 ,\n",
" 391.31418, 399.5129 , 394.8937 , 393.32156, 389.23395, 389.13815,\n",
" 389.2338 , 390.08365, 392.15442, 391.80756, 396.48865, 392.57013,\n",
" 392.00992, 392.81107, 391.49927, 391.80618, 395.6378 , 393.09927,\n",
" 392.07812, 389.32758, 391.35922, 393.24258, 393.46533, 391.42642,\n",
" 390.91577, 390.9773 , 389.37076, 392.87485, 393.59995, 393.8794 ,\n",
" 394.30118, 392.2907 , 390.15256, 390.99207, 391.33752, 390.59207,\n",
" 394.78662, 393.71133, 395.89343, 397.57526, 394.3614 , 395.2866 ,\n",
" 400.6802 , 393.19537, 392.35477, 395.25443, 391.1807 , 392.4784 ,\n",
" 394.2002 , 390.61996, 393.63477, 394.57047, 396.10788, 393.12854,\n",
" 394.32095, 396.66772, 394.04712, 391.67096, 391.37128, 389.3575 ,\n",
" 389.4813 , 392.70554, 391.0798 , 391.58707, 391.3387 , 392.6452 ,\n",
" 391.1168 , 391.28464, 389.49527, 391.098 , 390.07748, 391.25574,\n",
" 392.2501 , 392.58688, 393.03354, 391.07687, 392.5799 , 390.90054,\n",
" 389.83463, 389.98987, 392.46228, 390.82193, 393.27582, 393.54163,\n",
" 392.20618, 388.82373, 390.24686, 391.1798 , 390.0974 , 391.47324,\n",
" 396.02036, 393.31866, 394.73904, 393.04593, 396.20193, 392.5486 ,\n",
" 392.00214, 396.90887, 394.09827, 391.98636, 391.64633, 392.54788,\n",
" 390.28278, 391.5285 , 391.0113 , 390.20108, 391.2806 , 391.9383 ,\n",
" 394.31247, 392.9718 , 395.74432, 395.6111 , 396.32532, 396.84842,\n",
" 394.43015, 396.00247, 402.50272, 392.72025, 391.83334, 392.79337,\n",
" 396.3226 , 401.59814, 397.6963 , 395.19052, 394.43784, 392.80142,\n",
" 390.1531 , 389.4234 , 389.03558, 389.0597 , 392.2272 , 390.56104,\n",
" 394.64798, 391.2173 , 392.151 , 388.85483, 393.61578, 395.56732,\n",
" 396.60648, 393.86707, 392.8924 , 392.639 , 393.36166, 394.42212,\n",
" 392.52884, 393.4237 , 394.6955 , 392.98947, 392.58792, 394.54013,\n",
" 395.2757 , 394.46317, 396.52585, 393.2268 , 391.0806 , 390.68488,\n",
" 390.83286, 393.68234, 391.00925, 389.52612, 392.32867, 391.63733,\n",
" 392.44458, 397.25595, 392.09634, 394.46027, 392.6832 , 393.11966,\n",
" 392.70135, 392.94568, 390.5427 , 391.2181 , 390.14978, 393.05313,\n",
" 392.1329 , 395.2773 , 390.55872, 389.75958, 392.8294 , 390.34613,\n",
" 390.57422, 393.61807, 393.4588 , 392.6946 , 393.0386 , 390.5007 ,\n",
" 391.86188, 392.18567, 393.70074, 391.2875 , 389.60342, 390.3574 ,\n",
" 392.36462, 396.8469 , 395.1043 , 393.78467, 392.90707, 394.79532,\n",
" 392.64337, 392.04562, 391.07858, 393.60815, 399.3589 , 395.53397,\n",
" 392.84903, 392.6835 , 391.1862 , 391.29715, 393.18088, 396.14114,\n",
" 396.67612, 394.8662 , 395.70645, 393.47675, 396.14685, 395.2865 ,\n",
" 391.64557, 392.49634, 393.31058, 395.3479 , 390.1821 , 392.41928,\n",
" 391.62433, 394.0529 , 392.24847, 391.0419 , 391.29785, 392.43967,\n",
" 391.05963, 392.9988 , 390.8053 , 391.57315, 392.09854, 396.18353,\n",
" 393.75366, 393.8414 , 391.85266, 396.80035, 394.54794, 399.54883,\n",
" 393.41476, 390.52176, 392.8705 , 390.99615, 391.3205 , 392.70792,\n",
" 392.3243 , 389.38223, 392.36218, 392.93887, 393.47202, 391.486 ,\n",
" 390.32257, 390.8464 , 389.24442, 393.06158, 390.1328 , 394.20773,\n",
" 392.92813, 391.93857, 393.84244, 393.34424, 392.4594 , 392.7215 ,\n",
" 389.22064, 390.21176, 390.24298, 390.88086, 388.82172, 390.49158,\n",
" 390.16858, 392.40662, 393.3886 , 394.6822 , 393.8078 , 396.0063 ,\n",
" 393.62537, 392.98868, 395.08075, 394.6271 , 389.055 , 390.7642 ,\n",
" 390.36136, 394.7984 , 389.74716, 392.25842, 392.42697, 393.6167 ,\n",
" 390.31824, 391.90237, 399.44983, 393.19128, 393.52548, 392.53802,\n",
" 390.68805, 391.63797, 396.24985, 394.57785, 392.13458, 390.36664,\n",
" 390.1804 , 390.89145, 395.8922 , 396.92868, 390.8619 , 391.1419 ,\n",
" 392.4267 , 393.0737 , 397.35675, 398.8355 , 396.29037, 391.05008,\n",
" 389.4605 , 391.93326, 391.39075, 390.61874, 394.65973, 394.07922,\n",
" 394.02365, 397.24677, 397.92264, 392.71225, 393.26868, 392.57773,\n",
" 389.75055, 391.72717, 392.82794, 390.9369 , 392.5645 , 391.68805,\n",
" 393.5547 , 392.33005, 389.79407, 396.49945, 393.72034, 393.51117,\n",
" 392.1612 , 390.8545 , 390.19092, 389.54028, 390.081 , 393.38885,\n",
" 389.43814, 391.40814, 392.77875, 390.07477, 389.34094, 390.62073,\n",
" 391.42688, 396.5186 , 397.25574, 388.39703, 391.31366, 398.72787,\n",
" 391.05505, 392.2018 , 391.27768, 393.10678, 395.05096, 393.76315,\n",
" 392.66342, 392.51956, 390.97275, 390.50626, 393.93262, 391.706 ,\n",
" 390.8292 , 394.87894, 393.27704, 390.10495, 389.4763 , 388.9353 ,\n",
" 388.51953, 388.58496, 389.6656 , 394.77295, 391.35245, 391.1977 ,\n",
" 391.07584, 391.1299 , 390.0027 , 392.0007 , 392.77393, 392.88647,\n",
" 388.6409 , 392.9662 , 390.44272, 391.4916 , 389.46524, 392.48782,\n",
" 391.1928 , 391.6972 , 392.49786, 397.5695 , 391.7954 , 391.18668,\n",
" 394.03104, 391.3363 , 393.5302 , 391.74683, 389.46597, 389.0724 ,\n",
" 395.04776, 395.0067 , 394.68988, 392.55582, 391.55222, 391.8968 ,\n",
" 392.51648, 389.999 , 390.82315, 391.85864, 397.0075 , 393.12473,\n",
" 394.1504 , 388.86996, 390.43127, 393.28723, 394.8042 , 394.32358,\n",
" 394.70056, 394.62448, 393.04788, 391.87747, 392.00067, 390.53983,\n",
" 390.52933, 390.52118, 391.3734 , 389.67596, 391.80765, 391.9735 ,\n",
" 388.86786, 389.31982, 389.36093, 390.76718, 393.16095, 392.73416,\n",
" 392.00232, 391.61856, 394.8812 , 398.4053 , 398.8124 , 393.909 ,\n",
" 399.0349 , 393.04034, 390.39853, 390.08875, 389.0157 , 388.95517,\n",
" 392.23053, 390.5207 ], dtype=float32)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mcmc.get_extra_fields()[\"potential_energy\"]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(774.734619140625, 755.6143798828125)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"samples = mcmc.get_samples()\n",
"csiborgtools.numpyro_gof(model, mcmc)"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Reading LOSS fitted to Carrick2015 with ksmooth = 0.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"BIC = 773.225037 +- 0.000000\n",
"AIC = 754.104797 +- 0.000000\n",
"logZ = -356.240234 +- 0.000000\n",
"chi2 = 1.207006 +- 0.228673\n"
]
}
],
"source": [
"data, names, __ = read_samples(\"LOSS\", \"Carrick2015\", 0, return_MCsamples=False)"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"key = \"beta\"\n",
"\n",
"plt.figure()\n",
"plt.hist(data[:, names.index(key)], bins=\"auto\", density=1, histtype=\"step\")\n",
"plt.hist(samples[key], bins=\"auto\", density=1, histtype=\"step\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 119,
"metadata": {},
"outputs": [],
"source": [
"samples = mcmc.get_samples()"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Array([-369.51086, -369.97043, -370.17526, ..., -372.54755, -376.03503,\n",
" -374.88458], dtype=float32)"
]
},
"execution_count": 120,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"samples[\"ll_values\"]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 121,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"11"
]
},
"execution_count": 121,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nparam = 0\n",
"for val in samples.values():\n",
" if val.ndim == 1:\n",
" nparam += 1\n",
" elif val.ndim == 2:\n",
" nparam += val.shape[-1]\n",
" else:\n",
" raise ValueError(\"Invalid dimensionality of samples to count the number of parameters.\")\n",
" \n",
"\n",
"nparam\n",
" \n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 122,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"|V| = 197.8179931640625 +- 99.38513946533203\n",
"l = 213.2463176948003 +- 116.2995226818662\n",
"b = -5.31730133782022 +- 27.004291397137365\n",
"beta = 0.4450029134750366 +- 0.10768470168113708\n"
]
}
],
"source": [
"Vmag = np.sqrt(samples[\"Vext\"][:, 0]**2 + samples[\"Vext\"][:, 1]**2 + samples[\"Vext\"][:, 2]**2)\n",
"\n",
"V = np.vstack([samples[\"Vext\"][:, 0], samples[\"Vext\"][:, 1], samples[\"Vext\"][:, 2]]).T\n",
"V = csiborgtools.cartesian_to_radec(V)\n",
"\n",
"l, b = csiborgtools.radec_to_galactic(V[:, 1], V[:, 2])\n",
"\n",
"print(f\"|V| = {np.mean(Vmag)} +- {np.std(Vmag)}\")\n",
"print(f\"l = {np.mean(l)} +- {np.std(l)}\")\n",
"print(f\"b = {np.mean(b)} +- {np.std(b)}\")\n",
"if \"beta\" in samples:\n",
" print(f\"beta = {np.mean(samples['beta'])} +- {np.std(samples['beta'])}\")"
]
},
{
"cell_type": "code",
"execution_count": 123,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 1390x1390 with 36 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"data = [l, b, Vmag]\n",
"labels = [r\"$l$\", r\"$b$\", r\"$|\\bf{V}_{\\rm ext}|$\"]\n",
"if \"alpha\" in samples:\n",
" data.append(samples[\"alpha\"])\n",
" labels.append(r\"$\\alpha$\")\n",
"\n",
"if \"beta\" in samples:\n",
" data.append(samples[\"beta\"])\n",
" labels.append(r\"$\\beta$\")\n",
"\n",
"if \"h\" in samples:\n",
" data.append(samples[\"h\"])\n",
" labels.append(r\"$h$\")\n",
"\n",
"if \"sigma_v\" in samples:\n",
" data.append(samples[\"sigma_v\"])\n",
" labels.append(r\"$\\sigma_v$\")\n",
"\n",
"data = np.vstack(data).T\n",
"fig = corner.corner(data, labels=labels, show_titles=True, title_fmt=\".3f\", title_kwargs={\"fontsize\": 12}, smooth=1)\n",
"fig.savefig(f\"../../plots/mock_{simname}_{catalogue}.png\", dpi=500, bbox_inches=\"tight\")"
]
},
{
"cell_type": "code",
"execution_count": 125,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Reading Pantheon+ fitted to csiborg2_main with ksmooth = 0.\n",
"BIC = 10055.604150 +- 27.237237\n",
"AIC = 10010.412744 +- 27.237237\n",
"logZ = -5000.136133 +- 23.062465\n",
"chi2 = 0.985968 +- 0.117400\n",
"Removed no burn in\n"
]
},
{
"data": {
"text/plain": [
"<getdist.mcsamples.MCSamples at 0x7f34904c5b90>"
]
},
"execution_count": 125,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"read_samples(\"Pantheon+\", \"csiborg2_main\", 0, return_MCsamples=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Vizualize the results"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"data, names, gof = read_samples(\"Pantheon+_groups\", \"Carrick2015\", 0)\n",
"\n",
"fig = corner.corner(data, labels=names_to_latex(names, True), show_titles=True,\n",
" title_fmt=\".3f\", title_kwargs={\"fontsize\": 12}, smooth=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{LOSS}$ comparison"
]
},
{
"cell_type": "code",
"execution_count": 126,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Reading LOSS fitted to Carrick2015 with ksmooth = 0.\n",
"BIC = 773.225037 +- 0.000000\n",
"AIC = 754.104797 +- 0.000000\n",
"logZ = -356.240234 +- 0.000000\n",
"chi2 = 1.207006 +- 0.228673\n",
"Removed no burn in\n"
]
}
],
"source": [
"LOSS_Carrick_0 = read_samples(\"LOSS\", \"Carrick2015\", 0, return_MCsamples=True)\n",
"# LOSS_Carrick_1 = read_samples(\"LOSS\", \"Carrick2015\", 1, return_MCsamples=True)\n",
"\n",
"# LOSS_CB1_0 = read_samples(\"LOSS\", \"csiborg1\", 0, return_MCsamples=True)\n",
"# LOSS_CB1_1 = read_samples(\"LOSS\", \"csiborg1\", 1, return_MCsamples=True)\n",
"\n",
"# LOSS_CB2_0 = read_samples(\"LOSS\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"# LOSS_CB2_1 = read_samples(\"LOSS\", \"csiborg2_main\", 1, return_MCsamples=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" LOSS_Carrick_0,\n",
" # LOSS_Carrick_1,\n",
" # LOSS_CB1_0,\n",
" LOSS_CB1_1,\n",
" LOSS_CB2_0,\n",
" LOSS_CB2_1,\n",
" ]\n",
"\n",
"# params = [\"l\", \"b\", \"Vmag\", \"beta\"]\n",
"params = None\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, params=params, filled=True, legend_loc='upper right', )\n",
"g.export(f\"../plots/LOSS_comparison.png\", dpi=500,)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{Foundation}$ comparison"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"FOUNDATION_Carrick_0 = read_samples(\"Foundation\", \"Carrick2015\", 0, return_MCsamples=True)\n",
"FOUNDATION_Carrick_1 = read_samples(\"Foundation\", \"Carrick2015\", 1, return_MCsamples=True)\n",
"\n",
"FOUNDATION_CB1_0 = read_samples(\"Foundation\", \"csiborg1\", 0, return_MCsamples=True)\n",
"FOUNDATION_CB1_1 = read_samples(\"Foundation\", \"csiborg1\", 1, return_MCsamples=True)\n",
"\n",
"FOUNDATION_CB2_0 = read_samples(\"Foundation\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"FOUNDATION_CB2_1 = read_samples(\"Foundation\", \"csiborg2_main\", 1, return_MCsamples=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" FOUNDATION_Carrick_0,\n",
" # FOUNDATION_Carrick_1,\n",
" # FOUNDATION_CB1_0,\n",
" FOUNDATION_CB1_1,\n",
" FOUNDATION_CB2_0,\n",
" FOUNDATION_CB2_1,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
"g.export(f\"../plots/FOUNDATION_comparison.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{Pantheon+}$ comparison"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"PANTHEONP_Carrick_0 = read_samples(\"Pantheon+\", \"Carrick2015\", 0, return_MCsamples=True)\n",
"PANTHEONP_Carrick_1 = read_samples(\"Pantheon+\", \"Carrick2015\", 1, return_MCsamples=True)\n",
"\n",
"# PANTHEONP_CB1_0 = read_samples(\"Pantheon+\", \"csiborg1\", 0, return_MCsamples=True)\n",
"# PANTHEONP_CB1_1 = read_samples(\"Pantheon+\", \"csiborg1\", 1, return_MCsamples=True)\n",
"\n",
"PANTHEONP_CB2_0 = read_samples(\"Pantheon+\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"PANTHEONP_CB2_1 = read_samples(\"Pantheon+\", \"csiborg2_main\", 1, return_MCsamples=True)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" PANTHEONP_Carrick_0,\n",
" # PANTHEONP_Carrick_1,\n",
" # PANTHEONP_CB1_0,\n",
" # PANTHEONP_CB1_1,\n",
" PANTHEONP_CB2_0,\n",
" PANTHEONP_CB2_1,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
"# g.export(f\"../plots/PANTHEONP_comparison.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{Pantheon+}$ groups"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"LG = -1\n",
"\n",
"PANTHEONP_Carrick = read_samples(\"Pantheon+\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG, )\n",
"PANTHEONP_Carrick_Groups = read_samples(\"Pantheon+_groups\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"PANTHEONP_Carrick_Groups_zSN = read_samples(\"Pantheon+_groups_zSN\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"PANTHEONP_Carrick_zSN = read_samples(\"Pantheon+_zSN\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"\n",
"# ksmooth = 1\n",
"# PANTHEONP_CB2 = read_samples(\"Pantheon+\", \"csiborg2_main\", ksmooth, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# PANTHEONP_CB2_Groups = read_samples(\"Pantheon+_groups\", \"csiborg2_main\", ksmooth, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# PANTHEONP_CB2_Groups_zSN = read_samples(\"Pantheon+_groups_zSN\", \"csiborg2_main\", ksmooth, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"params = [\"Vmag\", \"l\", \"b\"]\n",
"CMB = MCSamples(samples=multivariate_normal([627, 276, 30], [22, 3, 3]).rvs(size=20000),\n",
" names=params, labels=names_to_latex(params, True), label=\"CMB\")\n",
"\n",
"\n",
"X = [\n",
" PANTHEONP_Carrick,\n",
" # PANTHEONP_Carrick_Groups,\n",
" # PANTHEONP_Carrick_Groups_zSN,\n",
" PANTHEONP_Carrick_zSN,\n",
" # PANTHEONP_CB2,\n",
" # PANTHEONP_CB2_Groups,\n",
" # PANTHEONP_CB2_Groups_zSN,\n",
" # CMB,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
"g.export(f\"../../plots/PANTHEON_GROUPS_Carrick_comparison_LG.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{2MTF}$ comparison"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Reading 2MTF fitted to Carrick2015 with ksmooth = 0.\n",
"BIC = 19517.031250 +- 0.000000\n",
"AIC = 19470.867188 +- 0.000000\n",
"logZ = -9731.227539 +- 0.000000\n",
"chi2 = 0.000000 +- 0.000000\n",
"Removed no burn in\n",
"\n",
"Reading 2MTF fitted to Carrick2015 with ksmooth = 1.\n",
"BIC = 19632.685547 +- 0.000000\n",
"AIC = 19586.521484 +- 0.000000\n",
"logZ = -9788.892578 +- 0.000000\n",
"chi2 = 0.000000 +- 0.000000\n",
"Removed no burn in\n",
"\n",
"Reading 2MTF fitted to csiborg1 with ksmooth = 0.\n",
"BIC = 19922.607596 +- 33.988735\n",
"AIC = 19876.443533 +- 33.988735\n",
"logZ = -9934.180538 +- 17.010780\n",
"chi2 = 0.000000 +- 0.000000\n",
"Removed no burn in\n",
"\n",
"Reading 2MTF fitted to csiborg1 with ksmooth = 1.\n",
"BIC = 19840.144473 +- 31.749545\n",
"AIC = 19793.980411 +- 31.749545\n",
"logZ = -9891.951984 +- 16.078607\n",
"chi2 = 0.000000 +- 0.000000\n",
"Removed no burn in\n",
"\n",
"Reading 2MTF fitted to csiborg2_main with ksmooth = 0.\n",
"BIC = 19248.799609 +- 38.583873\n",
"AIC = 19202.635547 +- 38.583873\n",
"logZ = -9598.394336 +- 19.251815\n",
"chi2 = 0.000000 +- 0.000000\n",
"Removed no burn in\n",
"\n",
"Reading 2MTF fitted to csiborg2_main with ksmooth = 1.\n",
"BIC = 19167.596582 +- 20.190445\n",
"AIC = 19121.432520 +- 20.190445\n",
"logZ = -9555.558252 +- 9.820362\n",
"chi2 = 0.000000 +- 0.000000\n",
"Removed no burn in\n"
]
}
],
"source": [
"TWOMTF_Carrick_0 = read_samples(\"2MTF\", \"Carrick2015\", 0, return_MCsamples=True)\n",
"TWOMTF_Carrick_1 = read_samples(\"2MTF\", \"Carrick2015\", 1, return_MCsamples=True)\n",
"\n",
"TWOMTF_CB1_0 = read_samples(\"2MTF\", \"csiborg1\", 0, return_MCsamples=True)\n",
"TWOMTF_CB1_1 = read_samples(\"2MTF\", \"csiborg1\", 1, return_MCsamples=True)\n",
"\n",
"TWOMTF_CB2_0 = read_samples(\"2MTF\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"TWOMTF_CB2_1 = read_samples(\"2MTF\", \"csiborg2_main\", 1, return_MCsamples=True)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" TWOMTF_Carrick_0,\n",
" # TWOMTF_Carrick_1,\n",
" # TWOMTF_CB1_0,\n",
" TWOMTF_CB1_1,\n",
" TWOMTF_CB2_0,\n",
" TWOMTF_CB2_1,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
"g.export(f\"../plots/2MTF_comparison.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{SFI++ galaxies}$ comparison"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"SFIGAL_Carrick_0 = read_samples(\"SFI_gals\", \"Carrick2015\", 0, return_MCsamples=True)\n",
"SFIGAL_Carrick_1 = read_samples(\"SFI_gals\", \"Carrick2015\", 1, return_MCsamples=True)\n",
"\n",
"# SFIGAL_CB1_0 = read_samples(\"SFI_gals\", \"csiborg1\", 0, return_MCsamples=True)\n",
"# SFIGAL_CB1_1 = read_samples(\"SFI_gals\", \"csiborg1\", 1, return_MCsamples=True)\n",
"\n",
"SFIGAL_CB2_0 = read_samples(\"SFI_gals\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"SFIGAL_CB2_1 = read_samples(\"SFI_gals\", \"csiborg2_main\", 1, return_MCsamples=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" SFIGAL_Carrick_0,\n",
" # SFIGAL_Carrick_1,\n",
" # SFIGAL_CB1_0,\n",
" # SFIGAL_CB1_1,\n",
" # SFIGAL_CB2_0,\n",
" SFIGAL_CB2_1,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
"g.export(f\"../plots/SFI_gals_comparison.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### $\\texttt{SFI++ groups}$ comparison"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"SFIGROUP_Carrick_0 = read_samples(\"SFI_groups\", \"Carrick2015\", 0, return_MCsamples=True)\n",
"SFIGROUP_Carrick_1 = read_samples(\"SFI_groups\", \"Carrick2015\", 1, return_MCsamples=True)\n",
"\n",
"SFIGROUP_CB2_0 = read_samples(\"SFI_groups\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"SFIGROUP_CB2_1 = read_samples(\"SFI_groups\", \"csiborg2_main\", 1, return_MCsamples=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" SFIGROUP_Carrick_0,\n",
2024-04-08 22:14:43 +00:00
" SFIGAL_Carrick_0,\n",
" # SFIGROUP_Carrick_1,\n",
" # SFIGROUP_CB2_0,\n",
2024-04-08 22:14:43 +00:00
" # SFIGROUP_CB2_1,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
2024-04-08 22:14:43 +00:00
"g.export(f\"../plots/SFI_gals_vs_groups_comparison.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### SN to TF comparison"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"LG = 0\n",
2024-04-02 08:28:57 +00:00
"\n",
"# PANTHEONP_Carrick = read_samples(\"Pantheon+\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG, )\n",
"# PANTHEONP_Groups_Carrick = read_samples(\"Pantheon+_groups\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG, )\n",
"# TWOMTF_Carrick = read_samples(\"2MTF\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# SFIGAL_Carrick = read_samples(\"SFI_gals\", \"Carrick2015\", 0, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"\n",
"k = 1\n",
"PANTHEONP_CB2 = read_samples(\"Pantheon+\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG, )\n",
"PANTHEONP_Groups_CB2 = read_samples(\"Pantheon+_groups\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG, )\n",
"TWOMTF_CB2 = read_samples(\"2MTF\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"SFIGAL_CB2 = read_samples(\"SFI_gals\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"params = [\"Vmag\", \"l\", \"b\"]\n",
"CMB = MCSamples(samples=multivariate_normal([627, 276, 30], [22, 3, 3]).rvs(size=20000),\n",
" names=params, labels=names_to_latex(params, True), label=\"CMB\")\n",
"\n",
"\n",
"X = [\n",
" # PANTHEONP_Carrick,\n",
" # PANTHEONP_Groups_Carrick,\n",
" # TWOMTF_Carrick,\n",
" # SFIGAL_Carrick,\n",
" PANTHEONP_CB2,\n",
" PANTHEONP_Groups_CB2,\n",
" TWOMTF_CB2,\n",
" SFIGAL_CB2,\n",
" CMB,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
"# g.export(f\"../../plots/SN_TF_CB2_consistency.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mock $\\texttt{CB2}$ comparison"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"SMALLMOCK_CB2_0 = read_samples(\"CB2_small\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"SMALLMOCK_CB2_1 = read_samples(\"CB2_small\", \"csiborg2_main\", 1, return_MCsamples=True)\n",
"\n",
"LARGEMOCK_CB2_0 = read_samples(\"CB2_large\", \"csiborg2_main\", 0, return_MCsamples=True)\n",
"LARGEMOCK_CB2_1 = read_samples(\"CB2_large\", \"csiborg2_main\", 1, return_MCsamples=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
2024-04-02 08:28:57 +00:00
" # SMALLMOCK_CB2_0,\n",
" # SMALLMOCK_CB2_1,\n",
" LARGEMOCK_CB2_0,\n",
" LARGEMOCK_CB2_1,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, filled=True, legend_loc='upper right')\n",
2024-04-02 08:28:57 +00:00
"g.export(f\"../plots/CB2_mocks_large.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## External flow consistency"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Carrick2015"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" # LOSS_Carrick_0,\n",
" # FOUNDATION_Carrick_0,\n",
" PANTHEONP_Carrick_0,\n",
" TWOMTF_Carrick_0,\n",
" SFIGAL_Carrick_0,\n",
" ]\n",
"\n",
"params = [\"Vmag\", \"l\", \"b\", \"beta\"]\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, params=params, filled=True, legend_loc='upper right',)\n",
"g.export(f\"../plots/Carrick2015_external_flow.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSiBORG1"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" # LOSS_CB1_1,\n",
" # FOUNDATION_CB1_1,\n",
" PANTHEONP_CB1_1,\n",
" TWOMTF_CB1_1,\n",
" # SFIGAL_CB1_1,\n",
" ]\n",
"\n",
"params = [\"Vmag\", \"l\", \"b\", \"beta\"]\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, params=params, filled=True, legend_loc='upper right',)\n",
"g.export(f\"../plots/CB1_external_flow.png\", dpi=500,)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### CSiBORG2"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"X = [\n",
" # LOSS_CB2_1,\n",
" # FOUNDATION_CB2_1,\n",
" PANTHEONP_CB2_1,\n",
" TWOMTF_CB2_1,\n",
" SFIGAL_CB2_1,\n",
" ]\n",
"\n",
"params = [\"Vmag\", \"l\", \"b\", \"beta\"]\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, params=params, filled=True, legend_loc='upper right',)\n",
"g.export(f\"../plots/CB2_external_flow.png\", dpi=500,)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"k = 1\n",
"LG = 0\n",
"\n",
"# Carrick\n",
"# LOSS_Carrick_LG = read_samples(\"LOSS\", \"Carrick2015\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# FOUNDATION_Carrick_LG = read_samples(\"Foundation\", \"Carrick2015\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# PANTHEON_Carrick_LG = read_samples(\"Pantheon+\", \"Carrick2015\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# TWOMTF_Carrick_LG = read_samples(\"2MTF\", \"Carrick2015\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"SFIGAL_Carrick_LG = read_samples(\"SFI_gals\", \"Carrick2015\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"SFIGROUPS_Carrick_LG = read_samples(\"SFI_groups\", \"Carrick2015\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"\n",
"\n",
"# # CSiBORG2\n",
"# LOSS_CB2_LG = read_samples(\"LOSS\", \"csiborg2_main\", k, return_MCsamples=True,subtract_LG_velocity=LG)\n",
"# FOUNDATION_CB2_LG = read_samples(\"Foundation\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# PANTHEON_CB2_LG = read_samples(\"Pantheon+\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# TWOMTF_CB2_LG = read_samples(\"2MTF\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"SFIGAL_CB2_LG = read_samples(\"SFI_gals\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"SFIGROUP_CB2_LG = read_samples(\"SFI_groups\", \"csiborg2_main\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"\n",
"# # CSiBORG1\n",
"# LOSS_CB1_LG = read_samples(\"LOSS\", \"csiborg1\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# FOUNDATION_CB1_LG = read_samples(\"Foundation\", \"csiborg1\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# PANTHEON_CB1_LG = read_samples(\"Pantheon+\", \"csiborg1\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# TWOMTF_CB1_LG = read_samples(\"2MTF\", \"csiborg1\", k, return_MCsamples=True, subtract_LG_velocity=LG)\n",
"# SFIGAL_CB1_LG = read_samples(\"SFI_gals\", \"csiborg1\", k, return_MCsamples=True, subtract_LG_velocity=LG)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"params = [\"Vmag\", \"l\", \"b\"]\n",
"CMB = MCSamples(samples=multivariate_normal([627, 276, 30], [22, 3, 3]).rvs(size=20000),\n",
" names=params, labels=names_to_latex(params, True), label=\"CMB\")\n",
"\n",
"X = [\n",
" # LOSS_Carrick_LG,\n",
" # FOUNDATION_Carrick_LG,\n",
" # PANTHEON_Carrick_LG,\n",
" # TWOMTF_Carrick_LG,\n",
" # SFIGAL_Carrick_LG,\n",
" # SFIGROUPS_Carrick_LG,\n",
" # LOSS_CB1_LG,\n",
" # FOUNDATION_CB1_LG,\n",
" # PANTHEON_CB1_LG,\n",
" # TWOMTF_CB1_LG,\n",
" # SFIGAL_CB1_LG,\n",
" # LOSS_CB2_LG,\n",
" # FOUNDATION_CB2_LG,\n",
" # PANTHEON_CB2_LG,\n",
" # TWOMTF_CB2_LG,\n",
" SFIGAL_CB2_LG,\n",
" SFIGROUP_CB2_LG,\n",
" CMB,\n",
" ]\n",
"\n",
"g = plots.get_subplot_plotter()\n",
"g.settings.figure_legend_frame = False\n",
"g.settings.alpha_filled_add = 0.75\n",
"# g.settings.title_limit_fontsize = 14\n",
"g.triangle_plot(X, params=params, filled=True, legend_loc='upper right', )\n",
"# g.export(f\"../plots/ALL_dipole.png\", dpi=500,)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "venv_csiborg",
"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.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}