From ea62cd64cb5b8f59e6c497c3778014a45df7ebaa Mon Sep 17 00:00:00 2001 From: smithis7 Date: Thu, 20 May 2021 12:29:30 -0400 Subject: [PATCH 01/20] creating energypackets notebook --- docs/physics/montecarlo/energypackets.ipynb | 359 ++++++++++++++++++++ docs/physics/montecarlo/index.rst | 2 +- 2 files changed, 360 insertions(+), 1 deletion(-) create mode 100644 docs/physics/montecarlo/energypackets.ipynb diff --git a/docs/physics/montecarlo/energypackets.ipynb b/docs/physics/montecarlo/energypackets.ipynb new file mode 100644 index 00000000000..8d0881d1cbe --- /dev/null +++ b/docs/physics/montecarlo/energypackets.ipynb @@ -0,0 +1,359 @@ +{ + "cells": [ + { + "cell_type": "raw", + "id": "8633baaa", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + ".. _energypackets:\n", + "\n", + "**************\n", + "Energy Packets\n", + "**************" + ] + }, + { + "cell_type": "markdown", + "id": "4394c272", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + "While it is instructive to think about tracking the propagation history of\n", + "photons when illustrating the basic idea behind Monte Carlo radiative transfer\n", + "techniques, there are important numerical reasons for using a different\n", + "discretization scheme. Instead of thinking in the photon picture, it brings\n", + "significant advantages to follow the idea of [AbbottLucy85] and\n", + "[Lucy99a] and consider parcels of radiant energy as the fundamental\n", + "building blocks of the Monte Carlo calculation. These basic Monte Carlo quanta\n", + "are commonly referred to as \"energy packets\" or simply \"packets\".\n", + "\n", + "During a Monte Carlo calculation, a large number of packets, all with a certain\n", + "energy $\\varepsilon$, are created. In addition, each packet is associated\n", + "with a frequency. These assignments are performed in a manner which ensures\n", + "that the ensemble of packets represents the spectral energy distribution of the\n", + "radiation field.\n", + "\n", + "During the simulation, the energy of the packet remains constant in the local\n", + "co-moving frame (see :ref:`Reference Frames ` for\n", + "details about the lab and co-moving frames). This naturally ensures energy\n", + "conservation and constitutes the main advantage of this discretization scheme.\n", + "There is one side effect of this so-called indivisible packet energy scheme\n", + "which often causes confusion: Even during radiation-matter interactions the\n", + "packet energy is conserved in the co-moving frame (see :doc:`Propagation\n", + "`). However, the frequency associated with a packet may change\n", + "(e.g. during non-resonant line interactions). As a consequence, packets may\n", + "represent a varying number of real photons during their lifetime.\n", + "\n", + ".. note::\n", + " The indivisible energy packet scheme does not require that all packets have\n", + " the same energy. This is just a convenient and simple choice adopted in\n", + " TARDIS." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "426325e5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/isaac/tardis-sn/tardis/montecarlo/montecarlo_numba/formal_integral.py:177: NumbaDeprecationWarning: \u001b[1mThe 'numba.jitclass' decorator has moved to 'numba.experimental.jitclass' to better reflect the experimental nature of the functionality. Please update your imports to accommodate this change and see http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#change-of-jitclass-location for the time frame.\u001b[0m\n", + " @jitclass(integrator_spec)\n", + " (\u001b[1mwarnings.py\u001b[0m:110)\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "from tardis.montecarlo.packet_source import *\n", + "from tardis import constants as const\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#The random number generator that will be used\n", + "rng = np.random.default_rng()" + ] + }, + { + "cell_type": "markdown", + "id": "c94ae935", + "metadata": {}, + "source": [ + "The followig cell contains values that you can change to see how it affects the spectrum:" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "8721f7f8", + "metadata": {}, + "outputs": [], + "source": [ + "seed = 4 #seed for the pseudo-random number generator\n", + "r_photosphere = 1 #radius of the supernova's photosphere in cm\n", + "n_packets = 40000 #number of packets generated" + ] + }, + { + "cell_type": "markdown", + "id": "ff13b60e", + "metadata": {}, + "source": [ + "You can either set a temperatature of the photosphere, which will determine its luminosity; or you can set the luminosity of the photosphere, which will determine it's temperature." + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "bbfd5f3f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Luminosity: 7125600863965.566 erg/s\n" + ] + } + ], + "source": [ + "temp = 10000 #temperature in K\n", + "lumin = 4 * np.pi * (r_photosphere**2) * const.sigma_sb.cgs.value * (temp**4)\n", + "print('Luminosity:',lumin,'erg/s')" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "0f30ca3d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Temperature: 35.35236057062407 K\n" + ] + } + ], + "source": [ + "lumin = 1113 #luminocity in erg/s\n", + "temp = ( lumin / (4 * np.pi * const.sigma_sb.cgs.value) )**0.25 / np.sqrt(r_photosphere)\n", + "print('Temperature:',temp,'K')" + ] + }, + { + "cell_type": "markdown", + "id": "ae2833e7", + "metadata": {}, + "source": [ + "We now generate the ensemble of packets. The array of packet energies is also shown -- note that this function gives the packet energies in units of XXXXXXXXXXXXXXXXXXXXXXXXXXXX." + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "925e9e1b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2.5e-05 2.5e-05 2.5e-05 ... 2.5e-05 2.5e-05 2.5e-05]\n" + ] + } + ], + "source": [ + "nus,mus,es = BlackBodySimpleSource(seed).create_packets(temp,n_packets,rng)\n", + "\n", + "print(es)" + ] + }, + { + "cell_type": "markdown", + "id": "71b257f0", + "metadata": {}, + "source": [ + "Each packet contributes a luminosity of XXXXXXXX. We make a uniform array that shows the luminosity contribution of each packet. This is important so that our plotted spectrum has the correct y-axis scale (in the actual TARDIS cose, XXXXXX)." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "596b577a", + "metadata": {}, + "outputs": [], + "source": [ + "lumin_per_packet = lumin*es" + ] + }, + { + "cell_type": "markdown", + "id": "0306d66f", + "metadata": {}, + "source": [ + "We define important constants, and write the Planck distribution function so that we can compare to the generated distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "01d03d42", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "h = const.h.cgs.value\n", + "c2 = const.c.cgs.value**2\n", + "kB = const.k_B.cgs.value\n", + "\n", + "def planck_function(nu,T):\n", + " return 8 * np.pi * (r_photosphere**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*T)) - 1))" + ] + }, + { + "cell_type": "markdown", + "id": "0bc319fe", + "metadata": {}, + "source": [ + "We plot the Planck distribution and a histogram of the generated packet distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "913fcdbb", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "bins=200\n", + "nus_planck = np.linspace(min(nus),max(nus),bins)\n", + "bin_width = nus_planck[1]-nus_planck[0]\n", + "\n", + "plt.hist(nus,bins=bins,weights=lumin_per_packet/bin_width) #the weights argument is once again to make sure our plotted spectrum has the correct y-axis scale\n", + "plt.plot(nus_planck,np.pi*planck_function(nus_planck,temp))\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "984d95e6", + "metadata": {}, + "source": [ + "We finally plot the generated $\\mu$ density distribution, followed by the generated $\\theta=\\arccos (\\mu)$ density distribution, compared with the respective curves $\\rho = 2\\mu$ and $\\rho = \\sin(2\\theta)$:" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "ae4c97de", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "x = np.linspace(0,1,1000)\n", + "\n", + "plt.hist(mus,bins=bins,density=True)\n", + "plt.plot(x,2*x)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "9611b1df", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "thetas = np.linspace(0,np.pi/2,1000)\n", + "\n", + "plt.hist(np.arccos(mus),bins=bins,density=True)\n", + "plt.plot(thetas,np.sin(2*thetas))\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52c4d880", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21e0f46f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3", + "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.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/physics/montecarlo/index.rst b/docs/physics/montecarlo/index.rst index d70b011f166..08b82c472f2 100644 --- a/docs/physics/montecarlo/index.rst +++ b/docs/physics/montecarlo/index.rst @@ -13,7 +13,7 @@ can also be found in various papers by L. Lucy and in the main TARDIS publicatio .. toctree:: basicprinciples - discretization + energypackets propagation lineinteraction estimators From de95c859a6d796d8bbd24167e3cf23a986ba31b5 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Fri, 21 May 2021 11:33:03 -0400 Subject: [PATCH 02/20] more additions to energypackets page --- docs/physics/montecarlo/energypackets.ipynb | 70 +++++++++------------ 1 file changed, 31 insertions(+), 39 deletions(-) diff --git a/docs/physics/montecarlo/energypackets.ipynb b/docs/physics/montecarlo/energypackets.ipynb index 8d0881d1cbe..effee8cb2a6 100644 --- a/docs/physics/montecarlo/energypackets.ipynb +++ b/docs/physics/montecarlo/energypackets.ipynb @@ -81,7 +81,7 @@ }, { "cell_type": "markdown", - "id": "c94ae935", + "id": "4ae02998", "metadata": {}, "source": [ "The followig cell contains values that you can change to see how it affects the spectrum:" @@ -89,19 +89,19 @@ }, { "cell_type": "code", - "execution_count": 38, - "id": "8721f7f8", + "execution_count": 2, + "id": "bc34bf33", "metadata": {}, "outputs": [], "source": [ - "seed = 4 #seed for the pseudo-random number generator\n", - "r_photosphere = 1 #radius of the supernova's photosphere in cm\n", + "seed = 42069 #seed for the pseudo-random number generator\n", + "r_photosphere = 847.38 #radius of the supernova's photosphere in cm\n", "n_packets = 40000 #number of packets generated" ] }, { "cell_type": "markdown", - "id": "ff13b60e", + "id": "450faf76", "metadata": {}, "source": [ "You can either set a temperatature of the photosphere, which will determine its luminosity; or you can set the luminosity of the photosphere, which will determine it's temperature." @@ -109,15 +109,15 @@ }, { "cell_type": "code", - "execution_count": 43, - "id": "bbfd5f3f", + "execution_count": 3, + "id": "8f2c15a9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Luminosity: 7125600863965.566 erg/s\n" + "Luminosity: 5.11655811094159e+18 erg/s\n" ] } ], @@ -129,18 +129,10 @@ }, { "cell_type": "code", - "execution_count": 40, - "id": "0f30ca3d", + "execution_count": null, + "id": "3fb3ca8c", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Temperature: 35.35236057062407 K\n" - ] - } - ], + "outputs": [], "source": [ "lumin = 1113 #luminocity in erg/s\n", "temp = ( lumin / (4 * np.pi * const.sigma_sb.cgs.value) )**0.25 / np.sqrt(r_photosphere)\n", @@ -149,7 +141,7 @@ }, { "cell_type": "markdown", - "id": "ae2833e7", + "id": "516633c5", "metadata": {}, "source": [ "We now generate the ensemble of packets. The array of packet energies is also shown -- note that this function gives the packet energies in units of XXXXXXXXXXXXXXXXXXXXXXXXXXXX." @@ -157,7 +149,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 4, "id": "925e9e1b", "metadata": {}, "outputs": [ @@ -177,7 +169,7 @@ }, { "cell_type": "markdown", - "id": "71b257f0", + "id": "16936bce", "metadata": {}, "source": [ "Each packet contributes a luminosity of XXXXXXXX. We make a uniform array that shows the luminosity contribution of each packet. This is important so that our plotted spectrum has the correct y-axis scale (in the actual TARDIS cose, XXXXXX)." @@ -185,8 +177,8 @@ }, { "cell_type": "code", - "execution_count": 45, - "id": "596b577a", + "execution_count": 5, + "id": "fed35f47", "metadata": {}, "outputs": [], "source": [ @@ -195,7 +187,7 @@ }, { "cell_type": "markdown", - "id": "0306d66f", + "id": "0d839222", "metadata": {}, "source": [ "We define important constants, and write the Planck distribution function so that we can compare to the generated distribution:" @@ -203,8 +195,8 @@ }, { "cell_type": "code", - "execution_count": 46, - "id": "01d03d42", + "execution_count": 6, + "id": "916a5e22", "metadata": { "scrolled": false }, @@ -220,7 +212,7 @@ }, { "cell_type": "markdown", - "id": "0bc319fe", + "id": "78230177", "metadata": {}, "source": [ "We plot the Planck distribution and a histogram of the generated packet distribution:" @@ -228,13 +220,13 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 7, "id": "913fcdbb", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEFCAYAAAAPCDf9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAnsElEQVR4nO3deZxU1Zn/8c9T3c0momwisqQBccUligiKGjUoJm5xzITJJOokExLHyU8zyUwws5nJmDBmmcRkNC4xo+OCJnFBcIkh4i4IhH3rbkBpWZruln3p7qrn90ddSIm9VDfVdWr5vl+vetWtU/dWffvaPtw+99xzzd0REZHiEAsdQEREskdFX0SkiKjoi4gUERV9EZEioqIvIlJESkMHaEu/fv28vLw8dAwRkbwyf/78Wnfvf3B7zhf98vJy5s2bFzqGiEheMbN3m2tX946ISBFR0RcRKSIq+iIiRURFX0SkiKjoi4gUERV9EZEioqIvIlJEVPRFRIqIir6ISBFR0c9B5VNmho4gIgUq56dhKCYq9iLS2VT0c0g39jE2toLD2Atre8HQcVCi/0QikjmqKLmgaR/Mnsqfuv6C7taQbHvwTjisP4y7CcZ9XcVfRDJClSS0nTXwf5+BzUt5MXEOv4ufzybvw0vXHQPzH4Q/3AYrnoVJj8LhR4dOKyJ5TidyQ9rzQbLg11XB55/glsa/57XEqVT4YDjxCvjCb/n7hq9DzUr49WWwdT3lU2aq719EOkxFPxR3eHIy1K6Gv3oUjru02dVmJMbBF5+CXbXw8DUczu4sBxWRQqKiH8r8X0PF7+GS/4QRF7W+7tCzk9079Wv4WdkviJHITkYRKTgq+iFs3wAv/jMMvxDO+kp62ww7DyZO5aKShXy55LnOzSciBUtFP4TZP4B4I1zxU4i14z/BWX/L7+Nn8q3SJ6BmRafFE5HCpaKfbVtWwZ8ehrP+FnqXp7XJgZO3Znyn8W/ZSXd45iZIqJtHRNpHRT/bXvkvKDsMzv/HDm1eyxHc3vjX8P58WPhIhsOJSKFT0c+mreth2dNw5vVwWN8PvdWeYZhPJcYzL3Fccgz/nq0ZjSgihU1FP5veuQ9wOPurh/QxTox/b7wedtfCm3dmJpuIFIW0ir6ZrTOzJWa20MzmRW19zOwlM6uInnunrH+rmVWa2SozuzSl/czocyrN7E4zs8z/SDmqYRfbXr+PGU1nUT51ySFfZLXMh8Goa+Htu2HH5gwGFZFC1p4j/Qvd/XR3Hx29ngLMcveRwKzoNWZ2EjAJOBmYCNxlZiXRNncDk4GR0WPiof8IeWLFsxxhu3mo6ZIPNbdU/NP6R+HC70C8AV77USaTikgBO5TunauAB6PlB4GrU9qnufs+d18LVAJjzGwg0Mvd33J3Bx5K2abwLXyUdxNHMddPyNxn9h0Bp3+efXN+nZzDR0SkDekWfQd+b2bzzWxy1DbA3TcCRM9HRe2DgPUp21ZHbYOi5YPbC9+2alj7Kk/GzwMy3KN1zs2U0QRz7sns54pIQUp3ls1z3X2DmR0FvGRmK1tZt7mq5q20f/QDkv+wTAYYOnRomhFz2OLHAefJxPiMfuz+7p+7y0Zz2Tv3wfhvQNeeGf0OESksaR3pu/uG6LkGeAoYA2yOumyInvf3L1QDQ1I2HwxsiNoHN9Pe3Pfd6+6j3X10//790/9pctXSp5iXOI71PqBTPv6epitg7za+9x/f7pTPF5HC0WbRN7PDzOzw/cvAJcBSYDpwfbTa9cAz0fJ0YJKZdTWzYSRP2M6NuoB2mNnYaNTOdSnbFK76NbB5Cc/HxxzyR7V0YnehH8vbiRP5culzyekdRERakM6R/gDgdTNbBMwFZrr7C8BUYIKZVQATote4+zLgCWA58AJwk7vHo8+6Ebif5MndKuD5DP4sOen2H/8QgBcTZ3Xq9/yy6XKOsXpY+rtO/R4RyW9t9um7+xrgtGba64CLW9jmduD2ZtrnAaPaHzN/TSx5h6WJcqq9c7upZidOZ2ViCCe8+XM49XNQRJdAiEj6dEVuZ9qxiTNjFbwQ79yj/CTj1/GJsHkprJ+The8TkXykot+ZKv8AwKzEGVn5uunxcWz37jDvgax8n4jkHxX9TjTjyf9jsx/JCs/OsNM9dEteC7DsadhVl5XvFJH8oqLfWeJNjI8t4ZX4aWT8gqxWPBq/GOL7YNGjWftOEckfKvqdZcMCjrRdvJL4yDnwTrXah8DQcTDvAYZNeTar3y0iuU9Fv7NUziLuxuuJAIOVRn8J6tdwTmzZgaZDmdFTRAqHin5nqfoji30E28j+tAjHP1pGvffkCyV/yPp3i0huU9HvDPt2woYFvJk4KczX04Xfxi/gk7EFsKs2SAYRyU0q+p1h/RxINPF2oKIP8Nv4+ZRZHJb8JlgGEck9KvqdYd3rECtlfuK4YBFW+xAWJ4bp5uki8iEq+p1h3etwzBnsplvQGL+Nnw+bliQfIiKo6Gde1J9PeWbnzu+I6fFzIFYGCx8LHUVEcoSKfqZVz4VEE5SfGzoJWzkcjp8Iix+nlKbQcUQkB6joZ9r6uYDB4EOfPz8jTvs87K7lgtii0ElEJAeo6GfYq7NmwICToVuv0FGSRk6AHv24tuTV0ElEJAeo6GdSIs7psUoYkiNH+QAlZXDqX3JxbAHsrg+dRkQCU9HPpC0r6WV7YMjZoZN82CmfpYvFYYXm4hEpdir6mbR+LgDnT9udW3PdHPNx1iYGwNLfhk4iIoGp6GfS+rls8V6850eFTvJhZkxPnENizWucNeXh0GlEJCAV/UyqfoeFiZFkc/78dE2Pn0PMnCtK3g4dRUQCUtHPlL3boK6ChYkRoZM0q8oHsSzxMa4seTN0FBEJSEU/UzYsBGCxDw+boxXPxM/h9FgV1K8JHUVEAlHRz5QNCwBYnMjdoj8jPi65sOR3YYOISDAq+pny/gLoPSzITVNaUz5l5oGRRBvox9zE8clRPO6Bk4lICCr6GVK9/E2m1x4dOkabpsfPgS0rYfOytlcWkYKjop8JO7cw2GpZlMNdO/s9Fz+bJo/p5ioiRUpFPxM2/AmAJXlQ9OvpxWuJU2Dpk+riESlCKvqZsHERCTeWeXnoJGmZHj8Htr134ApiESkeKvqZsGkR63wAu+geOklafp8YDaXdNC2DSBFKu+ibWYmZ/cnMZkSv+5jZS2ZWET33Tln3VjOrNLNVZnZpSvuZZrYkeu9OM8u9S1c7YuNilvvHQqdI2y66w8hLYPkzkIiHjiMiWdSeI/2bgRUpr6cAs9x9JDAreo2ZnQRMAk4GJgJ3mVlJtM3dwGRgZPSYeEjpc8GerbD1XZYnykMnaZ9R18DOzfDuG6GTiEgWpVX0zWww8Gng/pTmq4AHo+UHgatT2qe5+z53XwtUAmPMbCDQy93fcncHHkrZJn9FNx3Pl/78A0ZeAmU9kid0RaRolKa53k+BfwIOT2kb4O4bAdx9o5ntn1pyEJA6q1d11NYYLR/c/hFmNpnkXwQMHTo0zYiBbFoMwLJ8O9LvchgcNxFWTGfEGxcRp4R1Uz8dOpWIdLI2j/TN7HKgxt3np/mZzfXTeyvtH210v9fdR7v76P79+6f5tYFsXAw9j6aWI0Inab9R18DuOsbFlodOIiJZkk73zrnAlWa2DpgGXGRmDwOboy4boueaaP1qYEjK9oOBDVH74Gba89umJTDw1NApOubYCezw7lweeyt0EhHJkjaLvrvf6u6D3b2c5AnaP7r7F4DpwPXRatcDz0TL04FJZtbVzIaRPGE7N+oK2mFmY6NRO9elbJOfmhqgdlXyRuj5qKwbLyXOZGLJO5TRFDqNiGTBoYzTnwpMMLMKYEL0GndfBjwBLAdeAG5y9/3jAm8keTK4EqgCnj+E7w+vvgoSTXDUSaGTdNjM+Nkcabs4N7YkdBQRyYJ0T+QC4O6zgdnRch1wcQvr3Q7c3kz7PGBUe0PmrGjSssseqwUOC5ulnfbPvNmFU9nuPbi8ZE7gRCKSDboi91DUrAArocqPCZ2kwxoo48X4aC6JzYOmfaHjiEgnU9E/FDUroO+xNFAWOskhmZEYRy/bDZWzQkcRkU6mon8oapbDUSeGTnHI3kiczAfeE5bpQi2RQqei31ENu+CDdfk7cidFE6W8ED8LVj0PjXtCxxGRTqSi31FbVgJeEEf6ADMSY6FhJ1S8FDqKiHQiFf2OqknOPfeJhzYHDpIZbydOgh79YNmTB0b2iEjhUdHvqJoV7PEuvOcDQifJiDglcNJVsPpFurM3dBwR6SQq+h21eRkVPohEAe3Cz71xDDTu5uLYn0JHEZFOUjgVK9tqVrDah7S9Xh55x4+nxo/k8pK3215ZRPKSin5H7K6HnZtYlRjc9rp5JEGMmfGzuTC2EPbtCB1HRDqBin5H1CSnIl5VYEf6ADPiY+lqjdz83e/rhK5IAVLR74ho5M6qROEV/QU+kg3eR108IgVKRb8japazzXuwmd5tr5tnnBgz42O5ILaIXuwKHUdEMkxFv53Kp8xk7tw3oq6d5m4Glv9mxsfSxeJMiKV7szQRyRcq+u3mHGfVrC6wk7ipFvoI1if6c3mJ7qglUmhU9NupL9s50nZR6c3e071AGDMTYxkfW5ocqSQiBUNFv51GWPK2vvk8h346no2PpczisOLZ0FFEJINU9NtpRCwq+onCLvrLvJy1iQGablmkwKjot9OxtoHd3pWN9AkdpZMlu3hY+yrsqg0dRkQyREW/nUbYBtb4QLwIdt2M+DjwBP/8/dt1oZZIgSj8ypVhI2xDwffn77fSh0C/47g8pgu1RAqFin57NOxmkNUWfH/+nxk/3TSKs2Mr6M8HocOISAao6LdHfRUx86I50gd4Nj6OmDmfKpkbOoqIZICKfnvUrgYKf7hmqiofxIrEED6tuXhECoKKfnvUVpBwY60fHTpJVs2Mj2VMbBVsez90FBE5RCr67VG7mmrvxz66hE6SVTMSY5MLy58OmkNEDp2KfnvUri6qrp391vlAlibKYaku1BLJdyr66UokoLayKIs+JG+uwvvz4IN3Q0cRkUOgop+u7dXQtKd4i766eEQKQptF38y6mdlcM1tkZsvM7LtRex8ze8nMKqLn3inb3GpmlWa2yswuTWk/08yWRO/daWb5MyH9/pE7RTNG/8Oq/Sg45owDXTy6QlckP6VzpL8PuMjdTwNOByaa2VhgCjDL3UcCs6LXmNlJwCTgZGAicJeZlUSfdTcwGRgZPSZm7kfpZLUVQHEN1/yIUdfAxoVQVwUkC7+Kv0h+abPoe9LO6GVZ9HDgKuDBqP1B4Opo+Spgmrvvc/e1QCUwxswGAr3c/S13d+ChlG1y35ZVbPXDqKNX6CThnPyZ5POyp8LmEJEOS6tP38xKzGwhUAO85O5zgAHuvhEgej4qWn0QsD5l8+qobVC0fHB7c9832czmmdm8LVu2tOPH6US1FdFRfv70SGXcEYNhyNkq+iJ5LK2i7+5xdz8dGEzyqH1UK6s3VxW9lfbmvu9edx/t7qP79++fTsTOV7u6aPvzU9225njYvJQRpgu1RPJRu0bvuPtWYDbJvvjNUZcN0XNNtFo1MCRls8HAhqh9cDPtuW/vdthVwxofGDpJcM/Fzybhxqdjc0JHEZEOSGf0Tn8zOzJa7g58ElgJTAeuj1a7HngmWp4OTDKzrmY2jOQJ27lRF9AOMxsbjdq5LmWb3FafPHFZbNMvNKeG3rzjx3NFyVu08IeaiOSwdI70BwIvm9li4B2SffozgKnABDOrACZEr3H3ZcATwHLgBeAmd49Hn3UjcD/Jk7tVwPMZ/Fk6TzRaZZ2KPgBPx89lZOx9Rtna0FFEpJ1K21rB3RcDH2+mvQ64uIVtbgdub6Z9HtDa+YDcpKL/ITPjZ3Nb6UNcU/I6S5uGh44jIu2gK3LTUV8FvQYX3URrLdlOT/6Q+DhXlrxJKU2h44hIO6jop6OuCvrqiDbVk/Hz6GfbOT+2OHQUEWkHFf101FVCnxGhUwSXevXtK4nTqPPDuabk9YCJRKS9VPTbsrse9m6FvseGTpJTmihlevwcJsTmw56toeOISJpU9NsSncSlr470D/ZUfDxdrRGW58fIWxFR0W9bNEZf3TsftdiHU5k4BhZNCx1FRNKkot+Wukriboz88YrQSXKQ8WR8PLz3JnywLnQYEUmDin5b6qqo9v40tn1JQ1F6Oj4egB//6HuaZlkkD6jot6W+ShdltWID/aD8PD5T8jqalkEk96not8Yd6tZozp02/GPFiQyPbeIMqwgdRUTaoKLfmp010LCDtZpds1XPx8ew27tybcmroaOISBtU9FtTrzl30rGTHsyMn82VJW/Cvp1tbyAiwajot6ZOUyqna1r8QnraXlj+dOgoItIKDUlpTX0VjV7C+94vdJKcN9+PozJxDMcueIjyx3sDsG7qpwOnEpGD6Ui/NXWVvOdHEackdJI8YEyLXwjr53CsVbe9uogEoaLfGo3caZen4uMhVsakkpdDRxGRFqjotySRgPo1OonbDnUcwczGj3NNyWt0oTF0HBFphop+S3ZshKY9Kvrt9Hj8QvrYzuTsmyKSc1T0W1JXCcAajdFvl9cSp1Dt/ficunhEcpKKfkv2j9FP6Ei/PZwYTzR9gvNLljD+1l+HjiMiB1HRb0ldFZR2YyN9QifJO7+JX0DCjc+WvBI6iogcREW/JfVroM9wXLuo3TbSl1cSp/KXJa9AXDdOF8klqmgtqauEProZekc9Fr+IgVYPq58PHUVEUqjoNycRT94URLdI7LBZiTN43/vC3PtCRxGRFCr6zdm2HuINfHv27tBJ8lacEh5puhjWvgJbVoeOIyIRFf3mRMM112rkziF5PH4hlHSBd+4PHUVEIir6zalbA2h2zUNVxxFw0tWw8FHYtyN0HBFBRb959VXs8q5s4cjQSfLfmK9Aww5Y/HjoJCKCin7z6vbfF9dCJ8l/g8+CgafB3PuTt58UkaDaLPpmNsTMXjazFWa2zMxujtr7mNlLZlYRPfdO2eZWM6s0s1VmdmlK+5lmtiR6704zy82qWl+lWyRmihmMmQxbViRP6opIUOkc6TcB33T3E4GxwE1mdhIwBZjl7iOBWdFrovcmAScDE4G7zGz/hPR3A5OBkdFjYgZ/lsyIN8IH76o/P5NGXcsW7wVv3RU6iUjRa7Pou/tGd18QLe8AVgCDgKuAB6PVHgSujpavAqa5+z53XwtUAmPMbCDQy93fcncHHkrZJnd88C54XHPuZFJZNx5umgAVL2r4pkhg7erTN7Ny4OPAHGCAu2+E5D8MwFHRaoOA9SmbVUdtg6Llg9ub+57JZjbPzOZt2bKlPREPXb3ui9sZHo5/kn1exiM/mxI6ikhRS7vom1lP4HfALe6+vbVVm2nzVto/2uh+r7uPdvfR/fv3TzdiZkQ3Q9c8+plVxxE8GR/PX5S8CrvqQscRKVppFX0zKyNZ8B9x9yej5s1Rlw3Rc03UXg0MSdl8MLAhah/cTHtuqauEbkdQz+GhkxScB+KX0c0aYf4DoaOIFK10Ru8Y8Ctghbv/JOWt6cD10fL1wDMp7ZPMrKuZDSN5wnZu1AW0w8zGRp95Xco2uaO+CvqMQMM1M6/CBzM7flpyPp6mfaHjiBSldI70zwW+CFxkZgujx6eAqcAEM6sAJkSvcfdlwBPAcuAF4CZ3j0efdSNwP8mTu1VA7k3BWLeGp9d3C52iYJRPmUn5lJkHXt8X/xTs3AyLpgVMJVK8Sttawd1fp+XD3otb2OZ24PZm2ucBo9oTMKsa98K29azz0aGTFKw3EqNg4Onwxk/h41+AWElbm4hIBumK3FQfrANcE611KuOr734ieZOa5U8HziJSfFT0U+2fXVNX43aq3ydGQ7/j4LWfaGoGkSxT0U9Vr+Ga2eDEYPw3YPNSqPh96DgiRUVFP8Wjz79MnR/Odg4LHaXwnfJZOGIIvPZjyqfM+NDJXhHpPCr6KYbZZh3lZ0tJGZzz/2D9HMbFlodOI1I0VPRTDIttVNHPpjO+yCbvzS2lv6OFi7NFJMNU9Pdr2MXR9gFrEjqJmzVl3fmfpqs4O7aSc2NLQ6cRKQoq+pHL/j05YaiO9LNj/0Vbj8cv5H3vyzdLf6ORPCJZoKIfKbdNgIp+tjVQxi+aruaMWCVU/iF0HJGCp6IfGXag6A8InKT4/DZ+AesT/eHl23W0L9LJVPQjw2wjm/1IdtE9dJSi00gpd8Y/Axv+BCtnhI4jUtBU9CPlsU3q2gnoyfh5VCQGwR9uS96yUkQ6hYp+pNw2ac6dgOKUMLVpUnIqjAUPtr2BiHSIij7A3m30t+060g9sVuIM+Nh4mD0V9u0IHUekIKnow4FbJOq+uKEZTPgP2LUF3rgzdBiRgqSiD8lpftHsmrmg/BebeDY+lt2v/IwxUx4OHUek4Kjow4Ej/Xc1XDMn3NH0OUqIM6XssdBRRAqOij5AfRXve1/20SV0EgHW+wDujV/ONSWvw7tvho4jUlBU9AHqqlinkTs55a6mK3nf+8Jz/wjxptBxRAqGij5AXaVG7uSYPXTjPxu/kLzRyvxfh44jUjBU9HfXw96trFHRzznPJ8bAsAvgj9+DXbWh44gUBBX92tWARu7kJoPL7oCGXfDid0KHESkIKvpbVgFQ4YMCB5FmHXUCP2u4AhY/DhWahVPkUKno166G0m687/1DJ5FmlE+Zyf80XZ2cl2fGLbBvZ+hIInlNRX/LKug7koR2Rc5qoIxvN34FtlUn+/dFpMOKvtKtX72Q6Rt6ho4hbVjgx/G/TRNgzj3w3pzQcUTyVnEX/YbdDLJaKhPqz88HP2z6HBwxBJ76qrp5RDqouIt+XQUxcyr9mNBJJA276M5na24gUb8OXrw1dByRvFTcRX9LcrhmpUbu5I13/AR+Gb8CFjwEK2eGjiOSd9os+mb2gJnVmNnSlLY+ZvaSmVVEz71T3rvVzCrNbJWZXZrSfqaZLYneu9PMLPM/TjvVriLupqtx88x/N10LR58K078OOzaHjiOSV9I50v9fYOJBbVOAWe4+EpgVvcbMTgImASdH29xlZiXRNncDk4GR0ePgz8y+Lat41wfQQFnoJNIOjZRy8btfTF609eRXIBEPHUkkb7RZ9N39VaD+oOargP33tHsQuDqlfZq773P3tUAlMMbMBgK93P0td3fgoZRtwqldTZW6dvJSlQ+CT/0I1r6SvNOWiKSlo336A9x9I0D0fFTUPghYn7JeddQ2KFo+uL1ZZjbZzOaZ2bwtW7Z0MGIb4k1QV6WTuPnsjC/C6V+AV++AipdCpxHJC5k+kdtcP7230t4sd7/X3Ue7++j+/TvpStkP1kKiUcM181j5lJmc8PbFrEgMTXbzbH0vdCSRnNfRor856rIheq6J2quBISnrDQY2RO2Dm2kPJ5pzR0f6+W0vXbmx8eZkv/60v07284tIizpa9KcD10fL1wPPpLRPMrOuZjaM5AnbuVEX0A4zGxuN2rkuZZswapNFv0pFP++t84HwF79Kzr3/5GRIJEJHEslZ6QzZfAx4CzjezKrN7MvAVGCCmVUAE6LXuPsy4AlgOfACcJO77x9acSNwP8mTu1XA8xn+Wdpny2o4/Bh20iNoDMmQ4y6BS26HlTM0P49IKyw5mCZ3jR492ufNm5f5D773E9DtCMqXT878Z0sgzvdLf8XnS//Itxq/yo9uvyN0IJFgzGy+u48+uL04r8h1h9oK6H9C6CSSUca/Nd3Aa/FRTC29D1aF/WNSJBcVZ9Hf/j407OSfX28InUQyrIlSvtb4DZZ5OfzmBlj3RuhIIjmlOIt+zQqA5I05pODsojs3NPxTckbOxybBxkWhI4nkjOIs+puWALDShwYOIp3lA3rBdU9D117w0NWwcXHoSCI5oTiL/uZlcMRQtnNY6CTSicp/sAhueBbKesCDV8CGhaEjiQRXpEV/KQw4OXQKyYY+w+FvZkZH/FfC+/NDJxIJqviKfuPe5Mido0eFTiLZ0rs8Wfi7HQkPXsl13/l+6EQiwRRf0d+yEjyuI/0iUT5lJuVTZsKRQ+FLL0LvYfyq7Eew8LHQ0USCKA0dIOs2R/eCGXAKsCpoFMme8inJu2wdzs3cXfbfjH/6a7CtGs7/FuTA/XxEsqX4jvQ3LU2e2OszLHQSCWAHPfibxm/DqZ+Dl/8zOZZfk7RJESmqI/3yKTOZ1mU23RjI1d95IXQcCaSRUvjMPckuvj/cljzHM+kRHQhIUSiqI/0YCUbZWhYlhoeOIqGZwbk3w1//BrZXw70XwPKwE7+KZENRFf3htoGetpfFiRGho0hgB07wHvtJmPwK9BkBT1wHz94CDbtDxxPpNEXVvXOarQFgketIX5L2n+At4xYqLl4Ab/wU3n0DrroLhpwVNpxIJyiqI/1TY1Xs8O6s0Y1T5CCNlMKE78IXn4aG3STunwAv3KqTvFJwiqronxarYmliGIni+rGlHcrv282omtt4JH4xvH0X3DUOVs5MTsctUgCKp/o1NXCivaeuHWnR/q6enfTgX5u+xOf2/Sur65tg2ufh4Wtgy6o/nwsQyVPFU/Q3L6GrNbFYI3ckTXP8RD7V8AOYOBWq59P0i7F8v/Q+jqYudDSRDiueov/umwDMSxwfOIjkkyZKYeyN8PX5PBz/JNeWvMorXf+B+/7lr2D7xtDxRNqteIr+utepSgykht6hk0g+6tmf25pu4KKGn/BsYhxfKnkefnoKPP13TLj1ntDpRNJWHDdGjzfBHcN4ZNdZ/HPTlzMTTIraENvMa+OXw58ehqY9MPLS5F8Ewy6AWPEcS0nuKu4bo29aDPu283bixNBJpECs9wHw6R/BN5bxk8Zr4f158H9Xw52nwez/Sk7mJpKDiuPirHWvAfB24qTAQaSQ/HkUzzXcU385l8bmcWfvJTD7+yRe/gGxYy+CUdfA8Z+CHn2CZhXZrziK/tpXqUwcwxaODJ1ECtQ+ujA9cQ7TV5zDYPsMny15hb+ofI3BVbPASmDYeXDilXDCp+Hwo0PHlSJW+H36e7bCD4/lvoYJ3N70hYzlEmmbc4qt5bKSufzdUcugvirZPGAUjLgQRlwEQ8dBWfewMaUgtdSnX/hH+queg0QjM+JjQyeRomMs8eEsaRrOHRuc4209F8YWMqXHBva9cTdd3/w5e72MbuVjYMgYGHI2DB4Dh/UNHVwKWMEX/T/+7h6Oi/VjkWtmTQnJWOVDWRUfyi9XQHdu4OzYSs6NLeWstas4ed2dlFkcgDWJoxk+amzyPs4DTkk+9xqkO3xJRhR20d9dz3mxJfwqfhmg/2Ekd+yhG7MTpzM7cToAXWngVFvDmbHVnB6rYvjGhbD86QPrf+A9WeVDGDt6DPQdAX2GJ6eD7jNM3UPSLoVd9Oc9QJnFeTY+LnQSkVbtowvv+Am8Ez8B4sBGWHfbeVCznH+5Zxon2bscH1tP3fwn6Ws7Prxxr0HR4xjoNYjvvbaVzd6HX3zt8mRbz6OhtEuQn0tyT9ZP5JrZROBnQAlwv7tPbW39Dp/I3VnDzh+ewpuJk5nc+M0OZRXJRb3YRbltotw2U26b+IczS2H7+7BjI7tr19PD9n10o669ksNGe/Q96NEHuh2RfL/r4R96nHHHHHbSndVTr876zyiHrqUTuVkt+mZWAqwGJgDVwDvAX7n78pa26XDRf/YWGuc9xCUNd7DWB3YwsUi+cXqxi6PtAwZaPQOsngF8wDfH94fddbC7jsUVazi1dzz5ujGN+wWUdIGyHslupNJuBz13hdLuUNYt5blbsj1WBiWl0XNZ8jlW8uflkjKIlf75+cByGVgsua5ZcvmQHgd/xv6u3ui5va9bWyeHzrvkyuidMUClu6+JQk0DrgJaLPodEm+C+jU8HP+kCr4UGWM7PdnuPVntQw60/vyVg1bbnHzqSgO92E1P20NP9tDT9nA4uw8s92QPvZr20H3fXrrRSFdroBuNdKOBblZPNxroSiMn9iuDpr3Ub9uWXI8GSiy3h4NnRwf/Ydn/+tvrMn7OJttFfxCwPuV1NXD2wSuZ2WRgcvRyp5mt6sB39QNq4Tcd2DQronw5Ldcz5no+yP2MuZ4Pcj9j5+X71x6HsvXHmmvMdtFv7m+fjxwOuPu9wL2H9EVm85r70yZX5Ho+yP2MuZ4Pcj9jrueD3M+Y6/kOlu0J16qBISmvBwMbspxBRKRoZbvovwOMNLNhZtYFmARMz3IGEZGildXuHXdvMrO/B14kOWTzAXdf1klfd0jdQ1mQ6/kg9zPmej7I/Yy5ng9yP2Ou5/uQnJ9wTUREMqc4bqIiIiKAir6ISFHJ66JvZhPNbJWZVZrZlGbeNzO7M3p/sZmdkYMZP2Fm28xsYfT4tyzne8DMasxsaQvvB92HaeQLuv+iDEPM7GUzW2Fmy8zs5mbWCbYf08wX+vewm5nNNbNFUcbvNrNOyH2YTr7gv4tpcfe8fJA8EVwFDAe6AIuAkw5a51PA8ySvDxgLzMnBjJ8AZgTcj+cDZwBLW3g/9D5sK1/Q/RdlGAicES0fTnKqkZz5XUwzX+jfQwN6RstlwBxgbA7tw3TyBf9dTOeRz0f6B6Z0cPcGYP+UDqmuAh7ypLeBI80sm/MypJMxKHd/FahvZZWg+zCNfMG5+0Z3XxAt7wBWkLz6PFWw/ZhmvqCi/bIzelkWPQ4eZRJyH6aTLy/kc9FvbkqHg3+R01mnM6X7/eOiPxufN7OTsxMtbaH3YTpyZv+ZWTnwcZJHgqlyYj+2kg8C70czKzGzhUAN8JK759Q+TCMf5NDvYkvyueinM6VDWtM+dKJ0vn8B8DF3Pw34OfB0Z4dqp9D7sC05s//MrCfwO+AWd99+8NvNbJLV/dhGvuD70d3j7n46ySv1x5jZqINWCboP08gXfB+mI5+LfjpTOoSe9qHN73f37fv/bHT354AyM+uXvYhtCr0PW5Ur+8/MykgW1Efc/clmVgm6H9vKlyv7Mfr+rcBsYOJBb+XE72JL+XJpH7Ymn4t+OlM6TAeui876jwW2ufvGXMpoZkebJedRNbMxJP+b1GUxY1tC78NW5cL+i77/V8AKd/9JC6sF24/p5Au9H82sv5kdGS13Bz4JrDxotZD7sM18ofdhuvL2donewpQOZva16P1fAs+RPONfCewG/iYHM14L3GhmTcAeYJJHQwGywcweIznqoJ+ZVQP/TvIkVU7swzTyBd1/kXOBLwJLoj5fgO8AQ1NyhtyP6eQLvR8HAg9a8kZLMeAJd5+RQ/8/p5Mv9D5Mi6ZhEBEpIvncvSMiIu2koi8iUkRU9EVEioiKvohIEVHRFxHJMmtjIsGD1j3fzBaYWZOZXXvQe/GUCd7Suguhir6ISPb9Lx+9+Kwl7wE3AI82894edz89elyZzoep6IuIZFlzEwma2Qgze8HM5pvZa2Z2QrTuOndfDCQy8d0q+iIiueFe4OvufibwLeCuNLbpZmbzzOxtM7s6nS/J2ytyRUQKRTQZ3jnAb6KZHAC6prHpUHffYGbDgT+a2RJ3r2ptAxV9EZHwYsDWaBbPtLn7huh5jZnNJjltdqtFX907IiKBRVNdrzWzz8KBW0Oe1to2ZtbbzLpGy/1IzrG0vK3v0tw7IiJZljqRILCZ5ESCfwTuJjm5Wxkwzd3/w8zOAp4CegN7gU3ufrKZnQPcQ/IEbwz4qbv/qs3vVtEXESke6t4RESkiKvoiIkVERV9EpIio6IuIFBEVfRGRIqKiLyJSRFT0RUSKyP8H+pC4MiHExtAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] @@ -257,7 +249,7 @@ }, { "cell_type": "markdown", - "id": "984d95e6", + "id": "ad4f0f0e", "metadata": {}, "source": [ "We finally plot the generated $\\mu$ density distribution, followed by the generated $\\theta=\\arccos (\\mu)$ density distribution, compared with the respective curves $\\rho = 2\\mu$ and $\\rho = \\sin(2\\theta)$:" @@ -265,13 +257,13 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 8, "id": "ae4c97de", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -292,13 +284,13 @@ }, { "cell_type": "code", - "execution_count": 50, - "id": "9611b1df", + "execution_count": 9, + "id": "41daa433", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -320,7 +312,7 @@ { "cell_type": "code", "execution_count": null, - "id": "52c4d880", + "id": "09d585d1", "metadata": {}, "outputs": [], "source": [] @@ -328,7 +320,7 @@ { "cell_type": "code", "execution_count": null, - "id": "21e0f46f", + "id": "567abec2", "metadata": {}, "outputs": [], "source": [] From 9e5aa2098a6978ac3fc63c32838f46b667a33eae Mon Sep 17 00:00:00 2001 From: smithis7 Date: Mon, 24 May 2021 12:15:32 -0400 Subject: [PATCH 03/20] finished notebook aspect of energy packet docs --- docs/physics/montecarlo/energypackets.ipynb | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/physics/montecarlo/energypackets.ipynb b/docs/physics/montecarlo/energypackets.ipynb index effee8cb2a6..3f047cd864b 100644 --- a/docs/physics/montecarlo/energypackets.ipynb +++ b/docs/physics/montecarlo/energypackets.ipynb @@ -37,13 +37,12 @@ "radiation field.\n", "\n", "During the simulation, the energy of the packet remains constant in the local\n", - "co-moving frame (see :ref:`Reference Frames ` for\n", + "co-moving frame (see [Reference Frames](propagation.rst#reference-frames) for\n", "details about the lab and co-moving frames). This naturally ensures energy\n", "conservation and constitutes the main advantage of this discretization scheme.\n", "There is one side effect of this so-called indivisible packet energy scheme\n", "which often causes confusion: Even during radiation-matter interactions the\n", - "packet energy is conserved in the co-moving frame (see :doc:`Propagation\n", - "`). However, the frequency associated with a packet may change\n", + "packet energy is conserved in the co-moving frame (see [Packet Propagation](propagation.rst)). However, the frequency associated with a packet may change\n", "(e.g. during non-resonant line interactions). As a consequence, packets may\n", "represent a varying number of real photons during their lifetime.\n", "\n", @@ -144,7 +143,7 @@ "id": "516633c5", "metadata": {}, "source": [ - "We now generate the ensemble of packets. The array of packet energies is also shown -- note that this function gives the packet energies in units of XXXXXXXXXXXXXXXXXXXXXXXXXXXX." + "We now generate the ensemble of packets. The array of packet energies is also shown." ] }, { @@ -162,9 +161,9 @@ } ], "source": [ - "nus,mus,es = BlackBodySimpleSource(seed).create_packets(temp,n_packets,rng)\n", + "nus,mus,energies = BlackBodySimpleSource(seed).create_packets(temp,n_packets,rng)\n", "\n", - "print(es)" + "print(energies)" ] }, { @@ -172,7 +171,7 @@ "id": "16936bce", "metadata": {}, "source": [ - "Each packet contributes a luminosity of XXXXXXXX. We make a uniform array that shows the luminosity contribution of each packet. This is important so that our plotted spectrum has the correct y-axis scale (in the actual TARDIS cose, XXXXXX)." + "We set the timespan of the simulation so that each packet contributes the appropriate luminosity to the spectrum." ] }, { @@ -182,7 +181,9 @@ "metadata": {}, "outputs": [], "source": [ - "lumin_per_packet = lumin*es" + "t_simulation = 1/lumin\n", + "\n", + "lumin_per_packet = es/t_simulation" ] }, { From 5947c40640d98aa3520b7757c51e21320a1f467b Mon Sep 17 00:00:00 2001 From: smithis7 Date: Mon, 24 May 2021 12:26:55 -0400 Subject: [PATCH 04/20] important small changes --- docs/physics/montecarlo/energypackets.ipynb | 117 +++----------------- 1 file changed, 18 insertions(+), 99 deletions(-) diff --git a/docs/physics/montecarlo/energypackets.ipynb b/docs/physics/montecarlo/energypackets.ipynb index 3f047cd864b..d5f8499b75d 100644 --- a/docs/physics/montecarlo/energypackets.ipynb +++ b/docs/physics/montecarlo/energypackets.ipynb @@ -54,20 +54,10 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "426325e5", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[\u001b[1mpy.warnings \u001b[0m][\u001b[1;33mWARNING\u001b[0m] /home/isaac/tardis-sn/tardis/montecarlo/montecarlo_numba/formal_integral.py:177: NumbaDeprecationWarning: \u001b[1mThe 'numba.jitclass' decorator has moved to 'numba.experimental.jitclass' to better reflect the experimental nature of the functionality. Please update your imports to accommodate this change and see http://numba.pydata.org/numba-doc/latest/reference/deprecation.html#change-of-jitclass-location for the time frame.\u001b[0m\n", - " @jitclass(integrator_spec)\n", - " (\u001b[1mwarnings.py\u001b[0m:110)\n" - ] - } - ], + "outputs": [], "source": [ "import numpy as np\n", "from tardis.montecarlo.packet_source import *\n", @@ -88,13 +78,13 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "bc34bf33", "metadata": {}, "outputs": [], "source": [ - "seed = 42069 #seed for the pseudo-random number generator\n", - "r_photosphere = 847.38 #radius of the supernova's photosphere in cm\n", + "seed = 1 #seed for the pseudo-random number generator\n", + "r_photosphere = 1 #radius of the supernova's photosphere in cm\n", "n_packets = 40000 #number of packets generated" ] }, @@ -108,18 +98,10 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "8f2c15a9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Luminosity: 5.11655811094159e+18 erg/s\n" - ] - } - ], + "outputs": [], "source": [ "temp = 10000 #temperature in K\n", "lumin = 4 * np.pi * (r_photosphere**2) * const.sigma_sb.cgs.value * (temp**4)\n", @@ -148,18 +130,10 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "925e9e1b", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[2.5e-05 2.5e-05 2.5e-05 ... 2.5e-05 2.5e-05 2.5e-05]\n" - ] - } - ], + "outputs": [], "source": [ "nus,mus,energies = BlackBodySimpleSource(seed).create_packets(temp,n_packets,rng)\n", "\n", @@ -176,14 +150,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "id": "fed35f47", "metadata": {}, "outputs": [], "source": [ "t_simulation = 1/lumin\n", "\n", - "lumin_per_packet = es/t_simulation" + "lumin_per_packet = energies/t_simulation" ] }, { @@ -196,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "id": "916a5e22", "metadata": { "scrolled": false @@ -221,23 +195,10 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "913fcdbb", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "bins=200\n", "nus_planck = np.linspace(min(nus),max(nus),bins)\n", @@ -258,23 +219,10 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "id": "ae4c97de", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "x = np.linspace(0,1,1000)\n", "\n", @@ -285,23 +233,10 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "41daa433", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "thetas = np.linspace(0,np.pi/2,1000)\n", "\n", @@ -309,22 +244,6 @@ "plt.plot(thetas,np.sin(2*thetas))\n", "plt.show()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "09d585d1", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "567abec2", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From 70e45186448d76949066c5f9d67b27272323f5cb Mon Sep 17 00:00:00 2001 From: smithis7 Date: Mon, 24 May 2021 21:56:04 -0400 Subject: [PATCH 05/20] wrote a section before the python code --- docs/physics/montecarlo/discretization.rst | 35 ---------- docs/physics/montecarlo/index.rst | 2 +- ...ergypackets.ipynb => initialization.ipynb} | 69 ++++++++++--------- 3 files changed, 39 insertions(+), 67 deletions(-) delete mode 100644 docs/physics/montecarlo/discretization.rst rename docs/physics/montecarlo/{energypackets.ipynb => initialization.ipynb} (61%) diff --git a/docs/physics/montecarlo/discretization.rst b/docs/physics/montecarlo/discretization.rst deleted file mode 100644 index f7d0b97db19..00000000000 --- a/docs/physics/montecarlo/discretization.rst +++ /dev/null @@ -1,35 +0,0 @@ -********************************************* -Monte Carlo Discretization --- Energy Packets -********************************************* - -While it is instructive to think about tracking the propagation history of -photons when illustrating the basic idea behind Monte Carlo radiative transfer -techniques, there are important numerical reasons for using a different -discretization scheme. Instead of thinking in the photon picture, it brings -significant advantages to follow the idea of :cite:`Abbott1985` and -:cite:`Lucy1999` and consider parcels of radiant energy as the fundamental -building blocks of the Monte Carlo calculation. These basic Monte Carlo quanta -are commonly referred to as "energy packets" or simply "packets". - -During a Monte Carlo calculation, a large number of packets, all with a certain -energy :math:`\varepsilon`, are created. In addition, each packet is associated -with a frequency. These assignments are performed in a manner which ensures -that the ensemble of packets represents the spectral energy distribution of the -radiation field (see :ref:`Propagation `). - -During the simulation, the energy of the packet remains constant in the local -co-moving frame (see :ref:`Reference Frames ` for -details about the lab and co-moving frames). This naturally ensures energy -conservation and constitutes the main advantage of this discretization scheme. -There is one side effect of this so-called indivisible packet energy scheme -which often causes confusion: Even during radiation-matter interactions the -packet energy is conserved in the co-moving frame (see :doc:`Propagation -`). However, the frequency associated with a packet may change -(e.g. during non-resonant line interactions). As a consequence, packets may -represent a varying number of real photons during their lifetime. - -.. note:: - The indivisible energy packet scheme does not require that all packets have - the same energy. This is just a convenient and simple choice adopted in - TARDIS. - diff --git a/docs/physics/montecarlo/index.rst b/docs/physics/montecarlo/index.rst index 08b82c472f2..30ffbeb7fb2 100644 --- a/docs/physics/montecarlo/index.rst +++ b/docs/physics/montecarlo/index.rst @@ -13,7 +13,7 @@ can also be found in various papers by L. Lucy and in the main TARDIS publicatio .. toctree:: basicprinciples - energypackets + initialization propagation lineinteraction estimators diff --git a/docs/physics/montecarlo/energypackets.ipynb b/docs/physics/montecarlo/initialization.ipynb similarity index 61% rename from docs/physics/montecarlo/energypackets.ipynb rename to docs/physics/montecarlo/initialization.ipynb index d5f8499b75d..cb6d7b32f31 100644 --- a/docs/physics/montecarlo/energypackets.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -9,47 +9,48 @@ "source": [ ".. _energypackets:\n", "\n", - "**************\n", - "Energy Packets\n", - "**************" + "****************************\n", + "Energy Packet Initialization\n", + "****************************" ] }, { "cell_type": "markdown", - "id": "4394c272", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, + "id": "6c0dbe0a", + "metadata": {}, "source": [ "While it is instructive to think about tracking the propagation history of\n", "photons when illustrating the basic idea behind Monte Carlo radiative transfer\n", "techniques, there are important numerical reasons for using a different\n", "discretization scheme. Instead of thinking in the photon picture, it brings\n", - "significant advantages to follow the idea of [AbbottLucy85] and\n", - "[Lucy99a] and consider parcels of radiant energy as the fundamental\n", + "significant advantages to follow the idea of [] and\n", + "[] and consider parcels of radiant energy as the fundamental\n", "building blocks of the Monte Carlo calculation. These basic Monte Carlo quanta\n", - "are commonly referred to as \"energy packets\" or simply \"packets\".\n", + "are commonly referred to as \"energy packets\" or simply \"packets\", and are composed of many photons with the same frequency.\n", + "\n", + "During a Monte Carlo calculation, $N$ (a large number) packets, all with a certain\n", + "energy $\\varepsilon$, are created at the inner boundary of the computational domain (as will be discussed in [Packet Propagation](propagation.rst)) known as the photosphere. Currently, the photosphere is modeled as a spherical blackbody with a radius $R_\\mathrm{phot}$ and temperature $T_\\mathrm{phot}$. In TARDIS, all packets are assigned identical energies, and the total energy of the packets is 1 erg (and thus each packet has an energy of $\\frac{1}{N}$ ergs).\n", + "\n", + ".. note:: The indivisible energy packet scheme does not require that all packets have the same energy. This is just a convenient and simple choice adopted in TARDIS.\n", + "\n", + "Since the photosphere is modeled as a blackbody, its total luminosity $L$ (recall that luminosity is energy emitted divided by the time in which it is emitted) is\n", + "$$L=\\frac{N\\varepsilon}{\\Delta t}=4 \\pi R_{\\mathrm{phot}}^2 \\sigma_{\\mathrm{R}} T_{\\mathrm{phot}}^4$$\n", + "where $\\sigma_\\mathrm{R}$ is the Stefan-Boltzmann constant and $\\Delta t$ is the physical duration of the simulation. In order to make this relationship hold (remembering that $N\\varepsilon = 1$ erg), we use\n", + "$$\\Delta t = \\frac{1}{L}=\\frac{1}{4 \\pi R_{\\mathrm{phot}}^2 \\sigma_{\\mathrm{R}} T_{\\mathrm{phot}}^4}.$$\n", + "\n", + "During packet initialization, each packet is assigned an initial propagation direction $\\mu$ which is the cosine of the angle $\\theta$ which the packet's path makes with the radial direction. Using a pseudo-random number generator which generates numbers $z$ uniformly distributed on the interval $[0,1]$, the propagation direction is determined according to\n", + "$$\\mu = \\sqrt{z}.$$\n", + "This sampling is demonstrated in the code below.\n", "\n", - "During a Monte Carlo calculation, a large number of packets, all with a certain\n", - "energy $\\varepsilon$, are created. In addition, each packet is associated\n", - "with a frequency. These assignments are performed in a manner which ensures\n", - "that the ensemble of packets represents the spectral energy distribution of the\n", - "radiation field.\n", + "Finally, each packet is assigned an initial frequency (or more precisely, the initial frequency of its consitiuent photons). Note that since each packet has the same energy, each packet will represent a different number of real photons. The sampling on packet frequencies is more involved than that of the propagation direction, as it involves sampling the Planck distribution:\n", + "$$L(\\nu)=\\frac{8\\pi R_\\mathrm{phot}^2 h\\nu^3}{c^2}\\frac{1}{\\exp\\left(\\frac{h\\nu}{k_BT}\\right)-1}$$\n", + "(where SOMETHING). TARDIS uses the technique described in [] and summarized in [] for this purpose.\n", "\n", "During the simulation, the energy of the packet remains constant in the local\n", - "co-moving frame (see [Reference Frames](propagation.rst#reference-frames) for\n", - "details about the lab and co-moving frames). This naturally ensures energy\n", - "conservation and constitutes the main advantage of this discretization scheme.\n", - "There is one side effect of this so-called indivisible packet energy scheme\n", - "which often causes confusion: Even during radiation-matter interactions the\n", - "packet energy is conserved in the co-moving frame (see [Packet Propagation](propagation.rst)). However, the frequency associated with a packet may change\n", - "(e.g. during non-resonant line interactions). As a consequence, packets may\n", - "represent a varying number of real photons during their lifetime.\n", + "co-moving frame (see [Reference Frames](propagation.rst#reference-frames)). This naturally ensures energy\n", + "conservation and constitutes the main advantage of this discretization scheme. **However, while the energy of the packets is conserved in the co-moving frame, the frequency of the contituent photons (in the local co-moving frame) may over the course of the simulation. Thus, a packet may represent several different numbers of real photons throughout their lifetimes.**\n", "\n", - ".. note::\n", - " The indivisible energy packet scheme does not require that all packets have\n", - " the same energy. This is just a convenient and simple choice adopted in\n", - " TARDIS." + "We now demonstrate the TARDIS packet initialization framework:" ] }, { @@ -84,7 +85,7 @@ "outputs": [], "source": [ "seed = 1 #seed for the pseudo-random number generator\n", - "r_photosphere = 1 #radius of the supernova's photosphere in cm\n", + "r_phot = 1 #radius of the supernova's photosphere in cm\n", "n_packets = 40000 #number of packets generated" ] }, @@ -104,7 +105,7 @@ "outputs": [], "source": [ "temp = 10000 #temperature in K\n", - "lumin = 4 * np.pi * (r_photosphere**2) * const.sigma_sb.cgs.value * (temp**4)\n", + "lumin = 4 * np.pi * (r_phot**2) * const.sigma_sb.cgs.value * (temp**4)\n", "print('Luminosity:',lumin,'erg/s')" ] }, @@ -116,7 +117,7 @@ "outputs": [], "source": [ "lumin = 1113 #luminocity in erg/s\n", - "temp = ( lumin / (4 * np.pi * const.sigma_sb.cgs.value) )**0.25 / np.sqrt(r_photosphere)\n", + "temp = ( lumin / (4 * np.pi * const.sigma_sb.cgs.value) )**0.25 / np.sqrt(r_phot)\n", "print('Temperature:',temp,'K')" ] }, @@ -182,7 +183,7 @@ "kB = const.k_B.cgs.value\n", "\n", "def planck_function(nu,T):\n", - " return 8 * np.pi * (r_photosphere**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*T)) - 1))" + " return 8 * np.pi * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*T)) - 1))" ] }, { @@ -206,6 +207,8 @@ "\n", "plt.hist(nus,bins=bins,weights=lumin_per_packet/bin_width) #the weights argument is once again to make sure our plotted spectrum has the correct y-axis scale\n", "plt.plot(nus_planck,np.pi*planck_function(nus_planck,temp))\n", + "plt.xlabel('Frequency (Hz)')\n", + "plt.ylabel('Luminosity ?????? (erg)')\n", "plt.show()" ] }, @@ -228,6 +231,8 @@ "\n", "plt.hist(mus,bins=bins,density=True)\n", "plt.plot(x,2*x)\n", + "plt.xlabel('Propagation direction')\n", + "plt.ylabel('Probability density')\n", "plt.show()" ] }, @@ -242,6 +247,8 @@ "\n", "plt.hist(np.arccos(mus),bins=bins,density=True)\n", "plt.plot(thetas,np.sin(2*thetas))\n", + "plt.xlabel('Angle with normal (rad)')\n", + "plt.ylabel('Probability density')\n", "plt.show()" ] } From 95d625890293c765756dbd5c15039345f3ff89db Mon Sep 17 00:00:00 2001 From: smithis7 Date: Tue, 25 May 2021 18:12:06 -0400 Subject: [PATCH 06/20] final changes --- docs/physics/montecarlo/basicprinciples.rst | 2 +- docs/physics/montecarlo/initialization.ipynb | 24 +++++++-------- docs/physics/montecarlo/lineinteraction.rst | 2 +- docs/physics/montecarlo/propagation.rst | 31 +------------------- 4 files changed, 15 insertions(+), 44 deletions(-) diff --git a/docs/physics/montecarlo/basicprinciples.rst b/docs/physics/montecarlo/basicprinciples.rst index 62703df12f6..8c18c790376 100644 --- a/docs/physics/montecarlo/basicprinciples.rst +++ b/docs/physics/montecarlo/basicprinciples.rst @@ -20,7 +20,7 @@ through and interact with the ambient material. A sufficiently large number of representative "machine photons" are considered and their propagation history solved in a stochastic process. The initial properties of these photons are randomly (in a probabilistic sense) assigned in accordance with the macroscopic -properties of the radiation field (see :doc:`Discretization `) +properties of the radiation field (see :ref:`Energy Packets `) and in a similar manner the decisions about when, where and how the machine photons interact with the surrounding material are made (see :ref:`Propagation `). If this process is repeated for a large enough number of machine diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index cb6d7b32f31..6a1d1c466c4 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -7,7 +7,7 @@ "raw_mimetype": "text/restructuredtext" }, "source": [ - ".. _energypackets:\n", + ".. _initialization:\n", "\n", "****************************\n", "Energy Packet Initialization\n", @@ -42,9 +42,7 @@ "$$\\mu = \\sqrt{z}.$$\n", "This sampling is demonstrated in the code below.\n", "\n", - "Finally, each packet is assigned an initial frequency (or more precisely, the initial frequency of its consitiuent photons). Note that since each packet has the same energy, each packet will represent a different number of real photons. The sampling on packet frequencies is more involved than that of the propagation direction, as it involves sampling the Planck distribution:\n", - "$$L(\\nu)=\\frac{8\\pi R_\\mathrm{phot}^2 h\\nu^3}{c^2}\\frac{1}{\\exp\\left(\\frac{h\\nu}{k_BT}\\right)-1}$$\n", - "(where SOMETHING). TARDIS uses the technique described in [] and summarized in [] for this purpose.\n", + "Finally, each packet is assigned an initial frequency (or more precisely, the initial frequency of its consitiuent photons). Note that since each packet has the same energy, each packet will represent a different number of real photons. The sampling on packet frequencies is more involved than that of the propagation direction, as it involves sampling the Planck distribution (see below). TARDIS uses the technique described in [] and summarized in [] for this purpose.\n", "\n", "During the simulation, the energy of the packet remains constant in the local\n", "co-moving frame (see [Reference Frames](propagation.rst#reference-frames)). This naturally ensures energy\n", @@ -85,7 +83,7 @@ "outputs": [], "source": [ "seed = 1 #seed for the pseudo-random number generator\n", - "r_phot = 1 #radius of the supernova's photosphere in cm\n", + "r_phot = 1e15 #radius of the supernova's photosphere in cm\n", "n_packets = 40000 #number of packets generated" ] }, @@ -104,7 +102,7 @@ "metadata": {}, "outputs": [], "source": [ - "temp = 10000 #temperature in K\n", + "temp = 5000 #temperature in K\n", "lumin = 4 * np.pi * (r_phot**2) * const.sigma_sb.cgs.value * (temp**4)\n", "print('Luminosity:',lumin,'erg/s')" ] @@ -116,7 +114,7 @@ "metadata": {}, "outputs": [], "source": [ - "lumin = 1113 #luminocity in erg/s\n", + "lumin = 1e40 #luminocity in erg/s\n", "temp = ( lumin / (4 * np.pi * const.sigma_sb.cgs.value) )**0.25 / np.sqrt(r_phot)\n", "print('Temperature:',temp,'K')" ] @@ -166,7 +164,9 @@ "id": "0d839222", "metadata": {}, "source": [ - "We define important constants, and write the Planck distribution function so that we can compare to the generated distribution:" + "We define important constants, and for comparisson's sake, we code the Planck distribution function\n", + "$$L_\\nu (\\nu)=\\frac{8\\pi R_\\mathrm{phot}^2 h\\nu^3}{c^2}\\frac{1}{\\exp\\left(\\frac{h\\nu}{k_BT_\\mathrm{phot}}\\right)-1}$$\n", + "where $L_\\nu$ is the luminosity density with respect to frequency, $\\nu$ is frequency, $h$ is Planck's constant, $c$ is the speed of light, and $k_B$ is Boltzmann's constant:" ] }, { @@ -182,8 +182,8 @@ "c2 = const.c.cgs.value**2\n", "kB = const.k_B.cgs.value\n", "\n", - "def planck_function(nu,T):\n", - " return 8 * np.pi * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*T)) - 1))" + "def planck_function(nu):\n", + " return 8 * np.pi * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*temp)) - 1))" ] }, { @@ -206,9 +206,9 @@ "bin_width = nus_planck[1]-nus_planck[0]\n", "\n", "plt.hist(nus,bins=bins,weights=lumin_per_packet/bin_width) #the weights argument is once again to make sure our plotted spectrum has the correct y-axis scale\n", - "plt.plot(nus_planck,np.pi*planck_function(nus_planck,temp))\n", + "plt.plot(nus_planck,np.pi*planck_function(nus_planck))\n", "plt.xlabel('Frequency (Hz)')\n", - "plt.ylabel('Luminosity ?????? (erg)')\n", + "plt.ylabel('Luminosity density w.r.t. frequency (erg/s/Hz)')\n", "plt.show()" ] }, diff --git a/docs/physics/montecarlo/lineinteraction.rst b/docs/physics/montecarlo/lineinteraction.rst index c6d03148e27..3d32cb260a0 100644 --- a/docs/physics/montecarlo/lineinteraction.rst +++ b/docs/physics/montecarlo/lineinteraction.rst @@ -8,7 +8,7 @@ TARDIS currently offers different ways to handle line interactions, which may be activated via the YAML configuration file. Independently of the chosen treatment, a number of steps are always carried out when a Monte Carlo packet performs a line interaction. Since TARDIS adopts the indivisible energy packet -formalism (see :doc:`Discretization `), the packet will have the +formalism (see :ref:`Energy Packets `), the packet will have the same energy in the co-moving frame after (f for final) the line interaction as before (i for initial). Thus, after accounting for the frame transformations, diff --git a/docs/physics/montecarlo/propagation.rst b/docs/physics/montecarlo/propagation.rst index 907ca40f3c1..1f81317fb86 100644 --- a/docs/physics/montecarlo/propagation.rst +++ b/docs/physics/montecarlo/propagation.rst @@ -6,7 +6,7 @@ Packet Propagation The bulk of a Monte Carlo Radiative Transfer calculation is spent on determining the propagation history of the different packets. After a packet is -initialised, it is launched and may then perform interactions with the +initialised (see :ref:`initialization`), it is launched and may then perform interactions with the surrounding material. This occurs again in a probabilistic manner. The packet propagation is followed until it escapes through the outer boundary of the computational domain, at which point the packet contributes to the synthetic @@ -14,35 +14,6 @@ spectrum, the main product of a TARDIS calculation. The different spectral features are simply a combined product of the changes in the packet properties induced in the radiation-matter interactions. -Initialization -============== - -During each TARDIS Monte Carlo simulation cycle, a large number :math:`N` of -Monte Carlo packets are initialised at the lower boundary of the computational domain -(i.e. the photosphere). Since the inner boundary is currently treated as a -black-body in TARDIS, :math:`N` packets with energies - -.. math:: - \varepsilon = \frac{4 \pi R_{\mathrm{phot}}^2 \sigma_{\mathrm{R}} T_{\mathrm{phot}}^4 \Delta t}{N} - -are initialised (the black body temperature :math:`T_{\mathrm{phot}}`, the -photospheric radius :math:`R_{\mathrm{phot}}`, the Stefan-Boltzmann constant -:math:`\sigma_{\mathrm{R}}` and the physical duration of the simulation -:math:`\Delta t` appear here). To commence the packet propagation, each packet -is assigned an initial propagation direction (note that propagation direction is defined as :math:`\mu = \cos -\theta` with :math:`\theta` being the angle the photon path makes with the -radial direction) - -.. math:: - \mu = \sqrt{z} - -and an initial frequency :math:`\nu` in random number experiments, using a -random number generator which provides uniformly distributed numbers :math:`z` -on the interval :math:`[0,1]`. The frequency assignment is more involved than -selecting an initial propagation direction, since the Planck function has to be -sampled. TARDIS uses the technique described in :cite:`Carter1975` and -summarized in :cite:`Bjorkman2001` for this purpose. - .. _expansion: Model of Supernova Domain From 24fc47770c2143536d38eccd84516bbd2dc1e72e Mon Sep 17 00:00:00 2001 From: smithis7 Date: Thu, 27 May 2021 14:28:36 -0400 Subject: [PATCH 07/20] fixing typos --- docs/physics/montecarlo/initialization.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 6a1d1c466c4..0378a620556 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -46,7 +46,7 @@ "\n", "During the simulation, the energy of the packet remains constant in the local\n", "co-moving frame (see [Reference Frames](propagation.rst#reference-frames)). This naturally ensures energy\n", - "conservation and constitutes the main advantage of this discretization scheme. **However, while the energy of the packets is conserved in the co-moving frame, the frequency of the contituent photons (in the local co-moving frame) may over the course of the simulation. Thus, a packet may represent several different numbers of real photons throughout their lifetimes.**\n", + "conservation and constitutes the main advantage of this discretization scheme. **However, while the energy of the packets is conserved in the co-moving frame, the frequency of the contituent photons (in the local co-moving frame) may vary over the course of the simulation. Thus, a packet may represent several different numbers of real photons throughout their lifetimes.**\n", "\n", "We now demonstrate the TARDIS packet initialization framework:" ] @@ -72,7 +72,7 @@ "id": "4ae02998", "metadata": {}, "source": [ - "The followig cell contains values that you can change to see how it affects the spectrum:" + "The following cell contains values that you can change to see how it affects the spectrum:" ] }, { @@ -92,7 +92,7 @@ "id": "450faf76", "metadata": {}, "source": [ - "You can either set a temperatature of the photosphere, which will determine its luminosity; or you can set the luminosity of the photosphere, which will determine it's temperature." + "You can either set a temperatature of the photosphere, which will determine its luminosity; or you can set the luminosity of the photosphere, which will determine its temperature." ] }, { @@ -164,7 +164,7 @@ "id": "0d839222", "metadata": {}, "source": [ - "We define important constants, and for comparisson's sake, we code the Planck distribution function\n", + "We define important constants, and for comparison's sake, we code the Planck distribution function\n", "$$L_\\nu (\\nu)=\\frac{8\\pi R_\\mathrm{phot}^2 h\\nu^3}{c^2}\\frac{1}{\\exp\\left(\\frac{h\\nu}{k_BT_\\mathrm{phot}}\\right)-1}$$\n", "where $L_\\nu$ is the luminosity density with respect to frequency, $\\nu$ is frequency, $h$ is Planck's constant, $c$ is the speed of light, and $k_B$ is Boltzmann's constant:" ] From b1229225ad8cc72eb5d1afdc37cfe10b9fceeb0a Mon Sep 17 00:00:00 2001 From: smithis7 Date: Tue, 1 Jun 2021 13:39:50 -0400 Subject: [PATCH 08/20] a few changes --- docs/io/optional/custom_source.ipynb | 7 +++++++ docs/physics/montecarlo/initialization.ipynb | 17 ++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/io/optional/custom_source.ipynb b/docs/io/optional/custom_source.ipynb index 68aaf50a46d..c73fbfcc6d9 100644 --- a/docs/io/optional/custom_source.ipynb +++ b/docs/io/optional/custom_source.ipynb @@ -7,6 +7,13 @@ "# Running TARDIS with a custom packet source" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default, TARDIS generates energy packets using its `BasePacketSource` class, which models the photosphere of the supernova as a perfect blackbody (see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb)). However, users may create their own packet source as will be shown in this notebook. In order to do this, a user must create a class (that can but does not have to inherit from `BasePacketSource`) which contains an method `create_packets` that takes in the photospheric temperature, number of packets, a random number generator, and the photospheric radius (in that order) and returns arrays of the radii, frequencies, propogation directions, and energies of the ensemble of packets (once again see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb) for more information). Note that while with both the " + ] + }, { "cell_type": "code", "execution_count": null, diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 0378a620556..23290311781 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -124,7 +124,7 @@ "id": "516633c5", "metadata": {}, "source": [ - "We now generate the ensemble of packets. The array of packet energies is also shown." + "We now generate the ensemble of packets. The array of packet energies and radii are also shown." ] }, { @@ -134,9 +134,10 @@ "metadata": {}, "outputs": [], "source": [ - "nus,mus,energies = BlackBodySimpleSource(seed).create_packets(temp,n_packets,rng)\n", + "radii,nus,mus,energies = BlackBodySimpleSource(seed).create_packets(temp,n_packets,rng,r_phot)\n", "\n", - "print(energies)" + "print('Energies:',energies)\n", + "print('Radii:',radii)" ] }, { @@ -251,6 +252,16 @@ "plt.ylabel('Probability density')\n", "plt.show()" ] + }, + { + "cell_type": "markdown", + "id": "2f661592", + "metadata": {}, + "source": [ + "## Custom Packet Source\n", + "\n", + "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Using a Custom Packet Source](../../using/interaction/custom_source.ipynb) for more information." + ] } ], "metadata": { From dc7f4bdc8ed8f837d103385dc8d6bf405711fc5e Mon Sep 17 00:00:00 2001 From: smithis7 Date: Tue, 1 Jun 2021 14:43:50 -0400 Subject: [PATCH 09/20] adding more info to the custom_source notebook --- docs/io/optional/custom_source.ipynb | 28 +++++++++++++------- docs/physics/montecarlo/initialization.ipynb | 2 +- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/docs/io/optional/custom_source.ipynb b/docs/io/optional/custom_source.ipynb index c73fbfcc6d9..257687c2ab2 100644 --- a/docs/io/optional/custom_source.ipynb +++ b/docs/io/optional/custom_source.ipynb @@ -11,7 +11,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "By default, TARDIS generates energy packets using its `BasePacketSource` class, which models the photosphere of the supernova as a perfect blackbody (see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb)). However, users may create their own packet source as will be shown in this notebook. In order to do this, a user must create a class (that can but does not have to inherit from `BasePacketSource`) which contains an method `create_packets` that takes in the photospheric temperature, number of packets, a random number generator, and the photospheric radius (in that order) and returns arrays of the radii, frequencies, propogation directions, and energies of the ensemble of packets (once again see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb) for more information). Note that while with both the " + "By default, TARDIS generates energy packets using its `BasePacketSource` class, which models the photosphere of the supernova as a perfect blackbody (see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb)). However, users may create their own packet source as will be shown in this notebook. In order to do this, a user must create a class (that can but does not have to inherit from `BasePacketSource`) which contains an method `create_packets` that takes in the photospheric temperature, number of packets, a random number generator, and the photospheric radius (in that order) and returns arrays of the radii, frequencies, propogation directions, and energies of the ensemble of packets (once again see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb) for more information). To use your packet source in a run of TARDIS, you must pass an instance of your class into the `run_tardis` function under the `packet_source` keyword argument.\n", + "\n", + ".. note:: While with both the `BasePacketSource` class and the example here, all packets are generated at the same radius, this need not be true in general (although the `create_packets` method should only take in a single radius as its argument).\n", + "\n", + "We show an example of how a custom packet source is used:" ] }, { @@ -20,6 +24,7 @@ "metadata": {}, "outputs": [], "source": [ + "# Download necessary packages\n", "import numpy as np\n", "from tardis import constants as const\n", "from astropy import units as u\n", @@ -35,22 +40,17 @@ "metadata": {}, "outputs": [], "source": [ + "# Download the atomic data used for a run of TARDIS\n", "download_atom_data('kurucz_cd23_chianti_H_He')" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Custom packet source class that is derived from BasePacketSource. The method create_packets (which returns ```radii, nus, mus, energies```) has to be defined." - ] - }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ + "# Create a packet source class that contains a create_packets method\n", "class TruncBlackbodySource(BasePacketSource):\n", " \"\"\"\n", " Custom inner boundary source class to replace the Blackbody source\n", @@ -119,11 +119,19 @@ "metadata": {}, "outputs": [], "source": [ + "# Call an instance the packet source class\n", "packet_source = TruncBlackbodySource(\n", " 53253, truncation_wavelength=2000\n", ")" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now run TARDIS both with and without our custom packet source, and we compare the reults:" + ] + }, { "cell_type": "code", "execution_count": null, @@ -144,10 +152,10 @@ "%matplotlib inline\n", "plt.plot(mdl.runner.spectrum_virtual.wavelength,\n", " mdl.runner.spectrum_virtual.luminosity_density_lambda,\n", - " color='red', label='truncated blackbody')\n", + " color='red', label='truncated blackbody (custom packet source)')\n", "plt.plot(mdl_norm.runner.spectrum_virtual.wavelength,\n", " mdl_norm.runner.spectrum_virtual.luminosity_density_lambda,\n", - " color='blue', label='normal blackbody')\n", + " color='blue', label='normal blackbody (default packet source)')\n", "plt.xlabel('$\\lambda [\\AA]$')\n", "plt.ylabel('$L_\\lambda$ [erg/s/$\\AA$]')\n", "plt.xlim(500, 10000)\n", diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 23290311781..5c8e477587a 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -260,7 +260,7 @@ "source": [ "## Custom Packet Source\n", "\n", - "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Using a Custom Packet Source](../../using/interaction/custom_source.ipynb) for more information." + "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Running TARDIS with a Custom Packet Source](../../using/interaction/custom_source.ipynb) for more information." ] } ], From c288d10cd1740717fdf7095456e72fc52dd7c94e Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 2 Jun 2021 10:36:30 -0400 Subject: [PATCH 10/20] working on custom_source notebook --- docs/io/optional/custom_source.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/io/optional/custom_source.ipynb b/docs/io/optional/custom_source.ipynb index 257687c2ab2..e7fab8fdd51 100644 --- a/docs/io/optional/custom_source.ipynb +++ b/docs/io/optional/custom_source.ipynb @@ -11,7 +11,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "By default, TARDIS generates energy packets using its `BasePacketSource` class, which models the photosphere of the supernova as a perfect blackbody (see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb)). However, users may create their own packet source as will be shown in this notebook. In order to do this, a user must create a class (that can but does not have to inherit from `BasePacketSource`) which contains an method `create_packets` that takes in the photospheric temperature, number of packets, a random number generator, and the photospheric radius (in that order) and returns arrays of the radii, frequencies, propogation directions, and energies of the ensemble of packets (once again see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb) for more information). To use your packet source in a run of TARDIS, you must pass an instance of your class into the `run_tardis` function under the `packet_source` keyword argument.\n", + "By default, TARDIS generates energy packets using its `BasePacketSource` class, which models the photosphere of the supernova as a perfect blackbody (see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb)). However, users may create their own packet source, as will be shown in this notebook. In order to do this, a user must create a class (that may inherit from `BasePacketSource`, but does not have to) which contains a method `create_packets` that takes in: the photospheric temperature; number of packets; a random number generator; and the photospheric radius (in that order); and returns: arrays of the radii; frequencies; propogation directions; and energies of the ensemble of packets (once again see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb) for more information). To use this packet source in a run of TARDIS, the user must pass an instance of their class into the `run_tardis` function under the `packet_source` keyword argument.\n", "\n", ".. note:: While with both the `BasePacketSource` class and the example here, all packets are generated at the same radius, this need not be true in general (although the `create_packets` method should only take in a single radius as its argument).\n", "\n", @@ -24,7 +24,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Download necessary packages\n", + "# Import necessary packages\n", "import numpy as np\n", "from tardis import constants as const\n", "from astropy import units as u\n", @@ -119,7 +119,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Call an instance the packet source class\n", + "# Call an instance of the packet source class\n", "packet_source = TruncBlackbodySource(\n", " 53253, truncation_wavelength=2000\n", ")" From fa5a4bd94cb82c16dc280b7d29cc33832b1c42ca Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 2 Jun 2021 12:58:41 -0400 Subject: [PATCH 11/20] grammar --- docs/io/optional/custom_source.ipynb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/io/optional/custom_source.ipynb b/docs/io/optional/custom_source.ipynb index e7fab8fdd51..ecf912b44be 100644 --- a/docs/io/optional/custom_source.ipynb +++ b/docs/io/optional/custom_source.ipynb @@ -11,9 +11,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "By default, TARDIS generates energy packets using its `BasePacketSource` class, which models the photosphere of the supernova as a perfect blackbody (see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb)). However, users may create their own packet source, as will be shown in this notebook. In order to do this, a user must create a class (that may inherit from `BasePacketSource`, but does not have to) which contains a method `create_packets` that takes in: the photospheric temperature; number of packets; a random number generator; and the photospheric radius (in that order); and returns: arrays of the radii; frequencies; propogation directions; and energies of the ensemble of packets (once again see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb) for more information). To use this packet source in a run of TARDIS, the user must pass an instance of their class into the `run_tardis` function under the `packet_source` keyword argument.\n", + "By default, TARDIS generates energy packets using its `BasePacketSource` class, which models the photosphere of the supernova as a perfect blackbody (see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb)). However, users may create their own packet source, as will be shown in this notebook. In order to do this, a user must create a class (that can but does not have to inherit from `BasePacketSource`) which contains a method `create_packets` that takes in (in this order):\n", + "- the photospheric temperature\n", + "- the number of packets\n", + "- a random number generator\n", + "- the photospheric radius\n", "\n", - ".. note:: While with both the `BasePacketSource` class and the example here, all packets are generated at the same radius, this need not be true in general (although the `create_packets` method should only take in a single radius as its argument).\n", + "and returns arrays of the radii, frequencies, propogation directions, and energies of the ensemble of packets (once again see [Energy Packet Initialization](../../physics/montecarlo/initialization.ipynb) for more information). To use your packet source in a run of TARDIS, you must pass an instance of your class into the `run_tardis` function under the `packet_source` keyword argument.\n", + "\n", + ".. note:: In both the `BasePacketSource` class and in the example here, all packets are generated at the same radius. This need not be true in general (although the `create_packets` method should only take in a single radius as its argument).\n", "\n", "We show an example of how a custom packet source is used:" ] From 4b9c3686c949f0cdcd5b8ac0303ef841b011f659 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 2 Jun 2021 13:00:47 -0400 Subject: [PATCH 12/20] grammar in the notebook title --- docs/io/optional/custom_source.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/io/optional/custom_source.ipynb b/docs/io/optional/custom_source.ipynb index ecf912b44be..59d98310095 100644 --- a/docs/io/optional/custom_source.ipynb +++ b/docs/io/optional/custom_source.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Running TARDIS with a custom packet source" + "# Running TARDIS with a Custom Packet Source" ] }, { From 68a46b0378c736520ce73dbcc99e7ddd6192d1a6 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 9 Jun 2021 14:17:35 -0400 Subject: [PATCH 13/20] fixing typo --- docs/io/optional/custom_source.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/io/optional/custom_source.ipynb b/docs/io/optional/custom_source.ipynb index 59d98310095..a2da649147a 100644 --- a/docs/io/optional/custom_source.ipynb +++ b/docs/io/optional/custom_source.ipynb @@ -135,7 +135,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We now run TARDIS both with and without our custom packet source, and we compare the reults:" + "We now run TARDIS both with and without our custom packet source, and we compare the results:" ] }, { @@ -194,4 +194,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file From a7d376c0b7077d8b92f9c639aa6fbc27a13610f2 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 16 Jun 2021 12:32:49 -0400 Subject: [PATCH 14/20] fixing hyperlink --- docs/physics/montecarlo/initialization.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 5c8e477587a..85814ee1a0b 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -260,7 +260,7 @@ "source": [ "## Custom Packet Source\n", "\n", - "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Running TARDIS with a Custom Packet Source](../../using/interaction/custom_source.ipynb) for more information." + "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Running TARDIS with a Custom Packet Source](../../io/oprional/custom_source.ipynb) for more information." ] } ], @@ -286,4 +286,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file From 0f92b935a75ae2e2215a5acea9bd3a2c7c677881 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 16 Jun 2021 12:52:12 -0400 Subject: [PATCH 15/20] fixing hyperlink again --- docs/physics/montecarlo/initialization.ipynb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 85814ee1a0b..2bad135f36a 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -60,6 +60,7 @@ "source": [ "import numpy as np\n", "from tardis.montecarlo.packet_source import *\n", + "\n", "from tardis import constants as const\n", "import matplotlib.pyplot as plt\n", "\n", @@ -260,7 +261,7 @@ "source": [ "## Custom Packet Source\n", "\n", - "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Running TARDIS with a Custom Packet Source](../../io/oprional/custom_source.ipynb) for more information." + "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Running TARDIS with a Custom Packet Source](../../io/optional/custom_source.ipynb) for more information." ] } ], From 6ef6e2e653854690afb04c314db3aaa724e0ee53 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 16 Jun 2021 19:46:20 -0400 Subject: [PATCH 16/20] pep 8 --- docs/physics/montecarlo/initialization.ipynb | 59 ++++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 2bad135f36a..5782de9abb8 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -60,7 +60,6 @@ "source": [ "import numpy as np\n", "from tardis.montecarlo.packet_source import *\n", - "\n", "from tardis import constants as const\n", "import matplotlib.pyplot as plt\n", "\n", @@ -83,9 +82,14 @@ "metadata": {}, "outputs": [], "source": [ - "seed = 1 #seed for the pseudo-random number generator\n", - "r_phot = 1e15 #radius of the supernova's photosphere in cm\n", - "n_packets = 40000 #number of packets generated" + "# Seed for the pseudo-random number generator\n", + "seed = 1\n", + "\n", + "# Radius of the supernova's photosphere in cm\n", + "r_phot = 1e15\n", + "\n", + "# Number of packets generated\n", + "n_packets = 40000" ] }, { @@ -103,9 +107,11 @@ "metadata": {}, "outputs": [], "source": [ - "temp = 5000 #temperature in K\n", + "# Temperature in K\n", + "temp = 5000\n", + "\n", "lumin = 4 * np.pi * (r_phot**2) * const.sigma_sb.cgs.value * (temp**4)\n", - "print('Luminosity:',lumin,'erg/s')" + "print('Luminosity:', lumin, 'erg/s')" ] }, { @@ -115,7 +121,9 @@ "metadata": {}, "outputs": [], "source": [ - "lumin = 1e40 #luminocity in erg/s\n", + "# Luminocity in erg/s\n", + "lumin = 1e40\n", + "\n", "temp = ( lumin / (4 * np.pi * const.sigma_sb.cgs.value) )**0.25 / np.sqrt(r_phot)\n", "print('Temperature:',temp,'K')" ] @@ -135,10 +143,10 @@ "metadata": {}, "outputs": [], "source": [ - "radii,nus,mus,energies = BlackBodySimpleSource(seed).create_packets(temp,n_packets,rng,r_phot)\n", + "radii, nus, mus, energies = BlackBodySimpleSource(seed).create_packets(temp, n_packets, rng, r_phot)\n", "\n", - "print('Energies:',energies)\n", - "print('Radii:',radii)" + "print('Energies:', energies)\n", + "print('Radii:', radii)" ] }, { @@ -156,9 +164,9 @@ "metadata": {}, "outputs": [], "source": [ - "t_simulation = 1/lumin\n", + "t_simulation = 1 / lumin\n", "\n", - "lumin_per_packet = energies/t_simulation" + "lumin_per_packet = energies / t_simulation" ] }, { @@ -185,7 +193,7 @@ "kB = const.k_B.cgs.value\n", "\n", "def planck_function(nu):\n", - " return 8 * np.pi * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*temp)) - 1))" + " return 8 * (np.pi**2) * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*temp)) - 1))" ] }, { @@ -203,12 +211,15 @@ "metadata": {}, "outputs": [], "source": [ - "bins=200\n", - "nus_planck = np.linspace(min(nus),max(nus),bins)\n", - "bin_width = nus_planck[1]-nus_planck[0]\n", + "bins = 200\n", + "nus_planck = np.linspace(min(nus), max(nus), bins)\n", + "bin_width = nus_planck[1] - nus_planck[0]\n", + "\n", + "# The weights argument is once again to make sure our plotted spectrum \n", + "# has the correct y-axis scale\n", + "plt.hist(nus, bins=bins, weights=lumin_per_packet/bin_width)\n", "\n", - "plt.hist(nus,bins=bins,weights=lumin_per_packet/bin_width) #the weights argument is once again to make sure our plotted spectrum has the correct y-axis scale\n", - "plt.plot(nus_planck,np.pi*planck_function(nus_planck))\n", + "plt.plot(nus_planck, planck_function(nus_planck))\n", "plt.xlabel('Frequency (Hz)')\n", "plt.ylabel('Luminosity density w.r.t. frequency (erg/s/Hz)')\n", "plt.show()" @@ -229,10 +240,10 @@ "metadata": {}, "outputs": [], "source": [ - "x = np.linspace(0,1,1000)\n", + "x = np.linspace(0, 1, 1000)\n", "\n", - "plt.hist(mus,bins=bins,density=True)\n", - "plt.plot(x,2*x)\n", + "plt.hist(mus, bins=bins, density=True)\n", + "plt.plot(x, 2*x)\n", "plt.xlabel('Propagation direction')\n", "plt.ylabel('Probability density')\n", "plt.show()" @@ -245,10 +256,10 @@ "metadata": {}, "outputs": [], "source": [ - "thetas = np.linspace(0,np.pi/2,1000)\n", + "thetas = np.linspace(0, np.pi/2, 1000)\n", "\n", - "plt.hist(np.arccos(mus),bins=bins,density=True)\n", - "plt.plot(thetas,np.sin(2*thetas))\n", + "plt.hist(np.arccos(mus), bins=bins, density=True)\n", + "plt.plot(thetas, np.sin(2*thetas))\n", "plt.xlabel('Angle with normal (rad)')\n", "plt.ylabel('Probability density')\n", "plt.show()" From 6f2de8f1371c0a4cf1261266a52c4a79e66b3f11 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 16 Jun 2021 19:49:35 -0400 Subject: [PATCH 17/20] more pep8 --- docs/physics/montecarlo/initialization.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 5782de9abb8..90c5a6ba83f 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -124,8 +124,8 @@ "# Luminocity in erg/s\n", "lumin = 1e40\n", "\n", - "temp = ( lumin / (4 * np.pi * const.sigma_sb.cgs.value) )**0.25 / np.sqrt(r_phot)\n", - "print('Temperature:',temp,'K')" + "temp = (lumin / (4 * np.pi * const.sigma_sb.cgs.value))**0.25 / np.sqrt(r_phot)\n", + "print('Temperature:', temp, 'K')" ] }, { @@ -193,7 +193,7 @@ "kB = const.k_B.cgs.value\n", "\n", "def planck_function(nu):\n", - " return 8 * (np.pi**2) * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h*nu/(kB*temp)) - 1))" + " return 8 * (np.pi**2) * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h * nu / (kB * temp)) - 1))" ] }, { @@ -298,4 +298,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} From 620fca34e37f62578d4d0e10b7d38b9281200cda Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 16 Jun 2021 20:34:49 -0400 Subject: [PATCH 18/20] formatting --- docs/physics/montecarlo/initialization.ipynb | 38 ++++++++++++-------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index 90c5a6ba83f..da10d68bf95 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -46,7 +46,7 @@ "\n", "During the simulation, the energy of the packet remains constant in the local\n", "co-moving frame (see [Reference Frames](propagation.rst#reference-frames)). This naturally ensures energy\n", - "conservation and constitutes the main advantage of this discretization scheme. **However, while the energy of the packets is conserved in the co-moving frame, the frequency of the contituent photons (in the local co-moving frame) may vary over the course of the simulation. Thus, a packet may represent several different numbers of real photons throughout their lifetimes.**\n", + "conservation and constitutes the main advantage of this discretization scheme. **However, while the energy of the packets is conserved in the co-moving frame, the frequency of the constituent photons (in the local co-moving frame) may vary over the course of the simulation. Thus, a packet may represent several different numbers of real photons throughout their lifetimes.**\n", "\n", "We now demonstrate the TARDIS packet initialization framework:" ] @@ -59,7 +59,7 @@ "outputs": [], "source": [ "import numpy as np\n", - "from tardis.montecarlo.packet_source import *\n", + "from tardis.montecarlo.packet_source import BlackBodySimpleSource\n", "from tardis import constants as const\n", "import matplotlib.pyplot as plt\n", "\n", @@ -108,10 +108,10 @@ "outputs": [], "source": [ "# Temperature in K\n", - "temp = 5000\n", + "temperature = 5000\n", "\n", - "lumin = 4 * np.pi * (r_phot**2) * const.sigma_sb.cgs.value * (temp**4)\n", - "print('Luminosity:', lumin, 'erg/s')" + "luminosity = 4 * np.pi * (r_phot**2) * const.sigma_sb.cgs.value * (temperature**4)\n", + "print('Luminosity:', luminosity, 'erg/s')" ] }, { @@ -122,10 +122,10 @@ "outputs": [], "source": [ "# Luminocity in erg/s\n", - "lumin = 1e40\n", + "luminosity = 1e40\n", "\n", - "temp = (lumin / (4 * np.pi * const.sigma_sb.cgs.value))**0.25 / np.sqrt(r_phot)\n", - "print('Temperature:', temp, 'K')" + "temperature = (luminosity / (4 * np.pi * const.sigma_sb.cgs.value))**0.25 / np.sqrt(r_phot)\n", + "print('Temperature:', temperature, 'K')" ] }, { @@ -143,7 +143,10 @@ "metadata": {}, "outputs": [], "source": [ - "radii, nus, mus, energies = BlackBodySimpleSource(seed).create_packets(temp, n_packets, rng, r_phot)\n", + "# We define our packet source\n", + "packet_source = BlackBodySimpleSource(seed)\n", + "\n", + "radii, nus, mus, energies = packet_source.create_packets(temperature, n_packets, rng, r_phot)\n", "\n", "print('Energies:', energies)\n", "print('Radii:', radii)" @@ -164,9 +167,13 @@ "metadata": {}, "outputs": [], "source": [ - "t_simulation = 1 / lumin\n", + "# Time of simulation\n", + "t_simulation = 1 / luminosity\n", + "print('Time of simulation:', t_simulation, 'seconds')\n", "\n", - "lumin_per_packet = energies / t_simulation" + "# Array of luminosity contribution by each packet\n", + "lumin_per_packet = energies / t_simulation\n", + "print('Luminosity per packet:', lumin_per_packet, 'erg/s')" ] }, { @@ -193,7 +200,7 @@ "kB = const.k_B.cgs.value\n", "\n", "def planck_function(nu):\n", - " return 8 * (np.pi**2) * (r_phot**2) * h * nu**3 / (c2 * (np.exp(h * nu / (kB * temp)) - 1))" + " return 8 * np.pi**2 * r_phot**2 * h * nu**3 / (c2 * (np.exp(h * nu / (kB * temperature)) - 1))" ] }, { @@ -211,15 +218,18 @@ "metadata": {}, "outputs": [], "source": [ + "# We set important quantites for making our histogram\n", "bins = 200\n", "nus_planck = np.linspace(min(nus), max(nus), bins)\n", "bin_width = nus_planck[1] - nus_planck[0]\n", "\n", - "# The weights argument is once again to make sure our plotted spectrum \n", - "# has the correct y-axis scale\n", + "# In the histogram plot below, the weights argument is used \n", + "# to make sure our plotted spectrum has the correct y-axis scale\n", "plt.hist(nus, bins=bins, weights=lumin_per_packet/bin_width)\n", "\n", + "# We plot the planck function for comparison\n", "plt.plot(nus_planck, planck_function(nus_planck))\n", + "\n", "plt.xlabel('Frequency (Hz)')\n", "plt.ylabel('Luminosity density w.r.t. frequency (erg/s/Hz)')\n", "plt.show()" From 86ab23c5af52e79a8d4660844d8f70d7692f287e Mon Sep 17 00:00:00 2001 From: smithis7 Date: Wed, 16 Jun 2021 20:50:56 -0400 Subject: [PATCH 19/20] getting opinions --- .../montecarlo/initializationwunits.ipynb | 320 ++++++++++++++++++ 1 file changed, 320 insertions(+) create mode 100644 docs/physics/montecarlo/initializationwunits.ipynb diff --git a/docs/physics/montecarlo/initializationwunits.ipynb b/docs/physics/montecarlo/initializationwunits.ipynb new file mode 100644 index 00000000000..5c9dc9d4170 --- /dev/null +++ b/docs/physics/montecarlo/initializationwunits.ipynb @@ -0,0 +1,320 @@ +{ + "cells": [ + { + "cell_type": "raw", + "id": "8633baaa", + "metadata": { + "raw_mimetype": "text/restructuredtext" + }, + "source": [ + "***************************************\n", + "Energy Packet Initialization With Units\n", + "***************************************" + ] + }, + { + "cell_type": "markdown", + "id": "6c0dbe0a", + "metadata": {}, + "source": [ + "While it is instructive to think about tracking the propagation history of\n", + "photons when illustrating the basic idea behind Monte Carlo radiative transfer\n", + "techniques, there are important numerical reasons for using a different\n", + "discretization scheme. Instead of thinking in the photon picture, it brings\n", + "significant advantages to follow the idea of [] and\n", + "[] and consider parcels of radiant energy as the fundamental\n", + "building blocks of the Monte Carlo calculation. These basic Monte Carlo quanta\n", + "are commonly referred to as \"energy packets\" or simply \"packets\", and are composed of many photons with the same frequency.\n", + "\n", + "During a Monte Carlo calculation, $N$ (a large number) packets, all with a certain\n", + "energy $\\varepsilon$, are created at the inner boundary of the computational domain (as will be discussed in [Packet Propagation](propagation.rst)) known as the photosphere. Currently, the photosphere is modeled as a spherical blackbody with a radius $R_\\mathrm{phot}$ and temperature $T_\\mathrm{phot}$. In TARDIS, all packets are assigned identical energies, and the total energy of the packets is 1 erg (and thus each packet has an energy of $\\frac{1}{N}$ ergs).\n", + "\n", + ".. note:: The indivisible energy packet scheme does not require that all packets have the same energy. This is just a convenient and simple choice adopted in TARDIS.\n", + "\n", + "Since the photosphere is modeled as a blackbody, its total luminosity $L$ (recall that luminosity is energy emitted divided by the time in which it is emitted) is\n", + "$$L=\\frac{N\\varepsilon}{\\Delta t}=4 \\pi R_{\\mathrm{phot}}^2 \\sigma_{\\mathrm{R}} T_{\\mathrm{phot}}^4$$\n", + "where $\\sigma_\\mathrm{R}$ is the Stefan-Boltzmann constant and $\\Delta t$ is the physical duration of the simulation. In order to make this relationship hold (remembering that $N\\varepsilon = 1$ erg), we use\n", + "$$\\Delta t = \\frac{1}{L}=\\frac{1}{4 \\pi R_{\\mathrm{phot}}^2 \\sigma_{\\mathrm{R}} T_{\\mathrm{phot}}^4}.$$\n", + "\n", + "During packet initialization, each packet is assigned an initial propagation direction $\\mu$ which is the cosine of the angle $\\theta$ which the packet's path makes with the radial direction. Using a pseudo-random number generator which generates numbers $z$ uniformly distributed on the interval $[0,1]$, the propagation direction is determined according to\n", + "$$\\mu = \\sqrt{z}.$$\n", + "This sampling is demonstrated in the code below.\n", + "\n", + "Finally, each packet is assigned an initial frequency (or more precisely, the initial frequency of its consitiuent photons). Note that since each packet has the same energy, each packet will represent a different number of real photons. The sampling on packet frequencies is more involved than that of the propagation direction, as it involves sampling the Planck distribution (see below). TARDIS uses the technique described in [] and summarized in [] for this purpose.\n", + "\n", + "During the simulation, the energy of the packet remains constant in the local\n", + "co-moving frame (see [Reference Frames](propagation.rst#reference-frames)). This naturally ensures energy\n", + "conservation and constitutes the main advantage of this discretization scheme. **However, while the energy of the packets is conserved in the co-moving frame, the frequency of the constituent photons (in the local co-moving frame) may vary over the course of the simulation. Thus, a packet may represent several different numbers of real photons throughout their lifetimes.**\n", + "\n", + "We now demonstrate the TARDIS packet initialization framework:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "426325e5", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from tardis.montecarlo.packet_source import BlackBodySimpleSource\n", + "from astropy import units as u\n", + "from tardis import constants as const\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#The random number generator that will be used\n", + "rng = np.random.default_rng()" + ] + }, + { + "cell_type": "markdown", + "id": "4ae02998", + "metadata": {}, + "source": [ + "The following cell contains values that you can change to see how it affects the spectrum:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bc34bf33", + "metadata": {}, + "outputs": [], + "source": [ + "# Seed for the pseudo-random number generator\n", + "seed = 1\n", + "\n", + "# Radius of the supernova's photosphere in cm\n", + "r_phot = 1e15 * u.cm\n", + "\n", + "# Number of packets generated\n", + "n_packets = 40000" + ] + }, + { + "cell_type": "markdown", + "id": "450faf76", + "metadata": {}, + "source": [ + "You can either set a temperatature of the photosphere, which will determine its luminosity; or you can set the luminosity of the photosphere, which will determine its temperature." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f2c15a9", + "metadata": {}, + "outputs": [], + "source": [ + "# Temperature in K\n", + "temperature = 5000 * u.K\n", + "\n", + "luminosity = 4 * np.pi * (r_phot**2) * const.sigma_sb * (temperature**4)\n", + "print('Luminosity:', luminosity.to('erg/s'))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3fb3ca8c", + "metadata": {}, + "outputs": [], + "source": [ + "# Luminocity in erg/s\n", + "luminosity = 1e40 * u.erg / u.s\n", + "\n", + "temperature = (luminosity / (4 * np.pi * const.sigma_sb))**0.25 / np.sqrt(r_phot)\n", + "print('Temperature:', temperature.to('K'))" + ] + }, + { + "cell_type": "markdown", + "id": "516633c5", + "metadata": {}, + "source": [ + "We now generate the ensemble of packets. The array of packet energies and radii are also shown." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "925e9e1b", + "metadata": {}, + "outputs": [], + "source": [ + "# We define our packet source\n", + "packet_source = BlackBodySimpleSource(seed)\n", + "\n", + "radii, nus, mus, energies = packet_source.create_packets(\n", + " temperature.to('K').value, \n", + " n_packets, \n", + " rng, \n", + " r_phot.to('cm'))\n", + "\n", + "energies *= u.erg\n", + "\n", + "nus *= u.Hz\n", + "\n", + "print('Energies:', energies)\n", + "print('Radii:', radii)" + ] + }, + { + "cell_type": "markdown", + "id": "16936bce", + "metadata": {}, + "source": [ + "We set the timespan of the simulation so that each packet contributes the appropriate luminosity to the spectrum." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fed35f47", + "metadata": {}, + "outputs": [], + "source": [ + "# Time of simulation\n", + "t_simulation = 1 * u.erg / luminosity\n", + "print('Time of simulation:', t_simulation)\n", + "\n", + "# Array of luminosity contribution by each packet\n", + "lumin_per_packet = energies / t_simulation\n", + "print('Luminosity per packet:', lumin_per_packet)" + ] + }, + { + "cell_type": "markdown", + "id": "0d839222", + "metadata": {}, + "source": [ + "We define important constants, and for comparison's sake, we code the Planck distribution function\n", + "$$L_\\nu (\\nu)=\\frac{8\\pi R_\\mathrm{phot}^2 h\\nu^3}{c^2}\\frac{1}{\\exp\\left(\\frac{h\\nu}{k_BT_\\mathrm{phot}}\\right)-1}$$\n", + "where $L_\\nu$ is the luminosity density with respect to frequency, $\\nu$ is frequency, $h$ is Planck's constant, $c$ is the speed of light, and $k_B$ is Boltzmann's constant:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "916a5e22", + "metadata": { + "scrolled": false + }, + "outputs": [], + "source": [ + "h = const.h.cgs\n", + "c2 = const.c.cgs**2\n", + "kB = const.k_B.cgs\n", + "\n", + "def planck_function(nu):\n", + " return 8 * np.pi**2 * r_phot**2 * h * nu**3 / (c2 * (np.exp(h * nu / (kB * temperature)) - 1))" + ] + }, + { + "cell_type": "markdown", + "id": "78230177", + "metadata": {}, + "source": [ + "We plot the Planck distribution and a histogram of the generated packet distribution:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "913fcdbb", + "metadata": {}, + "outputs": [], + "source": [ + "# We set important quantites for making our histogram\n", + "bins = 200\n", + "nus_planck = np.linspace(min(nus), max(nus), bins)\n", + "bin_width = nus_planck[1] - nus_planck[0]\n", + "\n", + "# In the histogram plot below, the weights argument is used \n", + "# to make sure our plotted spectrum has the correct y-axis scale\n", + "plt.hist(nus.to('Hz').value,\n", + " bins=bins,\n", + " weights=lumin_per_packet.to('erg/s').value/bin_width.to('Hz').value)\n", + "\n", + "# We plot the planck function for comparison\n", + "plt.plot(nus_planck, planck_function(nus_planck))\n", + "\n", + "plt.xlabel('Frequency (Hz)')\n", + "plt.ylabel('Luminosity density w.r.t. frequency (erg/s/Hz)')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "ad4f0f0e", + "metadata": {}, + "source": [ + "We finally plot the generated $\\mu$ density distribution, followed by the generated $\\theta=\\arccos (\\mu)$ density distribution, compared with the respective curves $\\rho = 2\\mu$ and $\\rho = \\sin(2\\theta)$:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ae4c97de", + "metadata": {}, + "outputs": [], + "source": [ + "x = np.linspace(0, 1, 1000)\n", + "\n", + "plt.hist(mus, bins=bins, density=True)\n", + "plt.plot(x, 2*x)\n", + "plt.xlabel('Propagation direction')\n", + "plt.ylabel('Probability density')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "41daa433", + "metadata": {}, + "outputs": [], + "source": [ + "thetas = np.linspace(0, np.pi/2, 1000)\n", + "\n", + "plt.hist(np.arccos(mus), bins=bins, density=True)\n", + "plt.plot(thetas, np.sin(2*thetas))\n", + "plt.xlabel('Angle with normal (rad)')\n", + "plt.ylabel('Probability density')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "2f661592", + "metadata": {}, + "source": [ + "## Custom Packet Source\n", + "\n", + "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Running TARDIS with a Custom Packet Source](../../io/optional/custom_source.ipynb) for more information." + ] + } + ], + "metadata": { + "celltoolbar": "Raw Cell Format", + "kernelspec": { + "display_name": "Python 3", + "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.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From ab201a34644e9181256636e788ffa90bdd987186 Mon Sep 17 00:00:00 2001 From: smithis7 Date: Thu, 17 Jun 2021 14:26:48 -0400 Subject: [PATCH 20/20] adding units --- docs/physics/montecarlo/initialization.ipynb | 53 ++- .../montecarlo/initializationwunits.ipynb | 320 ------------------ 2 files changed, 37 insertions(+), 336 deletions(-) delete mode 100644 docs/physics/montecarlo/initializationwunits.ipynb diff --git a/docs/physics/montecarlo/initialization.ipynb b/docs/physics/montecarlo/initialization.ipynb index da10d68bf95..7957c96cd13 100644 --- a/docs/physics/montecarlo/initialization.ipynb +++ b/docs/physics/montecarlo/initialization.ipynb @@ -60,6 +60,7 @@ "source": [ "import numpy as np\n", "from tardis.montecarlo.packet_source import BlackBodySimpleSource\n", + "from astropy import units as u\n", "from tardis import constants as const\n", "import matplotlib.pyplot as plt\n", "\n", @@ -86,7 +87,7 @@ "seed = 1\n", "\n", "# Radius of the supernova's photosphere in cm\n", - "r_phot = 1e15\n", + "r_phot = 1e15 * u.cm\n", "\n", "# Number of packets generated\n", "n_packets = 40000" @@ -108,10 +109,14 @@ "outputs": [], "source": [ "# Temperature in K\n", - "temperature = 5000\n", + "temperature = 10000 * u.K\n", "\n", - "luminosity = 4 * np.pi * (r_phot**2) * const.sigma_sb.cgs.value * (temperature**4)\n", - "print('Luminosity:', luminosity, 'erg/s')" + "luminosity = 4 * np.pi * (r_phot**2) * const.sigma_sb * (temperature**4)\n", + "\n", + "# Makes sure the luminosity is given in erg/s\n", + "luminosity = luminosity.to('erg/s')\n", + "\n", + "print('Luminosity:', luminosity)" ] }, { @@ -121,11 +126,15 @@ "metadata": {}, "outputs": [], "source": [ - "# Luminocity in erg/s\n", - "luminosity = 1e40\n", + "# Luminosity in erg/s\n", + "luminosity = 7e42 * u.erg / u.s\n", + "\n", + "temperature = (luminosity / (4 * np.pi * const.sigma_sb))**0.25 / np.sqrt(r_phot)\n", "\n", - "temperature = (luminosity / (4 * np.pi * const.sigma_sb.cgs.value))**0.25 / np.sqrt(r_phot)\n", - "print('Temperature:', temperature, 'K')" + "# Makes sure the termperature is given in K\n", + "temperature = temperature.to('K')\n", + "\n", + "print('Temperature:', temperature)" ] }, { @@ -146,7 +155,17 @@ "# We define our packet source\n", "packet_source = BlackBodySimpleSource(seed)\n", "\n", - "radii, nus, mus, energies = packet_source.create_packets(temperature, n_packets, rng, r_phot)\n", + "radii, nus, mus, energies = packet_source.create_packets(\n", + " temperature.value, \n", + " n_packets, \n", + " rng, \n", + " r_phot)\n", + "\n", + "# Sets the energies in units of ergs\n", + "energies *= u.erg\n", + "\n", + "# Sets the frequencies in units of Hz\n", + "nus *= u.Hz\n", "\n", "print('Energies:', energies)\n", "print('Radii:', radii)" @@ -168,12 +187,12 @@ "outputs": [], "source": [ "# Time of simulation\n", - "t_simulation = 1 / luminosity\n", - "print('Time of simulation:', t_simulation, 'seconds')\n", + "t_simulation = 1 * u.erg / luminosity\n", + "print('Time of simulation:', t_simulation)\n", "\n", "# Array of luminosity contribution by each packet\n", "lumin_per_packet = energies / t_simulation\n", - "print('Luminosity per packet:', lumin_per_packet, 'erg/s')" + "print('Luminosity per packet:', lumin_per_packet)" ] }, { @@ -195,9 +214,9 @@ }, "outputs": [], "source": [ - "h = const.h.cgs.value\n", - "c2 = const.c.cgs.value**2\n", - "kB = const.k_B.cgs.value\n", + "h = const.h.cgs\n", + "c2 = const.c.cgs**2\n", + "kB = const.k_B.cgs\n", "\n", "def planck_function(nu):\n", " return 8 * np.pi**2 * r_phot**2 * h * nu**3 / (c2 * (np.exp(h * nu / (kB * temperature)) - 1))" @@ -225,7 +244,9 @@ "\n", "# In the histogram plot below, the weights argument is used \n", "# to make sure our plotted spectrum has the correct y-axis scale\n", - "plt.hist(nus, bins=bins, weights=lumin_per_packet/bin_width)\n", + "plt.hist(nus.value,\n", + " bins=bins,\n", + " weights=lumin_per_packet/bin_width)\n", "\n", "# We plot the planck function for comparison\n", "plt.plot(nus_planck, planck_function(nus_planck))\n", diff --git a/docs/physics/montecarlo/initializationwunits.ipynb b/docs/physics/montecarlo/initializationwunits.ipynb deleted file mode 100644 index 5c9dc9d4170..00000000000 --- a/docs/physics/montecarlo/initializationwunits.ipynb +++ /dev/null @@ -1,320 +0,0 @@ -{ - "cells": [ - { - "cell_type": "raw", - "id": "8633baaa", - "metadata": { - "raw_mimetype": "text/restructuredtext" - }, - "source": [ - "***************************************\n", - "Energy Packet Initialization With Units\n", - "***************************************" - ] - }, - { - "cell_type": "markdown", - "id": "6c0dbe0a", - "metadata": {}, - "source": [ - "While it is instructive to think about tracking the propagation history of\n", - "photons when illustrating the basic idea behind Monte Carlo radiative transfer\n", - "techniques, there are important numerical reasons for using a different\n", - "discretization scheme. Instead of thinking in the photon picture, it brings\n", - "significant advantages to follow the idea of [] and\n", - "[] and consider parcels of radiant energy as the fundamental\n", - "building blocks of the Monte Carlo calculation. These basic Monte Carlo quanta\n", - "are commonly referred to as \"energy packets\" or simply \"packets\", and are composed of many photons with the same frequency.\n", - "\n", - "During a Monte Carlo calculation, $N$ (a large number) packets, all with a certain\n", - "energy $\\varepsilon$, are created at the inner boundary of the computational domain (as will be discussed in [Packet Propagation](propagation.rst)) known as the photosphere. Currently, the photosphere is modeled as a spherical blackbody with a radius $R_\\mathrm{phot}$ and temperature $T_\\mathrm{phot}$. In TARDIS, all packets are assigned identical energies, and the total energy of the packets is 1 erg (and thus each packet has an energy of $\\frac{1}{N}$ ergs).\n", - "\n", - ".. note:: The indivisible energy packet scheme does not require that all packets have the same energy. This is just a convenient and simple choice adopted in TARDIS.\n", - "\n", - "Since the photosphere is modeled as a blackbody, its total luminosity $L$ (recall that luminosity is energy emitted divided by the time in which it is emitted) is\n", - "$$L=\\frac{N\\varepsilon}{\\Delta t}=4 \\pi R_{\\mathrm{phot}}^2 \\sigma_{\\mathrm{R}} T_{\\mathrm{phot}}^4$$\n", - "where $\\sigma_\\mathrm{R}$ is the Stefan-Boltzmann constant and $\\Delta t$ is the physical duration of the simulation. In order to make this relationship hold (remembering that $N\\varepsilon = 1$ erg), we use\n", - "$$\\Delta t = \\frac{1}{L}=\\frac{1}{4 \\pi R_{\\mathrm{phot}}^2 \\sigma_{\\mathrm{R}} T_{\\mathrm{phot}}^4}.$$\n", - "\n", - "During packet initialization, each packet is assigned an initial propagation direction $\\mu$ which is the cosine of the angle $\\theta$ which the packet's path makes with the radial direction. Using a pseudo-random number generator which generates numbers $z$ uniformly distributed on the interval $[0,1]$, the propagation direction is determined according to\n", - "$$\\mu = \\sqrt{z}.$$\n", - "This sampling is demonstrated in the code below.\n", - "\n", - "Finally, each packet is assigned an initial frequency (or more precisely, the initial frequency of its consitiuent photons). Note that since each packet has the same energy, each packet will represent a different number of real photons. The sampling on packet frequencies is more involved than that of the propagation direction, as it involves sampling the Planck distribution (see below). TARDIS uses the technique described in [] and summarized in [] for this purpose.\n", - "\n", - "During the simulation, the energy of the packet remains constant in the local\n", - "co-moving frame (see [Reference Frames](propagation.rst#reference-frames)). This naturally ensures energy\n", - "conservation and constitutes the main advantage of this discretization scheme. **However, while the energy of the packets is conserved in the co-moving frame, the frequency of the constituent photons (in the local co-moving frame) may vary over the course of the simulation. Thus, a packet may represent several different numbers of real photons throughout their lifetimes.**\n", - "\n", - "We now demonstrate the TARDIS packet initialization framework:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "426325e5", - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from tardis.montecarlo.packet_source import BlackBodySimpleSource\n", - "from astropy import units as u\n", - "from tardis import constants as const\n", - "import matplotlib.pyplot as plt\n", - "\n", - "#The random number generator that will be used\n", - "rng = np.random.default_rng()" - ] - }, - { - "cell_type": "markdown", - "id": "4ae02998", - "metadata": {}, - "source": [ - "The following cell contains values that you can change to see how it affects the spectrum:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bc34bf33", - "metadata": {}, - "outputs": [], - "source": [ - "# Seed for the pseudo-random number generator\n", - "seed = 1\n", - "\n", - "# Radius of the supernova's photosphere in cm\n", - "r_phot = 1e15 * u.cm\n", - "\n", - "# Number of packets generated\n", - "n_packets = 40000" - ] - }, - { - "cell_type": "markdown", - "id": "450faf76", - "metadata": {}, - "source": [ - "You can either set a temperatature of the photosphere, which will determine its luminosity; or you can set the luminosity of the photosphere, which will determine its temperature." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8f2c15a9", - "metadata": {}, - "outputs": [], - "source": [ - "# Temperature in K\n", - "temperature = 5000 * u.K\n", - "\n", - "luminosity = 4 * np.pi * (r_phot**2) * const.sigma_sb * (temperature**4)\n", - "print('Luminosity:', luminosity.to('erg/s'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3fb3ca8c", - "metadata": {}, - "outputs": [], - "source": [ - "# Luminocity in erg/s\n", - "luminosity = 1e40 * u.erg / u.s\n", - "\n", - "temperature = (luminosity / (4 * np.pi * const.sigma_sb))**0.25 / np.sqrt(r_phot)\n", - "print('Temperature:', temperature.to('K'))" - ] - }, - { - "cell_type": "markdown", - "id": "516633c5", - "metadata": {}, - "source": [ - "We now generate the ensemble of packets. The array of packet energies and radii are also shown." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "925e9e1b", - "metadata": {}, - "outputs": [], - "source": [ - "# We define our packet source\n", - "packet_source = BlackBodySimpleSource(seed)\n", - "\n", - "radii, nus, mus, energies = packet_source.create_packets(\n", - " temperature.to('K').value, \n", - " n_packets, \n", - " rng, \n", - " r_phot.to('cm'))\n", - "\n", - "energies *= u.erg\n", - "\n", - "nus *= u.Hz\n", - "\n", - "print('Energies:', energies)\n", - "print('Radii:', radii)" - ] - }, - { - "cell_type": "markdown", - "id": "16936bce", - "metadata": {}, - "source": [ - "We set the timespan of the simulation so that each packet contributes the appropriate luminosity to the spectrum." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fed35f47", - "metadata": {}, - "outputs": [], - "source": [ - "# Time of simulation\n", - "t_simulation = 1 * u.erg / luminosity\n", - "print('Time of simulation:', t_simulation)\n", - "\n", - "# Array of luminosity contribution by each packet\n", - "lumin_per_packet = energies / t_simulation\n", - "print('Luminosity per packet:', lumin_per_packet)" - ] - }, - { - "cell_type": "markdown", - "id": "0d839222", - "metadata": {}, - "source": [ - "We define important constants, and for comparison's sake, we code the Planck distribution function\n", - "$$L_\\nu (\\nu)=\\frac{8\\pi R_\\mathrm{phot}^2 h\\nu^3}{c^2}\\frac{1}{\\exp\\left(\\frac{h\\nu}{k_BT_\\mathrm{phot}}\\right)-1}$$\n", - "where $L_\\nu$ is the luminosity density with respect to frequency, $\\nu$ is frequency, $h$ is Planck's constant, $c$ is the speed of light, and $k_B$ is Boltzmann's constant:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "916a5e22", - "metadata": { - "scrolled": false - }, - "outputs": [], - "source": [ - "h = const.h.cgs\n", - "c2 = const.c.cgs**2\n", - "kB = const.k_B.cgs\n", - "\n", - "def planck_function(nu):\n", - " return 8 * np.pi**2 * r_phot**2 * h * nu**3 / (c2 * (np.exp(h * nu / (kB * temperature)) - 1))" - ] - }, - { - "cell_type": "markdown", - "id": "78230177", - "metadata": {}, - "source": [ - "We plot the Planck distribution and a histogram of the generated packet distribution:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "913fcdbb", - "metadata": {}, - "outputs": [], - "source": [ - "# We set important quantites for making our histogram\n", - "bins = 200\n", - "nus_planck = np.linspace(min(nus), max(nus), bins)\n", - "bin_width = nus_planck[1] - nus_planck[0]\n", - "\n", - "# In the histogram plot below, the weights argument is used \n", - "# to make sure our plotted spectrum has the correct y-axis scale\n", - "plt.hist(nus.to('Hz').value,\n", - " bins=bins,\n", - " weights=lumin_per_packet.to('erg/s').value/bin_width.to('Hz').value)\n", - "\n", - "# We plot the planck function for comparison\n", - "plt.plot(nus_planck, planck_function(nus_planck))\n", - "\n", - "plt.xlabel('Frequency (Hz)')\n", - "plt.ylabel('Luminosity density w.r.t. frequency (erg/s/Hz)')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "ad4f0f0e", - "metadata": {}, - "source": [ - "We finally plot the generated $\\mu$ density distribution, followed by the generated $\\theta=\\arccos (\\mu)$ density distribution, compared with the respective curves $\\rho = 2\\mu$ and $\\rho = \\sin(2\\theta)$:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ae4c97de", - "metadata": {}, - "outputs": [], - "source": [ - "x = np.linspace(0, 1, 1000)\n", - "\n", - "plt.hist(mus, bins=bins, density=True)\n", - "plt.plot(x, 2*x)\n", - "plt.xlabel('Propagation direction')\n", - "plt.ylabel('Probability density')\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41daa433", - "metadata": {}, - "outputs": [], - "source": [ - "thetas = np.linspace(0, np.pi/2, 1000)\n", - "\n", - "plt.hist(np.arccos(mus), bins=bins, density=True)\n", - "plt.plot(thetas, np.sin(2*thetas))\n", - "plt.xlabel('Angle with normal (rad)')\n", - "plt.ylabel('Probability density')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "2f661592", - "metadata": {}, - "source": [ - "## Custom Packet Source\n", - "\n", - "TARDIS allows for the user to input a custom function that generates energy packets instead of the basic blackbody source described here. See [Running TARDIS with a Custom Packet Source](../../io/optional/custom_source.ipynb) for more information." - ] - } - ], - "metadata": { - "celltoolbar": "Raw Cell Format", - "kernelspec": { - "display_name": "Python 3", - "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.7.10" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}