{
"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",
"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",
"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 |
\n",
"
"
],
"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
}