{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "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", "from os.path import exists\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from corner import corner\n", "from getdist import plots\n", "from astropy.coordinates import angular_separation\n", "import scienceplots\n", "from os.path import exists\n", "import seaborn as sns\n", "import matplotlib as mpl\n", "\n", "\n", "from reconstruction_comparison import *\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "%matplotlib inline\n", "\n", "paths = csiborgtools.read.Paths(**csiborgtools.paths_glamdring)\n", "fdir = \"/mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Quick checks" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fname = paths.flow_validation(\n", " fdir, \"Carrick2015\", \"2MTF\", inference_method=\"mike\",\n", " sample_alpha=True, sample_beta=None,\n", " zcmb_max=0.05)\n", "\n", "\n", "get_gof(\"neg_lnZ_harmonic\", fname)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "catalogue = \"CF4_TFR_i\"\n", "simname = \"Carrick2015\"\n", "zcmb_max=0.05\n", "sample_beta = None\n", "sample_alpha = True\n", "\n", "fname_bayes = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"bayes\",\n", " sample_alpha=sample_alpha, sample_beta=sample_beta,\n", " zcmb_max=zcmb_max)\n", "\n", "fname_mike = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"mike\",\n", " sample_alpha=sample_alpha, sample_beta=sample_beta,\n", " zcmb_max=zcmb_max)\n", "\n", "\n", "X = []\n", "labels = [\"Full posterior\", \"Delta posterior\"]\n", "for i, fname in enumerate([fname_bayes, fname_mike]):\n", " samples = get_samples(fname)\n", " if i == 1:\n", " print(samples.keys())\n", "\n", " X.append(samples_to_getdist(samples, labels[i]))\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "params = [f\"a_{catalogue}\", f\"b_{catalogue}\", f\"c_{catalogue}\", f\"e_mu_{catalogue}\",\n", " \"Vmag\", \"l\", \"b\", \"sigma_v\", \"beta\", f\"alpha_{catalogue}\"]\n", "# params = [\"beta\", f\"a_{catalogue}\", f\"b_{catalogue}\", f\"e_mu_{catalogue}\"]\n", "# params = [\"Vmag\", \"l\", \"b\", \"sigma_v\", \"beta\", f\"mag_cal_{catalogue}\", f\"alpha_cal_{catalogue}\", f\"beta_cal_{catalogue}\", f\"e_mu_{catalogue}\"]\n", "\n", "\n", "g = plots.get_subplot_plotter()\n", "g.settings.figure_legend_frame = False\n", "g.settings.alpha_filled_add = 0.75\n", "\n", "g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", "plt.gcf().suptitle(catalogue_to_pretty(catalogue), y=1.025)\n", "plt.gcf().tight_layout()\n", "# plt.gcf().savefig(f\"../../plots/method_comparison_{simname}_{catalogue}.png\", dpi=500, bbox_inches='tight')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# catalogue = [\"LOSS\", \"Foundation\"]\n", "catalogue = \"CF4_TFR_i\"\n", "simname = \"IndranilVoid_exp\"\n", "zcmb_max = 0.05\n", "sample_alpha = False\n", "\n", "fname = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"mike\",\n", " sample_mag_dipole=True,\n", " sample_beta=False,\n", " sample_alpha=sample_alpha, zcmb_max=zcmb_max)\n", "\n", "\n", "samples = get_samples(fname, convert_Vext_to_galactic=True)\n", "\n", "samples, labels, keys = samples_for_corner(samples)\n", "fig = corner(samples, labels=labels, show_titles=True,\n", " title_kwargs={\"fontsize\": 12}, smooth=1)\n", "# fig.savefig(\"../../plots/test.png\", dpi=250)\n", "fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Paper plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 0. LOS velocity example" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fpath = \"/mnt/extraspace/rstiskalek/catalogs/PV/CF4/CF4_TF-distances.hdf5\"\n", "\n", "loader_carrick = csiborgtools.flow.DataLoader(\"Carrick2015\", [0], \"CF4_TFR_i\", fpath, paths, ksmooth=0, )\n", "loader_lilow = csiborgtools.flow.DataLoader(\"Lilow2024\", [0], \"CF4_TFR_i\", fpath, paths, ksmooth=0, )\n", "loader_cb2 = csiborgtools.flow.DataLoader(\"csiborg2_main\", [i for i in range(20)], \"CF4_TFR_i\", fpath, paths, ksmooth=0, )\n", "loader_cb2X = csiborgtools.flow.DataLoader(\"csiborg2X\", [i for i in range(20)], \"CF4_TFR_i\", fpath, paths, ksmooth=0, )\n", "loader_CF4 = csiborgtools.flow.DataLoader(\"CF4\", [i for i in range(20)], \"CF4_TFR_i\", fpath, paths, ksmooth=0, )\n", "loader_CLONES = csiborgtools.flow.DataLoader(\"CLONES\", [0], \"CF4_TFR_i\", fpath, paths, ksmooth=0, )\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "angdist = angular_separation(\n", " np.deg2rad(loader_carrick.cat[\"RA\"]), np.deg2rad(loader_carrick.cat[\"DEC\"]),\n", " np.deg2rad(csiborgtools.clusters[\"Virgo\"].spherical_pos[1]),\n", " np.deg2rad(csiborgtools.clusters[\"Virgo\"].spherical_pos[2]))\n", "k = np.argmin(angdist)\n", "print([loader_carrick.cat[\"RA\"][k], loader_carrick.cat[\"DEC\"][k]])\n", "print(csiborgtools.clusters[\"Virgo\"].spherical_pos[1:])\n", "print(csiborgtools.clusters[\"Virgo\"].spherical_pos[0])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "loaders = [loader_carrick, loader_lilow, loader_CF4, loader_cb2, loader_cb2X, loader_CLONES]\n", "simnames = [\"Carrick2015\", \"Lilow2024\", \"CF4\", \"csiborg2_main\", \"csiborg2X\", \"CLONES\"]\n", "\n", "\n", "with plt.style.context(\"science\"):\n", " plt.rcParams.update({'font.size': 9})\n", " plt.figure()\n", " cols = plt.rcParams['axes.prop_cycle'].by_key()['color']\n", "\n", " for i, (simname, loader) in enumerate(zip(simnames, loaders)):\n", " r = loader.rdist\n", " vrad = loader.los_radial_velocity[:, k, :]\n", "\n", " if simname == \"Carrick2015\":\n", " vrad *= 0.43\n", "\n", " if len(vrad) > 1:\n", " ylow, yhigh = np.percentile(vrad, [16, 84], axis=0)\n", " plt.fill_between(r, ylow, yhigh, alpha=0.66, color=cols[i],\n", " label=simname_to_pretty(simname))\n", " else:\n", " plt.plot(r, vrad[0], label=simname_to_pretty(simname), c=cols[i])\n", "\n", " plt.xlabel(r\"$r ~ [\\mathrm{Mpc} / h]$\")\n", " plt.ylabel(r\"$V_{\\rm rad} ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", "\n", " plt.xlim(0, 90)\n", " plt.ylim(-1000, 1000)\n", " plt.legend(ncols=2, fontsize=\"small\")\n", " plt.axvline(12.045, zorder=0, c=\"k\", ls=\"--\", alpha=0.75)\n", "\n", " plt.tight_layout()\n", " plt.savefig(\"../../plots/LOS_example.pdf\", dpi=450, bbox_inches='tight')\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Evidence comparison" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "zcmb_max = 0.05\n", "\n", "sims = [\"Carrick2015\", \"Lilow2024\", \"csiborg2_main\", \"csiborg2X\", \"manticore_2MPP_N128_DES_V1\", \"CF4\", \"CLONES\"]\n", "catalogues = [\"LOSS\", \"Foundation\", \"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "\n", "y_BIC = np.full((len(catalogues), 2, len(sims)), np.nan)\n", "y_lnZ = np.full_like(y_BIC, np.nan)\n", "\n", "for i, catalogue in enumerate(catalogues):\n", " for j in [0, 1]:\n", " for k, simname in enumerate(sims):\n", " fname = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"mike\",\n", " sample_alpha=simname != \"IndranilVoid_exp\",\n", " zcmb_max=zcmb_max, smooth=j)\n", "\n", " # y_BIC[i, j] = get_gof(\"BIC\", fname)z\n", " y_lnZ[i, j, k] = - get_gof(\"neg_lnZ_harmonic\", fname) / np.log(10)\n", "\n", " y_lnZ[i, j] -= y_lnZ[i, j].min()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.patches as mpatches\n", "cmap = mpl.colormaps.get_cmap(\"coolwarm\")\n", "\n", "\n", "def make_colours(y, n, k):\n", " sorted_indices = np.argsort(y[n, k])[::-1] # Sort in descending order\n", " # Initialize colors to gray\n", " colors = ['olivedrab'] * len(y[n, k])\n", "\n", " # Assign specific colors to top 3 values\n", " if len(sorted_indices) >= 1:\n", " colors[sorted_indices[0]] = '#FFD700' # Highest value gets gold\n", " if len(sorted_indices) >= 2:\n", " colors[sorted_indices[1]] = '#C0C0C0' # Second highest gets silver\n", " if len(sorted_indices) >= 3:\n", " colors[sorted_indices[2]] = \"#CD7F32\" # Third highest gets bronze\n", " return colors\n", "\n", "def plot_bars_with_varying_width(ax, x, y, colors, bar_width, reduced_width, reduced_alpha):\n", " sorted_indices = np.argsort(y)[::-1]\n", " \n", " for i, height in enumerate(y):\n", " if i in sorted_indices[:3]: # Top 3 bars\n", " ax.bar(x[i], height, color=colors[i], width=bar_width)\n", " else: # Non-top 3 bars\n", " ax.bar(x[i], height, color=colors[i], width=reduced_width, alpha=reduced_alpha)\n", "\n", "\n", "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", " figwidth = 8.3\n", " fig, axs = plt.subplots(2, 3, figsize=(figwidth, 0.55 * figwidth))\n", " fig.subplots_adjust(hspace=0, wspace=0)\n", "\n", " x = np.arange(len(sims))\n", " y = y_lnZ\n", " bar_width = 0.6 # Adjust the width of the bars if necessary\n", "\n", " for n in range(len(catalogues)):\n", " i, j = n // 3, n % 3\n", " ax = axs[i, j]\n", "\n", " ax.text(0.025, 1.075, catalogue_to_pretty(catalogues[n]), # Moved slightly higher to 1.05\n", " transform=ax.transAxes,\n", " verticalalignment='center', horizontalalignment='left',\n", " bbox=dict(facecolor='white', alpha=0.85, edgecolor='none', pad=3), # Add padding to the box\n", " zorder=5 # Ensure the text is drawn on top of other elements\n", " )\n", "\n", " colors = make_colours(y, n, 0)\n", " plot_bars_with_varying_width(ax, x, y[n, 0], colors, bar_width, 0.6 * bar_width, 0.6)\n", "\n", " # Right y-axis seaborn scatter plot\n", " colors = make_colours(y, n, 1)\n", " ax_right = ax.twinx() # Create a twin y-axis\n", " ax_right.scatter(x, y[n, 1], c=colors, s=75, zorder=1, edgecolors=\"k\")\n", "\n", " if i in [0, 1] and j == 2:\n", " ax_right.set_ylabel(r\"$\\Delta \\log_{10} \\mathcal{Z} ~ (\\mathrm{smoothed})$\")\n", " ax_right.tick_params(axis='y', which='minor', length=0)\n", "\n", "\n", " for i in range(3):\n", " axs[1, i].set_xticks(\n", " np.arange(len(sims)),\n", " [simname_to_pretty(sim) for sim in sims], rotation=66,)\n", " axs[0, i].set_xticks([], [])\n", "\n", " for i in range(2):\n", " for j in range(3):\n", " axs[i, j].set_xlim(-0.75, len(sims) - 0.25)\n", "\n", " axs[i, j].tick_params(axis='x', which='major', top=False)\n", " axs[i, j].tick_params(axis='x', which='minor', top=False, length=0)\n", " axs[i, j].tick_params(axis='y', which='minor', length=0)\n", "\n", " axs[i, 0].set_ylabel(r\"$\\Delta \\log_{10} \\mathcal{Z}$\")\n", "\n", " fig.tight_layout()\n", " fig.savefig(f\"../../plots/lnZ_comparison.pdf\", dpi=500, bbox_inches='tight')\n", " fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Dependence of the evidence on smoothing scale" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "zcmb_max = 0.05\n", "\n", "ksmooth = [0, 1, 2, 3, 4]\n", "scales = [0, 2, 4, 6, 8]\n", "sims = [\"Carrick2015\", \"csiborg2_main\"]\n", "catalogues = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_i\"]\n", "\n", "y = np.full((len(sims), len(catalogues), len(ksmooth)), np.nan)\n", "for i, simname in enumerate(sims):\n", " for j, catalogue in enumerate(catalogues):\n", " for n, k in enumerate(ksmooth):\n", " fname = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"mike\",\n", " sample_alpha=True, smooth=k,\n", " zcmb_max=zcmb_max)\n", " if not exists(fname):\n", " raise FileNotFoundError(fname)\n", "\n", " y[i, j, n] = get_gof(\"neg_lnZ_harmonic\", fname)\n", "\n", " y[i, j, :] -= y[i, j, :].min()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "for i, simname in enumerate(sims):\n", " for j, catalogue in enumerate(catalogues):\n", " print(simname, catalogue, y[i, j, -1])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", " cols = plt.rcParams['axes.prop_cycle'].by_key()['color']\n", " plt.figure()\n", "\n", " ls = [\"-\", \"--\", \"-.\", \":\"]\n", " for i, simname in enumerate(sims):\n", " for j, catalogue in enumerate(catalogues):\n", " plt.plot(scales, y[i, j], marker='o', ms=2.5, ls=ls[i],\n", " label=catalogue_to_pretty(catalogue) if i == 0 else None, c=cols[j],)\n", "\n", " plt.xlabel(r\"$R_{\\rm smooth} ~ [\\mathrm{Mpc} / h]$\")\n", " plt.ylabel(r\"$-\\Delta \\ln \\mathcal{Z}$\")\n", " plt.xlim(0)\n", " plt.ylim(0)\n", " plt.legend()\n", "\n", " plt.tight_layout()\n", " plt.savefig(\"../../plots/smoothing_comparison.pdf\", dpi=450)\n", " plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. External flow consistency" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sims = [\"Carrick2015\", \"Lilow2024\", \"csiborg2_main\", \"csiborg2X\", \"CF4\", \"CLONES\"]\n", "# sims = [\"Carrick2015\", \"Lilow2024\", \"CF4\", \"csiborg2_main\", \"csiborg2X\"]\n", "# cats = [[\"LOSS\", \"Foundation\"], \"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "# cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_not2MTForSFI_i\"]\n", "\n", "X = {}\n", "\n", "for sim in sims:\n", " for cat in cats:\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"bayes\",\n", " sample_alpha=True, zcmb_max=0.05)\n", "\n", " if not exists(fname):\n", " raise FileNotFoundError(fname)\n", "\n", " with File(fname, 'r') as f:\n", " X[f\"{sim}_{cat}\"] = np.linalg.norm(f[f\"samples/Vext\"][...], axis=1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fname = paths.flow_validation(\n", " fdir, \"CF4\", \"CF4_TFR_i\", inference_method=\"bayes\",\n", " sample_alpha=True, zcmb_max=0.05)\n", "\n", "with File(fname, 'r') as f:\n", " x = f[\"samples/Vext\"][...]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", "\n", "\n", " fig, axs = plt.subplots(2, 2, figsize=(3.5, 2.65 * 1.25))\n", " fig.subplots_adjust(hspace=0, wspace=0)\n", "\n", " for k, cat in enumerate(cats):\n", " i, j = k // 2, k % 2\n", " ax = axs[i, j]\n", "\n", " for sim in sims:\n", " sns.kdeplot(X[f\"{sim}_{cat}\"], fill=True, bw_adjust=0.75, ax=ax,\n", " label=simname_to_pretty(sim) if i == 0 else None)\n", "\n", " ax.text(0.725, 0.85, catalogue_to_pretty(cat),\n", " transform=ax.transAxes, fontsize=\"small\",\n", " verticalalignment='center', horizontalalignment='center',\n", " bbox=dict(facecolor='white', alpha=0.5, edgecolor='none'))\n", "\n", " ax.set_ylabel(None)\n", " ax.set_yticklabels([])\n", " ax.set_xlim(0)\n", "\n", " handles, labels = axs[0, 0].get_legend_handles_labels()\n", " fig.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5, 1.1),\n", " ncol=3)\n", "\n", " for i in range(2):\n", " axs[-1, i].set_xlabel(r\"$|\\mathbf{V}_{\\rm ext}| ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", " axs[i, 0].set_ylabel(\"Normalised PDF\")\n", "\n", " fig.tight_layout()\n", " fig.savefig(f\"../../plots/Vext_comparison.pdf\", dpi=450)\n", " fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. What $\\beta$ is preferred by the data? " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sims = [\"Lilow2024\", \"csiborg2_main\", \"csiborg2X\", \"CF4\", \"CLONES\"]\n", "cats = [\"LOSS\", \"Foundation\", \"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "# cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_not2MTForSFI_i\"]\n", "\n", "X = {}\n", "for sim in sims:\n", " for cat in cats:\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"bayes\",\n", " sample_alpha=True, zcmb_max=0.05, sample_beta=True)\n", "\n", " if not exists(fname):\n", " raise FileNotFoundError(fname)\n", "\n", " with File(fname, 'r') as f:\n", " X[f\"{sim}_{cat}\"] = f[f\"samples/beta\"][...]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", "\n", "\n", " fig, axs = plt.subplots(3, 2, figsize=(3.5, 2.65 * 1.8))\n", " fig.subplots_adjust(hspace=0, wspace=0)\n", "\n", " for k, cat in enumerate(cats):\n", " i, j = k // 2, k % 2\n", " ax = axs[i, j]\n", "\n", " for sim in sims:\n", " sns.kdeplot(X[f\"{sim}_{cat}\"], fill=True, bw_adjust=0.75, ax=ax,\n", " label=simname_to_pretty(sim) if i == 0 else None)\n", "\n", " ax.text(0.1, 0.85, catalogue_to_pretty(cat),\n", " transform=ax.transAxes, fontsize=\"small\",\n", " verticalalignment='center', horizontalalignment='left',\n", " bbox=dict(facecolor='white', alpha=0.5, edgecolor='k')\n", " )\n", "\n", " ax.axvline(1, c=\"k\", ls=\"--\", alpha=0.75)\n", " ax.set_ylabel(None)\n", " ax.set_yticklabels([])\n", "\n", " handles, labels = axs[0, 0].get_legend_handles_labels()\n", " fig.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5, 1.075),\n", " ncol=3)\n", "\n", " # for i in range(3):\n", " for j in range(2):\n", " axs[-1, j].set_xlabel(r\"$\\beta$\")\n", "\n", " for i in range(3):\n", " axs[i, 0].set_ylabel(\"Normalised PDF\")\n", "\n", " fig.tight_layout()\n", " fig.savefig(f\"../../plots/beta_comparison.pdf\", dpi=450)\n", " fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What $\\sigma_v$ is preferred by the data?" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Carrick2015_LOSS_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:03:00\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Carrick2015_Foundation_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:04:09\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Carrick2015_2MTF_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:05:03\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Carrick2015_SFI_gals_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:06:41\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Carrick2015_CF4_TFR_i_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:09:23\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Carrick2015_CF4_TFR_w1_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:08:41\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Lilow2024_LOSS_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:18:10\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Lilow2024_Foundation_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:18:53\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Lilow2024_2MTF_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:20:08\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Lilow2024_SFI_gals_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:21:13\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Lilow2024_CF4_TFR_i_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:23:08\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_Lilow2024_CF4_TFR_w1_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:23:09\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2_main_LOSS_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:25:22\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2_main_Foundation_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:25:46\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2_main_2MTF_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:34:48\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2_main_SFI_gals_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:38:16\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2_main_CF4_TFR_i_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:09:25\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2_main_CF4_TFR_w1_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:58:58\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2X_LOSS_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:43:31\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2X_Foundation_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 11:56:16\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2X_2MTF_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:05:34\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2X_SFI_gals_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:11:53\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2X_CF4_TFR_i_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:41:38\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_csiborg2X_CF4_TFR_w1_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:30:30\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_manticore_2MPP_N128_DES_V1_LOSS_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:17:10\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_manticore_2MPP_N128_DES_V1_Foundation_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:23:54\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_manticore_2MPP_N128_DES_V1_2MTF_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:40:34\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_manticore_2MPP_N128_DES_V1_SFI_gals_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:50:18\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_manticore_2MPP_N128_DES_V1_CF4_TFR_i_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:20:52\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_manticore_2MPP_N128_DES_V1_CF4_TFR_w1_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:17:33\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CF4_LOSS_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 12:55:20\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CF4_Foundation_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:01:40\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CF4_2MTF_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:22:45\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CF4_SFI_gals_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:31:36\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CF4_CF4_TFR_i_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:58:36\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CF4_CF4_TFR_w1_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:50:41\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CLONES_LOSS_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:36:10\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CLONES_Foundation_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:40:28\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CLONES_2MTF_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:45:29\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CLONES_SFI_gals_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:50:51\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CLONES_CF4_TFR_i_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:55:16\n", "File: /mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/samples_CLONES_CF4_TFR_w1_mike_smooth_1_zcmb_max_0.05_sample_alpha.hdf5\n", "Last modified: 26/09/2024 13:55:53\n" ] } ], "source": [ "sims = [\"Carrick2015\", \"Lilow2024\", \"csiborg2_main\", \"csiborg2X\", \"manticore_2MPP_N128_DES_V1\", \"CF4\", \"CLONES\"]\n", "cats = [\"LOSS\", \"Foundation\", \"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "# cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_not2MTForSFI_i\"]\n", "\n", "X = {}\n", "for sim in sims:\n", " for cat in cats:\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"mike\",\n", " sample_alpha=True, zcmb_max=0.05, smooth=1)\n", "\n", " if not exists(fname):\n", " raise FileNotFoundError(fname)\n", "\n", " with File(fname, 'r') as f:\n", " X[f\"{sim}_{cat}\"] = f[f\"samples/sigma_v\"][...]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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448TjUYBePzxx+nv70cQBO699965cf39/Tz++ONLzvfNb36T559/HoADBw7Q398/N3fl/XpzC4LAAw88QDweJ5lMct999/Hwww+v2rlWqKjnzaKWrwmDp3il41NkLYWf2x2B9O0obz1Pz97f5MgrZ/jaX54l6FX45790K4ok0hf11hcCYy/DxGtw+z8GxVtzyLV4Hd1333185StfmZvjmWee4Rvf+AYHDx6cG7N3796qnzcSG1IIrIdqnoplAPANvgOqir5pE/ZkitLQIPolY597d4zd2yJ4ywcpyyH8Ph/HEkE2ldOQnwBfz1Vd+ze/+U3efvvtuYs8mUwSDofnPq/cbJeyf/9+7rvvPhKJRNV4gIcffnjuhtu7dy9PPPEEe/bsWTRHvbkXPiDuv/9+9u/fX3WjL+Q73/kO9957L/39/XXPsRaVTUKzqOVrwrnjnArfQf8mD8GAAu/5APzJ77IjYvCztxNIgo9/+as/R1fYA0B32MPAVHbxPLkx+MtPglWE7EX4yH9dNORavY7uu+8+nn/++bn3K3NV1p9MJucETzKZ5Dvf+Q579uypez1ea7TMQatEJpEDwDtwGDbvRPOqAOTHp8Cy5sblSiaHBuPcsT2KVhylrHawOerjaNznDkifv+pr/8Y3vsETTzwx9/OlN2I9HnvssZo35GqTTCYbfv7AAw+sWABcL+RPHCWlttHRNXt9bdoO7d1suvAqlizxES9zAgCgJ+xhYDKzeKKT/8PVUG/4FTj536GYWDTkWr2O9u3bx/79++d+jsfj3HvvvXPvVYQUwFe+8hW++93vrvlaryYtIbBKZBI5NK+KNHgCereha+6vNu+oMDIwN+7doTiW7XBTbwi9OExZaaMz5OHIjOYOSF1dIXDo0CH6+/sb3rD333//3OvQoUOAezN85StfmdshXS615q68f99997Fjxw7uu+++hlrAgw8+eEVr2MjETg0CEArOKv0CsOMWxONvMSrKbCmXWFg0oCfiYXgmh21fUkhg4M+g627Y/stgleDCX1V9fC1fR/39/QwMDJBMJjl06BB33XXXnHYArmawb98+wNUs7rzzzitaa7OxIc1B60E2mcejS5DPQtcmNE0CIC/74fiBuSzNU6MpJFFgc7sPfeAC2cB7afOrzOQFHK0NIT24nqdRk6effrrq50OHDjEwMMC9997LY489tqpz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KozALVBXV8eePXtoaWmhoaEh9cO+mXTj84nX652wBYX0cuWCvHv27KGurg5FUdixYwd79+7NaXkzZSHpzFxYaPo2VxaDvgojMAuam5vZsWNH6vn27dtpbW2lrq4Ot/tG8wm3201dXV3a8fnimWeewe1209zcTHNzMy6Xi+bm5pyV1+FwTPh8x8uQi/JmwkLTmbmw0PRtriwWfRVGYBYoisKuXbtSz1taWti9ezf19fW4XK7UuNPpnHZ8vnjiiSfYs2cPO3fupL6+ntra2tTjXJS3traWhoaG1PPTp0/n9OebCQtNZ+bCQtO3ubJY9FXUDpolzc3NQNKKt7W10djYCCRXBU6nk9ra2klxwVONzycul4vGxkYcDgeNjY3s3LkzZ+Vtbm5OrZa8Xu+Mct1peTNhIerMXFhI+jZXFoO+CiMgEAgESxhxHCQQCARLGGEEBAKBYAkjjIBAIBAsYYQREAgEgiWMMAICgUCwhBFGQCAQCJYwwggsIhwOB3v37p2QkJJNvF7vlOP79+9n7969t+WegtxH6N3CRhiBRcSRI0dobGyktrYWh8PB6tWrs1al0Ov1sn///ilf27NnT87WRRHcfoTeLWyEEVikjJUszhYvvvgiO3fuzNr1BIsToXcLD2EElijpttjpaGtrS9XFFwhuFaF3uYfoMZwjNDQ00NramqoroigKb7/99qSyvLeKzWajvr6eAwcO0NraSkNDA3v37qW2tpYjR46wfft2FEXB6/Vy+PBhmpqaUu91Op1s374dSNaFcTgc1NbW4nQ6s77yE8wvQu8EwgjkALt27Uo15X7mmWcAslpYyuFwcODAgdS2ur6+nvr6erxeb6ra43333Ud7ezuKonDkyBGam5tT8w8fPpwqerZv3z52795NXV0dtbW1s17ZCXIHoXcCEMdBd5wxB9pYO766urqsdiAai9yY6lx1bJttt9ux2+2p1Z+iKBPqno+noaGBRx99lB07duBwOMRqbIEi9E4whjACd5ibG1OMbZGzRW1tLdu2bZsywiKTLX9zc/OEmud2u5329nYaGhpoampKG7khyG2E3gnGEEbgDqMoyoTm006nM7V6GguPG1P48Q0sMqWuro59+/bR2Ng4KY47ky11S0vLhFXX008/jaIo7Ny5k6amJtra2mYtk+DOI/ROMIbwCdxh9uzZk0p4cblcExxjbrc71XwC4L777sv4umPNKxobG9m3b1+qEfaBAwdSr7vdburr63n66adTbQHHYr1dLhf333//pDjs4uJi9u/fn5LrySefnOtHILgDCL0TpNAEOc2ePXs0j8ejaZqmnT59etq5TzzxRFbv3djYmLp3JnMFiwehd0sHsRPIcXbt2oXD4UBRlJQTb74YHh7OWqigYGEh9G7pIHwCOU59fX2qWXcmZKuGi8vlythRuH//fg4fPjznewpyB6F3SwfRY1ggEAiWMGInIBAIBEsYYQQEAoFgCSOMgEAgECxhhBEQCASCJYwwAgKBQLCEEUZAIBAIljDCCAgEAsESRhgBgUAgWMIIIyAQCARLmP8P39g4fwjNNbUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", "\n", "\n", " fig, axs = plt.subplots(3, 2, figsize=(3.5, 2.65 * 1.8))\n", " fig.subplots_adjust(hspace=0, wspace=0)\n", "\n", " for k, cat in enumerate(cats):\n", " i, j = k // 2, k % 2\n", " ax = axs[i, j]\n", "\n", " for sim in sims:\n", " sns.kdeplot(X[f\"{sim}_{cat}\"], fill=True, bw_adjust=0.75, ax=ax,\n", " label=simname_to_pretty(sim) if i == 0 else None)\n", "\n", " ax.text(0.9, 0.85, catalogue_to_pretty(cat),\n", " transform=ax.transAxes, fontsize=\"small\",\n", " verticalalignment='center', horizontalalignment='right',\n", " # bbox=dict(facecolor='white', alpha=0.5, edgecolor='k')\n", " )\n", "\n", " ax.set_ylabel(None)\n", " ax.set_yticklabels([])\n", "\n", " xmin = ax.get_xlim()[0]\n", " if xmin < 0:\n", " ax.set_xlim(0)\n", "\n", " handles, labels = axs[0, 0].get_legend_handles_labels()\n", " fig.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5, 1.075),\n", " ncol=3)\n", "\n", " # for i in range(3):\n", " for j in range(2):\n", " axs[-1, j].set_xlabel(r\"$\\sigma_v ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", "\n", " for i in range(3):\n", " axs[i, 0].set_ylabel(\"Normalised PDF\")\n", "\n", " fig.tight_layout()\n", " fig.savefig(f\"../../plots/sigmav_comparison.pdf\", dpi=450)\n", " fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5. Bulk flow in the simulation rest frame " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sims = [\"Carrick2015\", \"Lilow2024\", \"csiborg2_main\", \"csiborg2X\", \"manticore_2MPP_N128_DES_V1\", \"CLONES\", \"CF4\"]\n", "\n", "\n", "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", " cols = plt.rcParams['axes.prop_cycle'].by_key()['color']\n", "\n", " plt.figure()\n", " for i, sim in enumerate(sims):\n", " r, B = get_bulkflow_simulation(sim, convert_to_galactic=True)\n", " B = B[..., 0]\n", "\n", " if sim == \"Carrick2015\":\n", " B *= 0.43\n", "\n", " if sim in [\"Carrick2015\", \"Lilow2024\", \"CLONES\"]:\n", " plt.plot(r, B[0], label=simname_to_pretty(sim), color=cols[i])\n", " else:\n", " ylow, yhigh = np.percentile(B, [16, 84], axis=0)\n", " plt.fill_between(r, ylow, yhigh, alpha=0.5,\n", " label=simname_to_pretty(sim), color=cols[i])\n", "\n", " plt.xlabel(r\"$R ~ [\\mathrm{Mpc} / h]$\")\n", " plt.ylabel(r\"$|\\mathbf{B}_{\\rm sim}| ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", " plt.xlim(5, 200)\n", " plt.legend(ncols=2)\n", "\n", " plt.tight_layout()\n", " plt.savefig(\"../../plots/bulkflow_simulations_restframe.pdf\", dpi=450)\n", " plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6. Bulk flow in the CMB frame" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sims = [\"Carrick2015\", \"Lilow2024\", \"csiborg2_main\", \"csiborg2X\", \"CLONES\", \"CF4\"]\n", "# cats = [[\"LOSS\", \"Foundation\"], \"2MTF\", \"SFI_gals\", \"CF4_TFR_i\"]\n", "cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "\n", "\n", "data = {}\n", "for sim in sims:\n", " for cat in cats:\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"bayes\",\n", " sample_alpha=True, zcmb_max=0.05)\n", " data[f\"{sim}_{cat}\"] = get_bulkflow(fname, sim)\n", "\n", "def get_ax_centre(ax):\n", " # Get the bounding box of the specific axis in relative figure coordinates\n", " bbox = ax.get_position()\n", "\n", " # Extract the position and size of the axis\n", " x0, y0, width, height = bbox.x0, bbox.y0, bbox.width, bbox.height\n", "\n", " # Calculate the center of the axis\n", " center_x = x0 + width / 2\n", " center_y = y0 + height / 2\n", " return center_x, center_y" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", " nrows = len(sims)\n", " ncols = 3\n", "\n", " figwidth = 8.3\n", " fig, axs = plt.subplots(nrows, ncols, figsize=(figwidth, 1.15 * figwidth), sharex=True, )\n", " fig.subplots_adjust(hspace=0, wspace=0)\n", " cols = plt.rcParams['axes.prop_cycle'].by_key()['color']\n", " # fig.suptitle(f\"Calibrated against {catalogue}\")\n", "\n", " for i, sim in enumerate(sims):\n", " for j, catalogue in enumerate(cats):\n", " r, B = data[f\"{sim}_{catalogue}\"]\n", " c = cols[j]\n", " for n in range(3):\n", " ylow, ymed, yhigh = np.percentile(B[..., n], [16, 50, 84], axis=-1)\n", " axs[i, n].fill_between(\n", " r, ylow, yhigh, alpha=0.5, color=c, edgecolor=c,\n", " label=catalogue_to_pretty(catalogue) if i == 1 else None)\n", "\n", "\n", " # CMB-LG velocity\n", " kwargs = {\"color\": \"mediumblue\", \"alpha\": 0.5, \"zorder\": 10}\n", " for n in range(len(sims)):\n", " axs[n, 0].fill_between([r.min(), 15.], [627 - 22, 627 - 22], [627 + 22, 627 + 22], label=\"CMB-LG\" if n == 0 else None, **kwargs)\n", " axs[n, 1].fill_between([r.min(), 15.], [276 - 3, 276 - 3], [276 + 3, 276 + 3], **kwargs)\n", " axs[n, 2].fill_between([r.min(), 15.], [30 - 3, 30 - 3], [30 + 3, 30 + 3], **kwargs)\n", "\n", " # LCDM expectation\n", " Rs,mean,std,mode,p05,p16,p84,p95 = np.load(\"/mnt/users/rstiskalek/csiborgtools/data/BulkFlowPlot.npy\")\n", " m = Rs < 175\n", " kwargs = {\"color\": \"black\", \"zorder\": 0, \"alpha\": 0.25}\n", " for n in range(len(sims)):\n", " axs[n, 0].fill_between(\n", " Rs[m], p16[m], p84[m],\n", " label=r\"$\\Lambda\\mathrm{CDM}$\" if n == 0 else None, **kwargs)\n", "\n", " for n in range(3):\n", " axs[-1, n].set_xlabel(r\"$R ~ [\\mathrm{Mpc} / h]$\")\n", "\n", " for n in range(len(sims)):\n", " axs[n, 0].set_ylabel(r\"$|\\mathbf{B}| ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", " axs[n, 1].set_ylabel(r\"$\\ell ~ [\\mathrm{deg}]$\")\n", " axs[n, 2].set_ylabel(r\"$b ~ [\\mathrm{deg}]$\")\n", "\n", " for i, sim in enumerate(sims):\n", " ax = axs[i, -1].twinx()\n", " ax.set_ylabel(simname_to_pretty(sim), rotation=270, labelpad=7.5)\n", " ax.set_yticklabels([])\n", "\n", " # Watkins numbers\n", " # for n in range(len(sims)):\n", " # rx = 150\n", "\n", " axs[0, 0].set_xlim(r.min(), r.max())\n", "\n", " axs[0, 0].legend()\n", " handles, labels = axs[1, 0].get_legend_handles_labels() # get the labels from the first axis\n", " fig.legend(handles, labels, loc='upper center', bbox_to_anchor=(0.5, 0.975), ncol=len(cats) + 2)\n", "\n", " fig.tight_layout(rect=[0, 0, 0.95, 0.95], h_pad=0.01)\n", " fig.savefig(f\"../../plots/bulkflow_CMB.pdf\", dpi=450)\n", " fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 8. Full vs Delta comparison" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "catalogue = \"CF4_TFR_i\"\n", "simname = \"csiborg2X\"\n", "zcmb_max=0.05\n", "sample_beta = True\n", "sample_alpha = True\n", "\n", "fname_bayes = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"bayes\",\n", " sample_alpha=sample_alpha, sample_beta=sample_beta,\n", " zcmb_max=zcmb_max)\n", "\n", "fname_mike = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"mike\",\n", " sample_alpha=sample_alpha, sample_beta=sample_beta,\n", " zcmb_max=zcmb_max)\n", "\n", "\n", "X = []\n", "labels = [\"Full posterior\", \"Delta posterior\"]\n", "for i, fname in enumerate([fname_bayes, fname_mike]):\n", " samples = get_samples(fname)\n", " if i == 1:\n", " print(samples.keys())\n", "\n", " X.append(samples_to_getdist(samples, labels[i]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "params = [f\"a_{catalogue}\", f\"b_{catalogue}\", f\"c_{catalogue}\", f\"e_mu_{catalogue}\",\n", " \"Vmag\", \"l\", \"b\", \"sigma_v\", \"beta\", f\"alpha_{catalogue}\"]\n", "# params = [\"beta\", f\"a_{catalogue}\", f\"b_{catalogue}\", f\"e_mu_{catalogue}\"]\n", "# params = [\"Vmag\", \"l\", \"b\", \"sigma_v\", \"beta\", f\"mag_cal_{catalogue}\", f\"alpha_cal_{catalogue}\", f\"beta_cal_{catalogue}\", f\"e_mu_{catalogue}\"]\n", "\n", "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 11})\n", " g = plots.get_subplot_plotter()\n", " g.settings.figure_legend_frame = False\n", " g.settings.alpha_filled_add = 0.75\n", " g.settings.fontsize = 12\n", "\n", " g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", " # plt.gcf().suptitle(catalogue_to_pretty(catalogue), y=1.025)\n", " plt.gcf().tight_layout()\n", " plt.gcf().savefig(f\"../../plots/method_comparison_{simname}_{catalogue}.pdf\", dpi=300, bbox_inches='tight')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Guilhem plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Manticore vs linear comparison" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "zcmb_max = 0.05\n", "\n", "sims = [\"Carrick2015\", \"csiborg2X\"]\n", "catalogues = [\"LOSS\", \"Foundation\", \"2MTF\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "\n", "y_lnZ = np.full((len(catalogues), len(sims)), np.nan)\n", "\n", "for i, catalogue in enumerate(catalogues):\n", " for j, simname in enumerate(sims):\n", " fname = paths.flow_validation(\n", " fdir, simname, catalogue, inference_method=\"mike\",\n", " sample_alpha=simname != \"IndranilVoid_exp\",\n", " zcmb_max=zcmb_max)\n", "\n", " y_lnZ[i, j] = - get_gof(\"neg_lnZ_harmonic\", fname)\n", "\n", " # y_lnZ[i] -= y_lnZ[i].min()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bayes_factor = y_lnZ[:, 1] - y_lnZ[:, 0]\n", "\n", "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", "\n", " plt.figure()\n", "\n", " sns.barplot(x=np.arange(len(catalogues)), y=bayes_factor / np.log(10), color=\"#21456D\")\n", " plt.xticks(\n", " np.arange(len(catalogues)),\n", " [catalogue_to_pretty(cat) for cat in catalogues],\n", " rotation=35, fontsize=\"small\", minor=False)\n", " plt.ylabel(r\"$\\log \\left(\\mathcal{Z}_{\\rm Manticore} / \\mathcal{Z}_{\\rm linear}\\right)$\")\n", " plt.tick_params(axis='x', which='both', bottom=False, top=False)\n", "\n", " plt.tight_layout()\n", " plt.savefig(\"../../plots/manticore_vs_carrick.png\", dpi=450)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## All possible things" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dipole magnitude" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "sim = \"IndranilVoid_gauss\"\n", "\n", "X = []\n", "for cat in cats:\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"mike\",\n", " sample_mag_dipole=False,\n", " sample_alpha=False, zcmb_max=0.05)\n", " \n", " if not exists(fname):\n", " raise FileNotFoundError(fname)\n", "\n", " samples = get_samples(fname, convert_Vext_to_galactic=False)\n", "\n", " # keys = list(samples.keys())\n", " # for key in keys:\n", " # if cat in key:\n", " # value = samples.pop(key)\n", " # samples[key.replace(f\"_{cat}\",'')] = value\n", " \n", " samples = samples_to_getdist(samples, catalogue_to_pretty(cat))\n", " X.append(samples)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# params = [\"Vmag\", \"l\", \"b\", \"a_dipole_mag\", \"a_dipole_l\", \"a_dipole_b\"]\n", "params = [\"Vx\", \"Vy\", \"Vz\"]\n", "# params = [\"Vmag\", \"l\", \"b\"]\n", "\n", "with plt.style.context('science'):\n", " g = plots.get_subplot_plotter()\n", " g.settings.figure_legend_frame = False\n", " g.settings.alpha_filled_add = 0.75\n", "\n", " g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", " # plt.gcf().suptitle(catalogue_to_pretty(cat), y=1.025)\n", " plt.gcf().tight_layout()\n", " plt.gcf().savefig(f\"../../plots/vext_{sim}.png\", dpi=500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Flow | catalogue" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "catalogues = [\"LOSS\", \"Foundation\", \"Pantheon+\", \"2MTF\", \"SFI_gals\"]\n", "sims = [\"Carrick2015\", \"csiborg2_main\", \"csiborg2X\"]\n", "params = [\"Vmag\", \"beta\", \"sigma_v\"]\n", "\n", "for catalogue in catalogues:\n", " X = [samples_to_getdist(get_samples(sim, catalogue), sim)\n", " for sim in sims]\n", "\n", " g = plots.get_subplot_plotter()\n", " g.settings.figure_legend_frame = False\n", " g.settings.alpha_filled_add = 0.75\n", "\n", " g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", " plt.gcf().suptitle(f'{catalogue}', y=1.025)\n", " plt.gcf().tight_layout()\n", " plt.gcf().savefig(f\"../../plots/calibration_{catalogue}.png\", dpi=500, bbox_inches='tight')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Flow | simulation" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "catalogues = [\"Pantheon+\", \"2MTF\", \"SFI_gals\"]\n", "sims = [\"Carrick2015\", \"csiborg2_main\", \"csiborg2X\"]\n", "params = [\"Vmag\", \"l\", \"b\", \"beta\", \"sigma_v\"]\n", "\n", "for sim in sims:\n", " X = [samples_to_getdist(get_samples(sim, catalogue), sim, catalogue)\n", " for catalogue in catalogues]\n", "\n", " g = plots.get_subplot_plotter()\n", " g.settings.figure_legend_frame = False\n", " g.settings.alpha_filled_add = 0.75\n", "\n", " g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", " plt.gcf().suptitle(f'{sim}', y=1.025)\n", " plt.gcf().tight_layout()\n", " plt.gcf().savefig(f\"../../plots/calibration_{sim}.png\", dpi=500, bbox_inches='tight')\n", " plt.gcf().show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Stacking vs marginalising CB boxes\n", "\n", "#### $V_{\\rm ext}$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sim = \"csiborg2X\"\n", "catalogue = \"2MTF\"\n", "key = \"Vext\"\n", "\n", "X = [get_samples(sim, catalogue, nsim=nsim, convert_Vext_to_galactic=False)[key] for nsim in range(20)]\n", "Xmarg = get_samples(sim, catalogue, convert_Vext_to_galactic=False)[key]\n", "\n", "\n", "fig, axs = plt.subplots(1, 3, figsize=(15, 5), sharey=True)\n", "fig.suptitle(f\"{simname_to_pretty(sim)}, {catalogue}\")\n", "fig.subplots_adjust(wspace=0.0, hspace=0)\n", "\n", "for i in range(3):\n", " for n in range(20):\n", " axs[i].hist(X[n][:, i], bins=\"auto\", alpha=0.25, histtype='step',\n", " color='black', linewidth=0.5, density=1, zorder=0,\n", " label=\"Individual box\" if (n == 0 and i == 0) else None)\n", "\n", "axs[i].hist(np.hstack([X[n][:, i] for n in range(20)]), bins=\"auto\",\n", " histtype='step', color='blue', density=1,\n", " label=\"Stacked individual boxes\" if i == 0 else None)\n", "axs[i].hist(Xmarg[:, i], bins=\"auto\", histtype='step', color='red',\n", " density=1, label=\"Marginalised boxes\" if i == 0 else None)\n", " \n", "axs[0].legend(fontsize=\"small\", loc='upper left', frameon=False)\n", "\n", "axs[0].set_xlabel(r\"$V_{\\mathrm{ext}, x} ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", "axs[1].set_xlabel(r\"$V_{\\mathrm{ext}, y} ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", "axs[2].set_xlabel(r\"$V_{\\mathrm{ext}, z} ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", "axs[0].set_ylabel(\"Normalized PDF\")\n", "fig.tight_layout()\n", "fig.savefig(f\"../../plots/consistency_{sim}_{catalogue}_{key}.png\", dpi=450)\n", "fig.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### $\\beta$ and others" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sim = \"csiborg2_main\"\n", "catalogue = \"Pantheon+\"\n", "key = \"alpha\"\n", "\n", "X = [get_samples(sim, catalogue, nsim=nsim, convert_Vext_to_galactic=False)[key] for nsim in range(20)]\n", "Xmarg = get_samples(sim, catalogue, convert_Vext_to_galactic=False)[key]\n", "\n", "\n", "plt.figure()\n", "plt.title(f\"{simname_to_pretty(sim)}, {catalogue}\")\n", "for n in range(20):\n", " plt.hist(X[n], bins=\"auto\", alpha=0.25, histtype='step',\n", " color='black', linewidth=0.5, density=1, zorder=0,\n", " label=\"Individual box\" if n == 0 else None)\n", "\n", "plt.hist(np.hstack([X[n] for n in range(20)]), bins=\"auto\",\n", " histtype='step', color='blue', density=1,\n", " label=\"Stacked individual boxes\")\n", "plt.hist(Xmarg, bins=\"auto\", histtype='step', color='red',\n", " density=1, label=\"Marginalised boxes\")\n", "\n", "plt.legend(fontsize=\"small\", frameon=False, loc='upper left', ncols=3)\n", "plt.xlabel(names_to_latex([key], True)[0])\n", "plt.ylabel(\"Normalized PDF\")\n", "\n", "plt.tight_layout()\n", "plt.savefig(f\"../../plots/consistency_{sim}_{catalogue}_{key}.png\", dpi=450)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SN/TFR Calibration consistency" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# catalogues = [\"LOSS\", \"Foundation\", \"Pantheon+\", \"2MTF\", \"SFI_gals\"]\n", "catalogues = [\"Pantheon+\"]\n", "sims = [\"Carrick2015\", \"csiborg2_main\", \"csiborg2X\"]\n", "\n", "for catalogue in catalogues:\n", " X = [samples_to_getdist(get_samples(sim, catalogue), sim)\n", " for sim in sims]\n", "\n", " if \"Pantheon+\" in catalogue or catalogue in [\"Foundation\", \"LOSS\"]:\n", " params = [\"alpha_cal\", \"beta_cal\", \"mag_cal\", \"e_mu\"]\n", " else:\n", " params = [\"aTF\", \"bTF\", \"e_mu\"]\n", "\n", " g = plots.get_subplot_plotter()\n", " g.settings.figure_legend_frame = False\n", " g.settings.alpha_filled_add = 0.75\n", "\n", " g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", " plt.gcf().suptitle(f'{catalogue}', y=1.025)\n", " plt.gcf().tight_layout()\n", " # plt.gcf().savefig(f\"../../plots/calibration_{catalogue}.png\", dpi=500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### $V_{\\rm ext}$ comparison" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "catalogues = [\"LOSS\"]\n", "# sims = [\"Carrick2015\", \"csiborg2_main\", \"csiborg2X\"]\n", "sims = [\"Carrick2015\"]\n", "params = [\"Vmag\", \"l\", \"b\"]\n", "\n", "for sim in sims:\n", " X = [samples_to_getdist(get_samples(sim, catalogue), sim, catalogue)\n", " for catalogue in catalogues]\n", "\n", " g = plots.get_subplot_plotter()\n", " g.settings.figure_legend_frame = False\n", " g.settings.alpha_filled_add = 0.75\n", "\n", " g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", " plt.gcf().suptitle(f'{simname_to_pretty(sim)}', y=1.025)\n", " plt.gcf().tight_layout()\n", " # plt.gcf().savefig(f\"../../plots/calibration_{sim}.png\", dpi=500, bbox_inches='tight')\n", " plt.gcf().show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bulk flow in the simulation rest frame" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sims = [\"Carrick2015\", \"csiborg1\", \"csiborg2_main\", \"csiborg2X\"]\n", "convert_to_galactic = False\n", "\n", "fig, axs = plt.subplots(1, 3, figsize=(15, 5))\n", "cols = plt.rcParams['axes.prop_cycle'].by_key()['color']\n", "\n", "for i, sim in enumerate(sims):\n", " r, B = get_bulkflow_simulation(sim, convert_to_galactic=convert_to_galactic)\n", " if sim == \"Carrick2015\":\n", " if convert_to_galactic:\n", " B[..., 0] *= 0.43\n", " else:\n", " B *= 0.43\n", "\n", " for n in range(3):\n", " ylow, ymed, yhigh = np.percentile(B[..., n], [16, 50, 84], axis=0)\n", " axs[n].fill_between(r, ylow, yhigh, color=cols[i], alpha=0.5, label=simname_to_pretty(sim) if n == 0 else None)\n", "\n", "axs[0].legend()\n", "if convert_to_galactic:\n", " axs[0].set_ylabel(r\"$B ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", " axs[1].set_ylabel(r\"$\\ell_B ~ [\\degree]$\")\n", " axs[2].set_ylabel(r\"$b_B ~ [\\degree]$\")\n", "else:\n", " axs[0].set_ylabel(r\"$B_{x} ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", " axs[1].set_ylabel(r\"$B_{y} ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", " axs[2].set_ylabel(r\"$B_{z} ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", "\n", "for n in range(3):\n", " axs[n].set_xlabel(r\"$R ~ [\\mathrm{Mpc}]$\")\n", "\n", "\n", "fig.tight_layout()\n", "fig.savefig(\"../../plots/bulkflow_simulations_restframe.png\", dpi=450)\n", "fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bulk flow in the CMB rest frame" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sim = \"csiborg2_main\"\n", "catalogues = [\"Pantheon+\", \"2MTF\", \"SFI_gals\"]\n", "\n", "\n", "fig, axs = plt.subplots(1, 3, figsize=(15, 5), sharex=True)\n", "cols = plt.rcParams['axes.prop_cycle'].by_key()['color']\n", "# fig.suptitle(f\"Calibrated against {catalogue}\")\n", "\n", "for i, catalogue in enumerate(catalogues):\n", " r, B = get_bulkflow(sim, catalogue, sample_beta=True, convert_to_galactic=True,\n", " weight_simulations=True, downsample=3)\n", " c = cols[i]\n", " for n in range(3):\n", " ylow, ymed, yhigh = np.percentile(B[..., n], [16, 50, 84], axis=-1)\n", " axs[n].plot(r, ymed, color=c)\n", " axs[n].fill_between(r, ylow, yhigh, alpha=0.5, color=c, label=catalogue)\n", "\n", "\n", "# CMB-LG velocity\n", "axs[0].fill_between([r.min(), 10.], [627 - 22, 627 - 22], [627 + 22, 627 + 22], color='black', alpha=0.5, zorder=0.5, label=\"CMB-LG\", hatch=\"x\")\n", "axs[1].fill_between([r.min(), 10.], [276 - 3, 276 - 3], [276 + 3, 276 + 3], color='black', alpha=0.5, zorder=0.5, hatch=\"x\")\n", "axs[2].fill_between([r.min(), 10.], [30 - 3, 30 - 3], [30 + 3, 30 + 3], color='black', alpha=0.5, zorder=0.5, hatch=\"x\")\n", "\n", "# LCDM expectation\n", "Rs,mean,std,mode,p05,p16,p84,p95 = np.load(\"/mnt/users/rstiskalek/csiborgtools/data/BulkFlowPlot.npy\")\n", "m = Rs < 175\n", "axs[0].plot(Rs[m], mode[m], color=\"violet\", zorder=0)\n", "axs[0].fill_between(Rs[m], p16[m], p84[m], alpha=0.25, color=\"violet\",\n", " zorder=0, hatch='//', label=r\"$\\Lambda\\mathrm{CDM}$\")\n", "\n", "for n in range(3):\n", " axs[n].set_xlabel(r\"$r ~ [\\mathrm{Mpc} / h]$\")\n", "\n", "axs[0].legend()\n", "axs[0].set_ylabel(r\"$B ~ [\\mathrm{km} / \\mathrm{s}]$\")\n", "axs[1].set_ylabel(r\"$\\ell_B ~ [\\mathrm{deg}]$\")\n", "axs[2].set_ylabel(r\"$b_B ~ [\\mathrm{deg}]$\")\n", "\n", "axs[0].set_xlim(r.min(), r.max())\n", "\n", "fig.tight_layout()\n", "fig.savefig(f\"../../plots/bulkflow_{sim}_{catalogue}.png\", dpi=450)\n", "fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Smoothing scale dependence" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "simname = \"Carrick2015\"\n", "catalogue = \"Pantheon+\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Goodness-of-fit" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "scales = [0, 4, 8, 16, 32]\n", "\n", "y = np.asarray([get_gof(\"BIC\", simname, catalogue, ksmooth=i)\n", " for i in range(len(scales))])\n", "ymin = y.min()\n", "\n", "y -= ymin\n", "y_CF4 = get_gof(\"BIC\", \"CF4\", catalogue) - ymin\n", "y_CF4gp = get_gof(\"BIC\", \"CF4gp\", catalogue) - ymin\n", "\n", "plt.figure()\n", "plt.axhline(y[0], color='blue', label=\"Carrick+2015, no smoothing\")\n", "plt.plot(scales[1:], y[1:], marker=\"o\", label=\"Carrick+2015, smoothed\")\n", "\n", "plt.axhline(y_CF4, color='red', label=\"CF4, no smoothing\")\n", "\n", "plt.xlabel(r\"$R_{\\rm smooth} ~ [\\mathrm{Mpc}]$\")\n", "plt.ylabel(r\"$\\Delta \\mathrm{BIC}$\")\n", "plt.legend(ncols=1)\n", "\n", "plt.tight_layout()\n", "plt.savefig(\"../../plots/test_smooth.png\", dpi=450)\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sim = \"Carrick2015\"\n", "catalogue = \"Pantheon+\"\n", "\n", "\n", "X = [samples_to_getdist(get_samples(sim, catalogue, ksmooth=ksmooth), ksmooth)\n", " for ksmooth in [0, 1, 2]]\n", "\n", "params = [\"Vmag\", \"l\", \"b\", \"sigma_v\", \"beta\"]\n", "# if \"Pantheon+\" in catalogue or catalogue in [\"Foundation\", \"LOSS\"]:\n", "# params += [\"alpha_cal\", \"beta_cal\", \"mag_cal\", \"e_mu\"]\n", "# else:\n", "# params += [\"aTF\", \"bTF\", \"e_mu\"]\n", "\n", "\n", "\n", "g = plots.get_subplot_plotter()\n", "g.settings.figure_legend_frame = False\n", "g.settings.alpha_filled_add = 0.75\n", "\n", "g.triangle_plot(X, params=params, filled=True, legend_loc='upper right')\n", "plt.gcf().suptitle(f'{catalogue}', y=1.025)\n", "plt.gcf().tight_layout()\n", "plt.gcf().savefig(f\"../../plots/calibration_{catalogue}.png\", dpi=500, bbox_inches='tight')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Void testing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Evidence comparison" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "zcmb_max = 0.05\n", "\n", "sims = [\"no_field\", \"IndranilVoid_exp\"]\n", "cats = [\"LOSS\", \"Foundation\", \"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "\n", "neglnZ = {}\n", "kfound = []\n", "for sim in sims:\n", " for cat in cats:\n", " sample_alpha = sim not in [\"IndranilVoid_exp\", \"no_field\"]\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"mike\",\n", " sample_alpha=sample_alpha, zcmb_max=zcmb_max)\n", " \n", "\n", " neglnZ[f\"{sim}_{cat}\"] = get_gof(\"neg_lnZ_harmonic\", fname)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "simA = sims[0]\n", "simB = sims[1]\n", "\n", "print(f\"lnZ_({simA}) - lnZ_({simB})\\n\")\n", "for cat in cats:\n", " lnZ_A = - neglnZ[f\"{simA}_{cat}\"]\n", " lnZ_B = - neglnZ[f\"{simB}_{cat}\"]\n", " print(f\"{cat:15s} {lnZ_A - lnZ_B:.1f}\")\n", "\n", "\n", "print(f\"\\n(Positive -> preference for {simA})\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Goodness-of-fit comparison" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "zcmb_max = 0.05\n", "no_Vext = True\n", "\n", "sims = [\"IndranilVoid_exp\", \"IndranilVoid_gauss\", \"IndranilVoid_mb\"]\n", "cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "\n", "neglnZ = {}\n", "kfound = {}\n", "for sim in sims:\n", " for cat in cats:\n", " kfound[f\"{sim}_{cat}\"] = []\n", " for ksim in range(500):\n", " sample_alpha = False\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"mike\", nsim=ksim,\n", " sample_alpha=sample_alpha, zcmb_max=zcmb_max,\n", " sample_beta=True,\n", " no_Vext=no_Vext, verbose_print=False)\n", "\n", " if not exists(fname):\n", " continue\n", "\n", " kfound[f\"{sim}_{cat}\"].append(ksim)\n", " neglnZ[f\"{sim}_{cat}_{ksim}\"] = get_gof(\"neg_lnZ_harmonic\", fname)\n", "\n", "\n", "neglnZ_no_field = {}\n", "neglnZ_dipole = {}\n", "sim = \"no_field\"\n", "for cat in cats:\n", " sample_alpha = False\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"mike\",\n", " sample_alpha=sample_alpha, zcmb_max=zcmb_max,\n", " no_Vext=True, verbose_print=False)\n", "\n", " if not exists(fname):\n", " continue\n", "\n", " neglnZ_no_field[f\"{cat}\"] = get_gof(\"neg_lnZ_harmonic\", fname)\n", "\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"mike\",\n", " sample_alpha=sample_alpha, zcmb_max=zcmb_max,\n", " no_Vext=None, verbose_print=False)\n", "\n", " if not exists(fname):\n", " continue\n", "\n", " neglnZ_dipole[f\"{cat}\"] = get_gof(\"neg_lnZ_harmonic\", fname)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", "\n", " figwidth = 8.3 \n", " fig, axs = plt.subplots(2, 2, figsize=(figwidth, 0.65 * figwidth))\n", "\n", " for n, cat in enumerate(cats):\n", " i, j = n // 2, n % 2\n", " ax = axs[i, j]\n", "\n", " for sim in sims:\n", " x = kfound[f\"{sim}_{cat}\"]\n", " y = [neglnZ[f\"{sim}_{cat}_{ksim}\"] / np.log(10) for ksim in x]\n", " x = np.array(x) * 0.674\n", " ax.plot(x, y, label=simname_to_pretty(sim))\n", " \n", " # if no_Vext is None:\n", " # y_no_field = neglnZ_no_field[cat] / np.log(10)\n", " # if cat != \"CF4_TFR_w1\":\n", " # ax.axhline(y_no_field, color=\"black\", ls=\"--\", label=\"No peculiar velocity\")\n", " y_no_field = neglnZ_no_field[cat] / np.log(10)\n", " ax.axhline(y_no_field, color=\"black\", ls=\"--\", label=\"No peculiar velocity\")\n", "\n", " y_dipole = neglnZ_dipole[cat] / np.log(10)\n", " ax.axhline(y_dipole, color=\"black\", ls=\":\", label=\"Constant dipole\")\n", "\n", " ax.text(0.5, 0.9, catalogue_to_pretty(cat),\n", " transform=ax.transAxes, #fontsize=\"small\",\n", " verticalalignment='center', horizontalalignment='center',\n", " bbox=dict(facecolor='white', alpha=0.5),\n", " )\n", "\n", " if n == 0:\n", " ax.legend(fontsize=\"small\", loc=\"upper left\")\n", "\n", " ax.set_ylabel(r\"$-\\Delta \\log \\mathcal{Z}$\")\n", " ax.set_xlabel(r\"$R_{\\rm offset} ~ [\\mathrm{Mpc} / h]$\")\n", " ax.set_xlim(0)\n", "\n", " fig.tight_layout()\n", " fname = f\"../../plots/void_goodness_of_fit_observer.png\"\n", " if no_Vext:\n", " fname = fname.replace(\".png\", \"_no_Vext.png\")\n", " print(f\"Saving to `{fname}`.\")\n", " fig.savefig(fname, dpi=450)\n", " fig.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Single parameter radial dependence" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "zcmb_max = 0.05\n", "key = \"beta\"\n", "# key_label = r\"$\\sigma_v ~ [\\mathrm{km} / \\mathrm{s}]$\"\n", "# key_label = r\"$|\\mathbf{V}_{\\rm ext}| ~ [\\mathrm{km} / \\mathrm{s}]$\"\n", "key_label = r\"$\\beta$\"\n", "no_Vext = True\n", "\n", "sims = [\"IndranilVoid_exp\", \"IndranilVoid_gauss\", \"IndranilVoid_mb\"]\n", "cats = [\"2MTF\", \"SFI_gals\", \"CF4_TFR_i\", \"CF4_TFR_w1\"]\n", "\n", "data_mean = {}\n", "data_std = {}\n", "kfound = {}\n", "for sim in sims:\n", " for cat in cats:\n", " kfound[f\"{sim}_{cat}\"] = []\n", " for ksim in range(500):\n", " sample_alpha = False\n", " fname = paths.flow_validation(\n", " fdir, sim, cat, inference_method=\"mike\", nsim=ksim,\n", " sample_alpha=sample_alpha, zcmb_max=zcmb_max,\n", " sample_beta=True,\n", " no_Vext=no_Vext, verbose_print=False)\n", "\n", " if not exists(fname):\n", " continue\n", "\n", " kfound[f\"{sim}_{cat}\"].append(ksim)\n", " with File(fname, 'r') as f:\n", " x = f[f\"samples/{key}\"][...]\n", " if key == \"Vext\":\n", " x = np.linalg.norm(x, axis=-1)\n", "\n", " data_mean[f\"{sim}_{cat}_{ksim}\"] = x.mean()\n", " data_std[f\"{sim}_{cat}_{ksim}\"] = x.std()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with plt.style.context('science'):\n", " plt.rcParams.update({'font.size': 9})\n", "\n", " figwidth = 8.3\n", " fig, axs = plt.subplots(2, 2, figsize=(figwidth, 0.65 * figwidth))\n", "\n", " for n, cat in enumerate(cats):\n", " i, j = n // 2, n % 2\n", " ax = axs[i, j]\n", "\n", " for sim in sims:\n", " x = kfound[f\"{sim}_{cat}\"]\n", " y = [data_mean[f\"{sim}_{cat}_{ksim}\"] for ksim in x]\n", " yerr = [data_std[f\"{sim}_{cat}_{ksim}\"] for ksim in x]\n", " x = np.array(x) * 0.674\n", "\n", " ax.plot(x, y, label=simname_to_pretty(sim))\n", " ax.fill_between(x, np.array(y) - np.array(yerr), np.array(y) + np.array(yerr), alpha=0.5)\n", "\n", " ax.text(0.5, 0.9, catalogue_to_pretty(cat),\n", " transform=ax.transAxes, #fontsize=\"small\",\n", " verticalalignment='center', horizontalalignment='center',\n", " bbox=dict(facecolor='white', alpha=0.5),\n", " )\n", "\n", " if n == 0:\n", " ax.legend(fontsize=\"small\", loc='upper right')\n", "\n", " ax.set_ylabel(key_label)\n", " ax.set_xlabel(r\"$R_{\\rm offset} ~ [\\mathrm{Mpc} / h]$\")\n", " ax.set_xlim(0),\n", "\n", " fig.tight_layout()\n", " fname = f\"../../plots/void_{key}_per_observer.png\"\n", " if no_Vext:\n", " fname = fname.replace(\".png\", \"_no_Vext.png\")\n", " print(f\"Saving to `{fname}`.\")\n", " fig.savefig(fname, dpi=450)\n", " fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "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 }