csiborgtools/notebooks/flow/flow_mock_pv.ipynb

191 lines
198 KiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Generate a mock peculiar velocity catalogue from CSiBORG haloes."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from h5py import File\n",
"from scipy.interpolate import interp1d\n",
"from astropy.cosmology import FlatLambdaCDM\n",
"\n",
"import csiborgtools\n",
"\n",
"%matplotlib inline\n",
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"SPEED_OF_LIGHT = 299_792.458 "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def dist2redshift(dist, cosmo):\n",
" x = np.linspace(0., 1., int(1e5))\n",
" y = cosmo.comoving_distance(x).value\n",
" return interp1d(y, x, kind=\"cubic\")(dist)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"nsim = 17417\n",
"nsnap = 99\n",
"kind = \"main\"\n",
"cat = csiborgtools.read.CSiBORG2SUBFINDCatalogue(nsim, nsnap, kind)\n",
"\n",
"cosmo = FlatLambdaCDM(H0=100, Om0=0.3111)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"dist, RA, dec = [cat[\"spherical_pos\"][:, i] for i in range(3)]\n",
"Vx, Vy, Vz = [cat[\"cartesian_vel\"][:, i] for i in range(3)]\n",
"vrad = csiborgtools.flow.project_Vext(Vx, Vy, Vz, np.deg2rad(RA), np.deg2rad(dec))\n",
"zcosmo = dist2redshift(dist, cosmo)\n",
"zobs = (1 + zcosmo) * (1 + vrad / SPEED_OF_LIGHT) - 1\n",
"\n",
"data = {\"r_hMpc\": dist,\n",
" \"RA\": RA,\n",
" \"DEC\": dec,\n",
" \"vrad\": vrad,\n",
" \"zcosmo\": zcosmo,\n",
" \"zobs\": zobs}"
]
},
{
"cell_type": "code",
"execution_count": 5,
"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",
"plt.scatter(zcosmo, zobs, s=0.01)\n",
"\n",
"plt.axline((0, 0), slope=1, color=\"red\", linestyle=\"--\")\n",
"plt.xlabel(r\"$z_{\\rm cosmo}$\")\n",
"plt.ylabel(r\"$z_{\\rm obs}$\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"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",
"plt.scatter(zcosmo, zobs - zcosmo, s=0.01)\n",
"\n",
"plt.axhline(0, color=\"red\", linestyle=\"--\")\n",
"plt.xlabel(r\"$z_{\\rm cosmo}$\")\n",
"plt.ylabel(r\"$z_{\\rm obs} - z_{\\rm cosmo}$\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"mask = (cat[\"totmass\"] > 5e12) & (cat[\"totmass\"] < 1e13) & cat[\"Central\"] & (cat[\"dist\"] < 135.5)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"choice = np.random.choice(np.arange(len(cat))[mask], size=100)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"fname = f\"/mnt/extraspace/rstiskalek/catalogs/PV_mock_CB2_{nsim}_small.hdf5\"\n",
"with File(fname, \"w\") as f:\n",
" for key, value in data.items():\n",
" f.create_dataset(key, data=value[choice])"
]
},
{
"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
}