{ "cells": [ { "cell_type": "markdown", "id": "2f7e6cf0", "metadata": {}, "source": [ "``` diff\n", "+Hit fast-forward^ and agree to restart kernel, give it a minute, and then scroll down to explore model grids!\n", "```" ] }, { "cell_type": "markdown", "id": "9c0b1b9e", "metadata": {}, "source": [ "### Interactive notebook for exploring the model grids of the
[Dusty Evolved Star Kit (DESK)](https://github.com/s-goldman/Dusty-Evolved-Star-Kit)" ] }, { "cell_type": "markdown", "id": "aa53e6ee", "metadata": {}, "source": [ "Contact me with suggestions for developing tools like this!
\n", "" ] }, { "cell_type": "code", "execution_count": 1, "id": "2c52a8a3", "metadata": {}, "outputs": [], "source": [ "from ipywidgets import interactive, FloatSlider, interact, Label, IntSlider, jslink\n", "from astropy.io.misc.hdf5 import read_table_hdf5\n", "from IPython.display import display\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from get_models_notebook import check_models\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "id": "281b6233", "metadata": {}, "outputs": [], "source": [ "grid_name = 'silicate-mix'" ] }, { "cell_type": "code", "execution_count": 3, "id": "015ace0a", "metadata": {}, "outputs": [], "source": [ "check_models(grid_name, respond=False);" ] }, { "cell_type": "code", "execution_count": 4, "id": "3cea5d48", "metadata": {}, "outputs": [], "source": [ "outputs = read_table_hdf5(grid_name+'_outputs.hdf5')\n", "spectra = read_table_hdf5(grid_name+'_models.hdf5')" ] }, { "cell_type": "code", "execution_count": 5, "id": "8802361d", "metadata": {}, "outputs": [], "source": [ "def uniq(var):\n", " out = np.array(np.unique(outputs[var]))\n", " return out" ] }, { "cell_type": "code", "execution_count": 6, "id": "5d647a80", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e5b2696382c14450b07b443d89ddbfdd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(IntSlider(value=2, description='Teff', max=4, readout=False), IntSlider(value=2, descrip…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def f(teff_val, tinner_val, odep_val, OssOrich_val, OssOdef_val):\n", " fig = plt.figure(figsize=(8, 4))\n", " ax1 = fig.add_subplot(1, 1, 1)\n", " ax1.set_xlabel(r'Wavelength ($\\mu$m)')\n", " ax1.set_ylabel(r'Flux (normalized)')\n", " ax1.set_xlim(0.1, 39)\n", " ax1.set_ylim(-0.1,0.9)\n", "\n", " ind = np.where(\n", " (outputs[\"teff\"] == uniq(\"teff\")[teff_val])\n", " & (outputs[\"tinner\"] == uniq(\"tinner\")[tinner_val])\n", " & (outputs[\"odep\"] == uniq(\"odep\")[odep_val])\n", " & (outputs[\"OssOrich\"] == uniq(\"OssOrich\")[OssOrich_val])\n", " & (outputs[\"OssOdef\"] == uniq(\"OssOdef\")[OssOdef_val])\n", " )[0]\n", "\n", " if len(ind) == 1:\n", " ax1.plot(spectra[\"col0\"][ind[0]], spectra[\"col1\"][ind[0]], c=\"k\", lw=0.5)\n", " else:\n", " ax1.annotate(\"No Data\", (0.5, 0.5), xycoords=\"axes fraction\", ha=\"center\", fontsize=40)\n", " print(r\"**Greater or less than 100% of a dust mixture**\")\n", " output.layout.height = \"400px\"\n", "\n", " print(r\"Teff \"+\"\\t\\t\" + str(uniq(\"teff\")[teff_val])+ ' k')\n", " print(r\"Tinner \"+\"\\t\" + str(uniq(\"tinner\")[tinner_val])+ ' k')\n", " print(r\"tau @ 10um \" + \"\\t\" + str(uniq(\"odep\")[odep_val]))\n", " print(r\"O-rich sil. \"+\"\\t\" + str(uniq(\"OssOrich\")[OssOrich_val])+'%')\n", " print(r\"O-def sil. \"+\"\\t\" + str(uniq('OssOdef')[OssOdef_val])+'%')\n", " if len(ind) == 1: \n", " print(r\"Cryst. sil. \"+\"\\t\" + str(outputs['crSil'][ind[0]])+'%')\n", " print(\"Iron grains \\t 4%\")\n", " plt.show()\n", " \n", "interactive_plot = interactive(\n", " f,\n", " teff_val=IntSlider(value=2, min=0, max=len(uniq(\"teff\")) - 1, step=1, description=\"Teff\", readout=False),\n", " tinner_val=IntSlider(value=2, min=0, max=len(uniq(\"tinner\")) - 1, step=1, description=\"Tinner\", readout=False),\n", " odep_val=IntSlider(value=2, min=0, max=len(uniq(\"odep\")) - 1, step=2, description=r\"$\\tau_{10}$\", readout=False),\n", " OssOrich_val=IntSlider(value=3, min=0, max=len(uniq(\"OssOrich\")) - 1, step=1, description=\"O-rich sil.\", readout=False),\n", " OssOdef_val=IntSlider(value=3, min=0, max=len(uniq(\"OssOdef\")) - 1, step=1, description=\"O-def sil.\", readout=False),\n", ")\n", "output = interactive_plot.children[-1]\n", "display(interactive_plot)" ] }, { "cell_type": "markdown", "id": "184f25fb", "metadata": {}, "source": [ "Teff: effective temperature
\n", "Tinner: inner dust temperature
\n", "tau @ 10um: optical depth at 10 micron
\n", "O-rich sil: Fraction (%) of oxygen-rich warm silicates from [Ossenkopf et al. (1992)](https://ui.adsabs.harvard.edu/abs/1992A%26A...261..567O/abstract)
\n", "O-def sil: Fraction (%) of oxygen-deficient warm silicates from [Ossenkopf et al. (1992)](https://ui.adsabs.harvard.edu/abs/1992A%26A...261..567O/abstract)
\n", "Cryst. sil: Fraction (%) of crystalline silicate grains from from [Jaeger et al. (1994)](https://ui.adsabs.harvard.edu/abs/1994A%26A...292..641J/abstract).
\n", "All grids assumed 4% iron grains from [Henning et al. (1995)](https://ui.adsabs.harvard.edu/abs/1995A%26AS..112..143H/abstract) " ] }, { "cell_type": "code", "execution_count": 7, "id": "3a9477e7", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
Table length=71435\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
grid_nametefftinnerOssOrichOssOdefFeOcrSilgrid_idxnumberodepmdotvexp
bytes12int64int64int64int64int64int64int64int16float64float64float64
silicate-mix260060000496010.11.32e-0610.5
silicate-mix260060000496020.719.89e-068.22
silicate-mix260060000496031.321.8e-057.05
silicate-mix260060000496041.932.56e-056.31
silicate-mix260060000496052.543.28e-055.8
silicate-mix260060000496063.153.96e-055.42
silicate-mix260060000496073.764.64e-055.14
silicate-mix260060000496084.375.28e-054.9
silicate-mix260060000496094.985.91e-054.69
silicate-mix2600600004960105.596.53e-054.53
....................................
silicate-mix3400120080041622324124.50.0001257.29
silicate-mix3400120080041622324225.10.0001287.25
silicate-mix3400120080041622324325.70.0001317.21
silicate-mix3400120080041622324426.30.0001347.17
silicate-mix3400120080041622324526.90.0001387.13
silicate-mix3400120080041622324627.60.0001417.1
silicate-mix3400120080041622324728.20.0001447.06
silicate-mix3400120080041622324828.80.0001477.03
silicate-mix3400120080041622324929.40.0001517.0
silicate-mix3400120080041622325030.00.0001546.96
" ], "text/plain": [ "\n", " grid_name teff tinner OssOrich OssOdef FeO crSil grid_idx number odep mdot vexp \n", " bytes12 int64 int64 int64 int64 int64 int64 int64 int16 float64 float64 float64\n", "------------ ----- ------ -------- ------- ----- ----- -------- ------ ------- -------- -------\n", "silicate-mix 2600 600 0 0 4 96 0 1 0.1 1.32e-06 10.5\n", "silicate-mix 2600 600 0 0 4 96 0 2 0.71 9.89e-06 8.22\n", "silicate-mix 2600 600 0 0 4 96 0 3 1.32 1.8e-05 7.05\n", "silicate-mix 2600 600 0 0 4 96 0 4 1.93 2.56e-05 6.31\n", "silicate-mix 2600 600 0 0 4 96 0 5 2.54 3.28e-05 5.8\n", "silicate-mix 2600 600 0 0 4 96 0 6 3.15 3.96e-05 5.42\n", "silicate-mix 2600 600 0 0 4 96 0 7 3.76 4.64e-05 5.14\n", "silicate-mix 2600 600 0 0 4 96 0 8 4.37 5.28e-05 4.9\n", "silicate-mix 2600 600 0 0 4 96 0 9 4.98 5.91e-05 4.69\n", "silicate-mix 2600 600 0 0 4 96 0 10 5.59 6.53e-05 4.53\n", " ... ... ... ... ... ... ... ... ... ... ... ...\n", "silicate-mix 3400 1200 80 0 4 16 2232 41 24.5 0.000125 7.29\n", "silicate-mix 3400 1200 80 0 4 16 2232 42 25.1 0.000128 7.25\n", "silicate-mix 3400 1200 80 0 4 16 2232 43 25.7 0.000131 7.21\n", "silicate-mix 3400 1200 80 0 4 16 2232 44 26.3 0.000134 7.17\n", "silicate-mix 3400 1200 80 0 4 16 2232 45 26.9 0.000138 7.13\n", "silicate-mix 3400 1200 80 0 4 16 2232 46 27.6 0.000141 7.1\n", "silicate-mix 3400 1200 80 0 4 16 2232 47 28.2 0.000144 7.06\n", "silicate-mix 3400 1200 80 0 4 16 2232 48 28.8 0.000147 7.03\n", "silicate-mix 3400 1200 80 0 4 16 2232 49 29.4 0.000151 7.0\n", "silicate-mix 3400 1200 80 0 4 16 2232 50 30.0 0.000154 6.96" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "outputs" ] }, { "cell_type": "markdown", "id": "8efccd97", "metadata": {}, "source": [ "*Note*: These mass-loss rates (mdot) and expansion velocities (vexp) scale with luminosity and assumed gas-to-dust ratio (see [DUSTY manual](https://github.com/ivezic/dusty/blob/master/releaseV2/Manual/manual.pdf); [Ivezic \\& Elitzur, 1997](https://academic.oup.com/mnras/article/287/4/799/983062))." ] }, { "cell_type": "code", "execution_count": null, "id": "b93efc0f", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.7" } }, "nbformat": 4, "nbformat_minor": 5 }