mirror of
https://github.com/Richard-Sti/csiborgtools.git
synced 2024-12-23 01:38:01 +00:00
8e9645e202
* Add import * Add draft of the p(zcosmo) * Add option for additional uncertainty * Variable renaming * Add zcosmo predict for flow calibration * Add flow map notebook * Update notebook * Add posterior mean & std * Edit docstring
236 lines
51 KiB
Text
236 lines
51 KiB
Text
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Using a calibrated flow model to predict $z_{\\rm cosmo}$"
|
|
]
|
|
},
|
|
{
|
|
"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",
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"from h5py import File\n",
|
|
"\n",
|
|
"import csiborgtools\n",
|
|
"\n",
|
|
"%load_ext autoreload\n",
|
|
"%autoreload 2\n",
|
|
"%matplotlib inline\n",
|
|
"\n",
|
|
"paths = csiborgtools.read.Paths(**csiborgtools.paths_glamdring)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def load_calibration(catalogue, simname, nsim, ksmooth):\n",
|
|
" fname = f\"/mnt/extraspace/rstiskalek/csiborg_postprocessing/peculiar_velocity/flow_samples_{catalogue}_{simname}_smooth_{ksmooth}.hdf5\" # noqa\n",
|
|
" keys = [\"Vext_x\", \"Vext_y\", \"Vext_z\", \"alpha\", \"beta\", \"sigma_v\"]\n",
|
|
"\n",
|
|
" \n",
|
|
" SN_keys = ['mag_cal', 'alpha_cal', 'beta_cal']\n",
|
|
" calibration_samples = {}\n",
|
|
" with File(fname, 'r') as f:\n",
|
|
" for key in keys:\n",
|
|
" calibration_samples[key] = f[f\"sim_{nsim}/{key}\"][:]\n",
|
|
"\n",
|
|
" for key in SN_keys:\n",
|
|
" calibration_samples[key] = f[f\"sim_{nsim}/{key}\"][:]\n",
|
|
"\n",
|
|
" return calibration_samples"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Test running a model"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 27,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"10:11:44: reading the catalogue.\n",
|
|
"10:11:44: reading the interpolated field.\n",
|
|
"10:11:44: calculating the radial velocity.\n",
|
|
"Selected 125/125 galaxies.\n"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/mnt/users/rstiskalek/csiborgtools/csiborgtools/flow/flow_model.py:113: 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_data = \"/mnt/extraspace/rstiskalek/catalogs/PV_compilation_Supranta2019.hdf5\"\n",
|
|
"\n",
|
|
"simname = \"Carrick2015\"\n",
|
|
"catalogue = \"Foundation\"\n",
|
|
"nsim = 0\n",
|
|
"loader = csiborgtools.flow.DataLoader(simname, 0, catalogue, fpath_data, paths, ksmooth=0)\n",
|
|
"\n",
|
|
"calibration_samples = load_calibration(catalogue, simname, nsim, 0)\n",
|
|
"flow_model = csiborgtools.flow.get_model(loader, zcmb_max=0.07)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 28,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"model = csiborgtools.flow.Observed2CosmologicalRedshift(calibration_samples, loader.rdist, loader._Omega_m)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
" 0%| | 0/5000 [00:00<?, ?it/s]"
|
|
]
|
|
},
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"100%|██████████| 5000/5000 [00:02<00:00, 1789.51it/s]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"zcosmo_mean, zcosmo_std = flow_model.predict_zcosmo_from_calibration(\n",
|
|
" calibration_samples[\"mag_cal\"], calibration_samples[\"alpha_cal\"], calibration_samples[\"beta_cal\"])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 38,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Marginalizing: 100%|██████████| 5000/5000 [00:02<00:00, 2048.45it/s]\n",
|
|
"Marginalizing: 100%|██████████| 5000/5000 [00:01<00:00, 2598.84it/s]\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"# n = 2 is a very good test\n",
|
|
"# CONVERT DEGREES TO RADIANS!!\n",
|
|
"n = 0\n",
|
|
"zcos, post = model.posterior_zcosmo(\n",
|
|
" loader.cat[\"z_CMB\"][n], np.deg2rad(loader.cat[\"RA\"][n]), np.deg2rad(loader.cat[\"DEC\"][n]),\n",
|
|
" loader.los_density[n], loader.los_radial_velocity[n])\n",
|
|
"zcos, post_bad = model.posterior_zcosmo(\n",
|
|
" loader.cat[\"z_CMB\"][n], loader.cat[\"RA\"][n], loader.cat[\"DEC\"][n],\n",
|
|
" loader.los_density[n], loader.los_radial_velocity[n])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 39,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.figure()\n",
|
|
"\n",
|
|
"mask = post > 1e-5\n",
|
|
"plt.plot(zcos[mask], post[mask], color=\"black\", label=r\"$p(z_{\\rm cosmo})$\")\n",
|
|
"plt.plot(zcos[mask], post_bad[mask], color=\"black\", ls=\"dashed\")\n",
|
|
"\n",
|
|
"\n",
|
|
"plt.ylim(0)\n",
|
|
"plt.axvline(zcosmo_mean[n], color=\"green\", label=r\"$z_{\\rm cal}$\")\n",
|
|
"plt.fill_betweenx([0, plt.ylim()[1]], zcosmo_mean[n] - zcosmo_std[n],\n",
|
|
" zcosmo_mean[n] + zcosmo_std[n], color=\"green\", alpha=0.2)\n",
|
|
"plt.axvline(loader.cat[\"z_CMB\"][n], color=\"red\", label=r\"$z_{\\rm CMB}$\")\n",
|
|
"\n",
|
|
"plt.xlabel(r\"$z$\")\n",
|
|
"plt.ylabel(r\"$p(z)$\")\n",
|
|
"plt.legend()\n",
|
|
"plt.tight_layout()\n",
|
|
"# plt.savefig(\"../plots/zcosmo_posterior.png\", dpi=450)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"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.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|