{ "cells": [ { "cell_type": "markdown", "id": "f4273c8e", "metadata": { "papermill": { "duration": 0.003689, "end_time": "2023-12-28T10:56:56.409463", "exception": false, "start_time": "2023-12-28T10:56:56.405774", "status": "completed" }, "tags": [] }, "source": [ "# Accessing evolutionary Coeval data" ] }, { "cell_type": "markdown", "id": "37cece10", "metadata": { "papermill": { "duration": 0.003545, "end_time": "2023-12-28T10:56:56.416646", "exception": false, "start_time": "2023-12-28T10:56:56.413101", "status": "completed" }, "tags": [] }, "source": [ "When you run `run_coeval` with non-saturated spin temperature fluctuations (or various other options, such as inhomogeneous recombinations), *or* you run `run_lightcone`, many coeval simulation cubes at higher redshifts are computed, to generate the evolution up to the redshift you requested (or in the case of lightcones, to be interpolated over). By default, with `write=True`, all these boxes are saved to the cache (or a folder of your choice). What is the best way to access that data?\n", "\n", "Looking at the output datafiles themselves (a bunch of `.h5` files) is fairly confusing -- the files are saved with names based on inscrutable hashes. You could just run `run_coeval` at the redshift you care about, with the same input parameters -- this will just return the cached object. But this is a bit clunky, and requires you to know the redshifts that were calculated during the evolution.\n", "\n", "Never fear though -- in v4 we provide a `RunCache` object that assists with understanding what's in your cache." ] }, { "cell_type": "code", "execution_count": 1, "id": "d5560e99", "metadata": { "ExecuteTime": { "end_time": "2020-02-29T22:10:11.054977Z", "start_time": "2020-02-29T22:10:10.248058Z" }, "papermill": { "duration": 1.043591, "end_time": "2023-12-28T10:56:57.463259", "exception": false, "start_time": "2023-12-28T10:56:56.419668", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "import py21cmfast as p21c\n", "from tempfile import mkdtemp\n", "import numpy as np\n", "\n", "# For plotting the cubes, we use the plotting submodule:\n", "# For interacting with the cache\n", "from py21cmfast import plotting" ] }, { "cell_type": "markdown", "id": "835b8eb1", "metadata": { "papermill": { "duration": 0.005969, "end_time": "2023-12-28T10:56:57.522457", "exception": false, "start_time": "2023-12-28T10:56:57.516488", "status": "completed" }, "tags": [] }, "source": [ "We're going to make a temporary cache, so that this notebook produces the same output every time. \n", "\n", "If you want to hold on to each computed OutputStruct, you can specify your own folder in `OutputCache` and read/copy/write/delete the files as needed:" ] }, { "cell_type": "code", "execution_count": 2, "id": "48d2c6d9", "metadata": { "ExecuteTime": { "end_time": "2020-02-29T22:10:11.367976Z", "start_time": "2020-02-29T22:10:11.062517Z" }, "papermill": { "duration": 0.235508, "end_time": "2023-12-28T10:56:57.764316", "exception": false, "start_time": "2023-12-28T10:56:57.528808", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "cache = p21c.OutputCache(mkdtemp())" ] }, { "cell_type": "markdown", "id": "dca25bfe", "metadata": {}, "source": [ "To control which outputs are cached, one can pass a `CacheConfig` object to the `write` arguments of the lightcone and coeval functions." ] }, { "cell_type": "code", "execution_count": 3, "id": "895d5d58", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CacheConfig(initial_conditions=True, perturbed_field=True, spin_temp=True, ionized_box=True, brightness_temp=True, halobox=True, perturbed_halo_catalog=True, halo_catalog=True, xray_source_box=True)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cacheconfig = p21c.CacheConfig.on()\n", "cacheconfig" ] }, { "cell_type": "markdown", "id": "857387c9", "metadata": {}, "source": [ "Passing `True` or `False` to the `write` argument turns caching for all objects on and off respectively" ] }, { "cell_type": "markdown", "id": "eb99ec62", "metadata": { "papermill": { "duration": 0.003407, "end_time": "2023-12-28T10:56:57.771250", "exception": false, "start_time": "2023-12-28T10:56:57.767843", "status": "completed" }, "tags": [] }, "source": [ "## Create an example box" ] }, { "cell_type": "markdown", "id": "a7e79a05", "metadata": { "papermill": { "duration": 0.07619, "end_time": "2023-12-28T10:56:57.850581", "exception": false, "start_time": "2023-12-28T10:56:57.774391", "status": "completed" }, "tags": [] }, "source": [ "We first run a coeval box to have something to read later:" ] }, { "cell_type": "code", "execution_count": 4, "id": "6f3fe3ce", "metadata": { "ExecuteTime": { "end_time": "2020-02-29T22:10:27.413255Z", "start_time": "2020-02-29T22:10:11.369635Z" }, "papermill": { "duration": 44.741332, "end_time": "2023-12-28T10:57:42.595499", "exception": false, "start_time": "2023-12-28T10:56:57.854167", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1dd3f45057134976bb71ae231e079347", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n" ], "text/plain": [] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "530923c3e6b94f73b206de475cc5caa1", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n" ], "text/plain": [] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "inputs = p21c.InputParameters.from_template(\n", " ['simple', 'small'],\n", " random_seed=1234,\n", " node_redshifts=np.arange(6, 21),\n", ")\n", "\n", "coevals = p21c.run_coeval(\n", " out_redshifts=(6,16),\n", " inputs=inputs,\n", " write=cacheconfig,\n", " cache=cache,\n", " progressbar=True\n", ")" ] }, { "cell_type": "markdown", "id": "398ecd06", "metadata": { "papermill": { "duration": 0.010434, "end_time": "2023-12-28T10:57:42.609764", "exception": false, "start_time": "2023-12-28T10:57:42.599330", "status": "completed" }, "tags": [] }, "source": [ "## Accessing cached data from `Coeval`" ] }, { "cell_type": "markdown", "id": "ccd6621d", "metadata": { "papermill": { "duration": 0.003737, "end_time": "2023-12-28T10:57:42.617347", "exception": false, "start_time": "2023-12-28T10:57:42.613610", "status": "completed" }, "tags": [] }, "source": [ "If you have the exact object you want to load, you can simply pass it in to the `find_existing` method of the OutputCache to get the path, then read it using our hdf5 submodule" ] }, { "cell_type": "code", "execution_count": 5, "id": "d5075357", "metadata": { "papermill": { "duration": 0.01601, "end_time": "2023-12-28T10:57:42.636988", "exception": false, "start_time": "2023-12-28T10:57:42.620978", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Create an *empty* brightness temperature object\n", "brightness_temp_z16 = p21c.BrightnessTemp.new(redshift=inputs.node_redshifts[10],inputs=inputs)\n", "\n", "# Get the path to such an object within the cache.\n", "path = cache.find_existing(brightness_temp_z16)\n", "\n", "# Read the output struct (this is lazy -- it doesn't actually read any simulation data until you ask for it)\n", "brightness_temp_z16 = p21c.read_output_struct(path)" ] }, { "cell_type": "markdown", "id": "c0df9439", "metadata": { "papermill": { "duration": 0.004361, "end_time": "2023-12-28T10:57:42.645325", "exception": false, "start_time": "2023-12-28T10:57:42.640964", "status": "completed" }, "tags": [] }, "source": [ "The output is an `OutputStruct` of whatever kind you requested:" ] }, { "cell_type": "code", "execution_count": 6, "id": "e82193c9", "metadata": { "papermill": { "duration": 0.010339, "end_time": "2023-12-28T10:57:42.659631", "exception": false, "start_time": "2023-12-28T10:57:42.649292", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "py21cmfast.wrapper.outputs.BrightnessTemp" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(brightness_temp_z16)" ] }, { "cell_type": "markdown", "id": "a62fedea", "metadata": {}, "source": [ "You can also Construct a `RunCache` instance, which contains the filenames of every box needed for the run, and find it there" ] }, { "cell_type": "code", "execution_count": 7, "id": "5e1ef257", "metadata": {}, "outputs": [], "source": [ "runcache = p21c.RunCache.from_inputs(cache=cache, inputs=inputs)\n", "brightness_temp_z16 = runcache.get_output_struct_at_z(\n", " kind=\"BrightnessTemp\",\n", " z=16.0,\n", " match_z_within=0.01,\n", ")" ] }, { "cell_type": "markdown", "id": "ba08d4f4", "metadata": {}, "source": [ "To list all objects currently stored in your cache, use `list_datasets()` with filters for output type, input parameters, redshift and seed. Pass None for each filter to output everything" ] }, { "cell_type": "code", "execution_count": 9, "id": "21a1c683", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/12.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/19.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/6.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/16.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/10.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/9.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/15.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/17.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/7.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/13.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/8.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/18.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/20.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/14.0000/PerturbedField.h5'),\n", " PosixPath('/tmp/tmp39gegpyh/76bf7c537b8551236989120698767cf8/1234/01a01b1fe697e22e1682177d07c45412/11.0000/PerturbedField.h5')]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cache.list_datasets(\n", " kind=\"PerturbedField\",\n", " inputs=None,\n", " redshift=None,\n", " all_seeds=True,\n", ")" ] }, { "cell_type": "markdown", "id": "f76d815c", "metadata": {}, "source": [ "Note that the directory structure in the cache is split up into several hashes which represent various parts of the input structure and redshift. This ensures we don't re-calculate the same boxes twice unless we explicitly pass `regenerate=True` to our functions" ] }, { "cell_type": "markdown", "id": "c790bcda", "metadata": { "papermill": { "duration": 0.003781, "end_time": "2023-12-28T10:57:42.667178", "exception": false, "start_time": "2023-12-28T10:57:42.663397", "status": "completed" }, "tags": [] }, "source": [ "We can proceed to plot the brightness temperature that we read from cache" ] }, { "cell_type": "code", "execution_count": 10, "id": "ff032bb6", "metadata": { "papermill": { "duration": 0.302138, "end_time": "2023-12-28T10:57:42.972966", "exception": false, "start_time": "2023-12-28T10:57:42.670828", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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N26ckpKSfMaMjp6XZGPGjNHRo0fVqVMn1a9fX6tWrVLt2rXtLqtQyGsACG/hkNeStZlt68T7m2++UY8ePdStWzdJUv369fX22297O955PB49//zzevLJJ9WjRw9J0ptvvqmYmBh9/PHHuueee2yrHQBQsIJC5nynqRmpVq2aSpcurfT0dJ/x9PR0xcbGFrFC69x2220+X0dERKhatWoaMWKEz/iHH34YyLKKhLwGgNAWznktBSazbT3VvG3btlq+fLl2794tSdqyZYvWrFmjrl27SpL27t2rtLQ0de7c2fsap9OpNm3anPf6gMzMTLndbp8HAMAe/mzWEhkZqVatWmn58uXesZycHC1fvlzx8fF+qth/8p6Sd++996pp06b5xksC8hoAQls457UUmMy29RPvsWPHyu12q3HjxipdurSys7M1depU9erVS5K81wAU5vqA5ORkTZo0ydrCAQCmFOUWJBeSlJSkxMREtW7dWtdcc42ef/55nThxQv379/fzlopv7ty5dpfgN+Q1AIS2cM5rKTCZbevE+7333tOCBQv01ltv6fLLL9fmzZs1cuRI1apVS4mJiUVaZ97rD9xut+rUqSPtllSxgBcbNQkxav7QuEilQSq5TUHCgdmff7ukGowZ1VfSmiedNBgz+l4Yva+8yx0vfjn+5u+Qufvuu3X48GFNmDBBaWlpuuqqq7RkyZJ8Ez74F3kdhsjr4EVe24O8LhTyOj9bJ96PPvqoxo4d6732q1mzZvr111+VnJysxMRE7zUA6enpPu3b09PTddVVVxmuszDXHwAASp6hQ4dq6NChdpdRKKdOndLWrVt16NAh5eTk+Dx3yy232FSVeeQ1AKCwSmJeS9Zltq0T75MnT6pUKd/LzEuXLu19g3FxcYqNjdXy5cu9we12u7Vu3ToNHjw40OUCAArJ1pAJEkuWLFHfvn115Ej+j0YcDoeys7NtqKpwyGsACG3kdS4rM9vW5mo333yzpk6dqkWLFumXX37RRx99pJSUFN16662Sct/cyJEjNWXKFH366afatm2b+vbtq1q1aqlnz552lg4AMKGg+4KGg2HDhunOO+/UwYMHlZOT4/MoCZNuibwGgFBHXueyMrNtPbjxj3/8Q+PHj9fDDz+sQ4cOqVatWnrooYc0YcIE7zJjxozRiRMn9OCDDyojI0Pt27fXkiVLuCcoAJQA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o49qz549On78uJo2baqKFSv6dTtmkNcAgEAgs/Mr9Knmzz77rN59913v13fddZcuuugiXXzxxdqyZUuxCwIAhJACTl2zQnR0tAYNGqSJEydq6dKl2rVrl/f0sDvvvFOS1KVLFzVt2lR9+vTRli1b9Pnnn+vJJ5/UkCFDCnVEvzAiIyPVpEkTXX311QGZdJPXAADTbMhrKbwyu9CfeM+aNUsLFiyQlHukYdmyZVq8eLHee+89Pfroo1q6dKlfCgsaRrcdsfo2GUbNIYwan5hl9tYhZhnV18VgrDgNUYra/Mbf2zRitD/Nfs/M3nommBuEGL2von6/EPosDOsL+dvf/qYyZcqoT58++uOPP9SmTRutWLFCVapUyS2rdGktXLhQgwcPVnx8vCpUqKDExERNnjzZknpef/11zZgxQz/99JMkqVGjRho5cqQeeOABS7YnkdeSyGvy2txryWvAtryWwiezCz3xTktLU506dSRJCxcu1F133aUuXbqofv36atOmTbGKAQCEGJuCPCIiQn//+9/197///bzL1KtXT5999pnltUyYMEEpKSkaNmyY4uPjJeXeGmXUqFFKTU217B8O5DUAwDQbJ97hktmFnnhXqVJF+/btU506dbRkyRJNmTJFkuTxeJSdnV3kQgAAIcjGIA8WM2fO1OzZs3Xvvfd6x2655RY1b95cw4YNs2ziTV4DAEwjryVZm9mFnnjfdtttuu+++9SoUSP99ttv6tq1qyRp06ZNatiwYZELAQAgFJ0+fVqtW7fON96qVSudOXPGsu2S1wAAFI6VmV3o5mozZszQ0KFD1bRpUy1btsx7sfnBgwf18MMPF6sYAECIsalZSzDp06ePZs6cmW/8tddeU69evSzbLnkNADCNvJZkbWY7PB6Pp1hrCHJut1tOp1NyuaTo6MBuvDgNQcxINRgz2yCkvR/rsIKZfWfUNMVonxg1kilOHUb72KjhykaT2zB6bXGa6SB8ud2S0ymXy6XoQP+9O59Jjgs/PzGkI0iSNGzYML355puqU6eOrr32WknSunXrlJqaqr59+yoiIsK7bEpKil1l2o68Pk8d5HXR6yCvEazI66BlZWabOtX8008/VdeuXRUREaFPP/30gsvecssthSoAABDCwugo+fls375dLVu2lCT997//lSRVq1ZN1apV0/bt273LORwF/KPHBPIaAFAk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k2/5bt26yeFw6KmnniryNvNq27atDh48qLvuustv6wQAINiQ2QCCDRNvwKSqVauqUqVKRX69w+FQbGxsvnXUqVNH8+bN8xnbv3+/li9frpo1axZ5e0YiIyMVGxurcuXK+XW9AAAEEzIbQLBh4o0S5fDhw4qNjdW0adO8Y998840iIyO1fPny877uu+++01//+ldVq1ZNTqdTf/nLX7Rx40bv86tWrVJkZKRWr17tHZs+fbpq1Kih9PR0SflPW3vllVfUqFEjlS1bVjExMbrjjjuK9J66d++uI0eO6Ouvv/aOvfHGG+rSpYtq1Kjhs2z9+vX19NNP695771WFChV08cUX6+WXX/ZZJiMjQw899JBiYmJUtmxZXXHFFVq4cGGRagMAoKjIbDIbwJ+YeKNEqV69uubMmaOnnnpK33//vY4dO6Y+ffpo6NCh6tSp03lfd+zYMSUmJmrNmjX69ttv1ahRI9100006duyYpD8Duk+fPnK5XNq0aZPGjx+vf/7zn4qJicm3vu+//17Dhw/X5MmTtWvXLi1ZskQdOnQo0nuKjIxUr169NHfuXO/YvHnzNGDAAMPl//a3v+nKK6/Upk2bNHbsWI0YMULLli2TJOXk5Khr1676+uuv9a9//Us7duzQM888o9KlSxepNgAAiorMJrMB/KmM3QUAhXXTTTdp4MCB6tWrl1q3bq0KFSooOTn5gq+54YYbfL5+7bXXVLlyZX355Zfq3r27JGnKlClatmyZHnzwQW3fvl2JiYm65ZZbDNeXmpqqChUqqHv37qpUqZLq1aunFi1aFPk9DRgwQNddd51eeOEFbdiwQS6XS927dze8Vqxdu3YaO3asJOnSSy/V119/rRkzZuivf/2rvvjiC61fv14//vijLr30UklSgwYNilwXAADFQWaT2QBy8Yk3SqS///3vOnPmjN5//30tWLBAUVFRknLDtWLFit7H2dPb0tPTNXDgQDVq1EhOp1PR0dE6fvy4UlNTveuMjIzUggUL9MEHH+jUqVOaMWPGebf/17/+VfXq1VODBg3Up08fLViwQCdPnizy+7nyyivVqFEj/fvf/9acOXPUp08flSljfFwsPj4+39c//vijJGnz5s2qXbu2N8ABALAbme37NZkNhCc+8UaJ9N///lcHDhxQTk6OfvnlFzVr1kySVKtWLW3evNm7XNWqVSVJiYmJ+u233/TCCy+oXr16ioqKUnx8vLKysnzW+80330iSjh49qqNHj6pChQqG269UqZI2btyoVatWaenSpZowYYKeeuopfffdd6pcuXKR3tOAAQP08ssva8eOHVq/fn2R1kEDFgBAsCGzjZHZQHjhE2+UOFlZWerdu7fuvvtuPf3003rggQd06NAhSVKZMmXUsGFD7+NsiH/99dcaPny4brrpJl1++eWKiorSkSNHfNb73//+V6NGjdLs2bPVpk0bJSYmKicn57x1lClTRp07d9b06dO1detW/fLLL1qxYkWR39d9992nbdu26YorrlDTpk3Pu9y3336b7+smTZpIkpo3b67/+7//0+7du4tcBwAA/kJmk9kAcvGJN0qcJ554Qi6XSy+++KIqVqyozz77TAMGDLhgF9BGjRpp/vz5at26tdxutx599FGfI83Z2dnq3bu3EhIS1L9/f914441q1qyZnnvuOT366KP51rdw4UL9/PPP6tChg6pUqaLPPvtMOTk5uuyyy4r8vqpUqaKDBw8qIiLigst9/fXXmj59unr27Klly5bp/fff16JFiyRJf/nLX9ShQwfdfvvtSklJUcOGDbVz5045HA7deOONRa4NAICiILPJbAC5+MQbJcqqVav0/PPPa/78+YqOjlapUqU0f/58rV69WjNnzjzv615//XX9/vvvatmypfr06aPhw4f73PZj6tSp+vXXX/Xqq69KkmrWrKnXXntNTz75pLZs2ZJvfZUrV9aHH36oG264QU2aNNGsWbP09ttv6/LLLy/W+6tcufJ5T5U765FHHtH333+vFi1aaMqUKUpJSVFCQoL3+Q8++EBXX3217r33XjVt2lRjxoxRdnZ2seoCAKCwyGwyG8CfHB6Px2N3EUComzdvnkaOHKmMjIxirad+/foaOXKkz71Ji6Jfv37KyMjQxx9/XKz1AAAQashsAFbgE28gQFwulypWrKjHHnvMthpWr16tihUrasGCBbbVAABAsCOzAfgb13gDAXD77berffv2klTkDqr+0Lp1a28H2YoVK9pWBwAAwYrMBmAFTjUHAAAAAMBCnGoOAAAAAICFmHgDAAAAAGAhJt4AAAAAAFiIiTcAAAAAABZi4g0AAAAAgIWYeAMAAAAAYCEm3gAAAAAAWIiJNwAAAAAAFvp/COET3GoBbL0AAAAASUVORK5CYII=\n", "text/plain": [ "