{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simulation Handling (Obsolete)\n", "\n", "Demonstrate the conversion of neutrino flux at Earth to observed hits in IceCube using the `asteria.handler.SimulationHandler` object." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "from asteria import config\n", "from asteria.handler import SimulationHandler\n", "from asteria.neutrino import Flavor\n", "import astropy.units as u\n", "\n", "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup styles for Plotting" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [], "source": [ "def setup_plotting():\n", " axes_style = { 'grid' : 'True',\n", " 'labelsize' : '24',\n", " 'labelpad' : '8.0' }\n", " \n", " xtick_style = { 'direction' : 'out',\n", " 'labelsize' : '20.',\n", " 'major.size' : '5.', \n", " 'major.width' : '1.',\n", " 'minor.visible' : 'True',\n", " 'minor.size' : '2.5',\n", " 'minor.width' : '1.' }\n", " \n", " ytick_style = { 'direction' : 'out',\n", " 'labelsize' : '20.',\n", " 'major.size' : '5', \n", " 'major.width' : '1.',\n", " 'minor.visible' : 'True',\n", " 'minor.size' : '2.5',\n", " 'minor.width' : '1.' }\n", " \n", " grid_style = { 'alpha' : '0.75' }\n", " legend_style = { 'fontsize' : '18' }\n", " font_syle = { 'size' : '20'}\n", " text_style = { 'usetex' : 'True' }\n", " figure_style = { 'subplot.hspace' : '0.05' }\n", " \n", " mpl.rc( 'font', **font_syle )\n", " mpl.rc( 'text', **text_style )\n", " mpl.rc( 'axes', **axes_style )\n", " mpl.rc( 'xtick', **xtick_style )\n", " mpl.rc( 'ytick', **ytick_style )\n", " mpl.rc( 'grid', **grid_style )\n", " mpl.rc( 'legend', **legend_style )\n", " mpl.rc( 'figure', **figure_style )\n", " \n", " mpl.rcParams['text.usetex'] = True \n", " mpl.rcParams['text.latex.preamble'] = [r'\\usepackage[cm]{sfmath}']\n", "setup_plotting()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load Configuration\n", "\n", "This will load the source configuration from a file.\n", "\n", "For this to work, either the user needs to have done one of two things:\n", "1. Run `python setup.py install` in the ASTERIA directory.\n", "2. Run `python setup.py develop` and set the environment variable `ASTERIA` to point to the git source checkout.\n", "\n", "If these were not done, the initialization will fail because the paths will not be correctly resolved." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [], "source": [ "conf = config.load_config('../../data/config/default.yaml')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prepare Simulation Handler\n", "\n", "Initialize the simulation handler using the `asteria.config.Configuration` object `conf`. The simulation handler contains its own configuration data member, which is also named `conf`. The information stored within may differ slightly with the information contained within the `asteria.config.Configuration` object used to initialize the handler, as the handler performs error checking during initialization. These differences will manifest in two forms.\n", "1. If user provides \"default\" for any configuration option in the simulation node of the yaml configuration file (Other than the `energy` and `time` sub-nodes), the handler will convert this to a more informative string. This notebook uses configuration `default.yaml` which uses \"default\" for the `interactions` and `hierarchy` sub-nodes. These members are accessed with `sim.conf.simulation.interactions` and `sim.conf.simulation.hierarchy`. The actual values of the handler's `conf` object are printed in the following cell.\n", "2. If the user provides \"None\" or does not provide a value to the hierarchy sub-node, the handler will set the subnodes of its internal conf data member to the string 'none'.\n", "\n", "The simulaiton configuration is printed in yaml-compatible format. This string can be used to populate the simulation sub-nodes of an ASTERIA configuration yaml file. These data are also accessible in the form of a dictionary of strings via calling `sim.conf_dict`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "is_executing": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "flavors:\n", " - nu_e\n", " - nu_e_bar\n", " - nu_x\n", " - nu_x_bar\n", "interactions:\n", " - InvBetaPar\n", " - ElectronScatter\n", " - Oxygen16CC\n", " - Oxygen16NC\n", " - Oxygen18\n", "hierarchy: normal\n", "mixing:\n", " scheme: adiabatic-msw\n", " angle: 33.2 deg\n", "energy:\n", " min: 0 MeV\n", " max: 100 MeV\n", " step: 0.1 MeV\n", " size: 1001\n", "time:\n", " min: -1 s\n", " max: 1 s\n", " step: 1 ms\n", " size: 2001\n" ] } ], "source": [ "sim = SimulationHandler(conf)\n", "sim.print_config()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Please refer to the `SimulationHandler` docstring for information about its data members" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#print(SimulationHandler.__doc__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compute Signal per DOM\n", "\n", "For each flavor, compute the photonic energy deposition in one $m^3$ of ice, and then scale it to the effective volume of one DOM.\n", "\n", "`sim.run()` first attempts to load a simulation from the file specified by the `IO.table.path` node of the configuration. See the following cells for a discussion of loading/saving simulations. If no simulation is loaded, `sim.run()` performs the simulation by sequentially calling `sim.compute_photon_spectra()` and `sim.compute_energy_per_volume()`.\n", "\n", " - `sim.compute_photon_spectra()` computes the spectrum of photons produced by neutrino interactions in the ice. This is accessible in data member `sim.photon_spectra` in the form of a numpy array of shape `(len(sim.flavors), len(sim.Enu))` In the case of this example `(4, 1001)`. This method must be called before `sim.compute_energy_per_volume()`. \n", " \n", " - `sim.compute_energy_per_volume()` Computes the flux at the detector, considering oscillations, before computing the energy deposition per cubic meter in the ice due to photons produced by neutrino interactions in the ice. This is accessible in data member `sim.E_per_V` in the form of a numpy array of shape `(len(sim.flavors), len(sim.time))` In the case of this example `(4, 2001)`. \n", " \n", "\n", "For a more detailed description of this calculation, please see the `detector_response.ipynb` notebook.\n", "\n", "If the argument `load_simulation=False` is provided, then no attempt to load a simulation will be made, and `sim.run()` will perform the simulation." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "pycharm": { "is_executing": false }, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running Simulation...\n", "Beginning nu_e simulation... Completed\n", "Beginning nu_e_bar simulation... Completed\n", "Beginning nu_x simulation... Completed\n", "Beginning nu_x_bar simulation... Completed\n" ] } ], "source": [ "sim.run(load_simulation=False)\n", "\n", "effvol = 0.1654 * u.m**3 / u.MeV #Simple estimation of IceCube DOM Eff. Vol.\n", "signal_per_DOM = effvol * sim.E_per_V " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Save/Load Simulation to/from File\n", "\n", "The photonic energy per volume is the quantity that is most computationally difficult to obtain, and can be used to obtain numerous high level results. Saving this information to file enables faster processing for large scale analysis. Additionally, this information scales according to `progenitor_distance`$^{-2}$, so multiple simulations at different distances can be loaded from the same file and scaled accordingly. \n", "\n", "`sim.save()` wraps `asteria.IO.save()` and writes the energy per volume is stored to the file specified in the configuration file under the `IO.table.path` node. In this case, the file `\\data\\processed\\nakazato-shen-z0.02-t_rev300ms-s13.0.h5` is used. The actual result saved by `sim.save()` is the photonic energy per distance scaled to a progenitor 1kpc away. Note that the user must perform this scaling manually if only using `IO.save()`.\n", "\n", "If the a simulation with the same configuration already exists in`\\data\\processed\\nakazato-shen-z0.02-t_rev300ms-s13.0.h5`, trying to save the simulation will cause `asteria.IO.save()` to throw an exception, which is handled below with a `try-except` block. This may be bypassed by using the force argument, which will force `asteria.IO.save()` to overwrite the existing data.\n", "\n", "```sim.save(conf, force=True)```\n", "\n", "Similarly, `sim.load()` wraps `asteria.IO.load()`, and returns the energy per volume scaled to the distance specified in the configuration yaml file under the `source.progenitor.distance.distance` node. Note that `IO.load()` on its own does not perform this scaling. See the file `\\docs\\nb\\load_simulation.ipynb` for information on reading the simulation result from file. The loaded data takes the form of a numpy array of shape `(len(sim.flavors), len(sim.time))` In the case of this example `(4, 2001)`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Found 0\n", "Simulation exists, Aborting. Use argument 'force = True' to force saving.\n" ] } ], "source": [ "try:\n", " sim.save()\n", "except FileExistsError as e:\n", " print(e)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define Helper Functions\n", "\n", "Define Functions for plotting, retrieving information from ROOT Files\n", "\n", "- `rebin` Reshape the independent variable `var` with resolution `old_binning` and dependent variable `data` (assumed to be numpy array) and return new arrays `var` and `data` with resolution `new_binning`.\n", "\n", "- `bin_hits` using the `detector` table of DOMs and their properties, determines the number of hits within the specified binning `binning`. This takes into account the artificial deadtime of the DOMs.\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def rebin(var, data, old_binning, new_binning):\n", " step = int(new_binning/old_binning)\n", " new_size = int(data.size / step)\n", " rebinned_data = np.array([np.sum(data_part) for data_part in np.array_split( data, new_size )])\n", " rebinned_var = var.value[int(0.5 * step)::step]\n", " \n", " return rebinned_var, rebinned_data \n", "\n", "def bin_hits(detector, time, total_E_per_V, dt, binning):\n", " doms = detector.doms_table()\n", " n_i3_doms = len(doms[doms['type'] == 'i3'])\n", " n_dc_doms = len(doms[doms['type'] == 'dc'])\n", "\n", " deadtime = detector.deadtime\n", " dc_rel_eff = detector.dc_rel_eff\n", "\n", " i3_dom_bg_mu = detector.i3_dom_bg_mu\n", " i3_dom_bg_sig = detector.i3_dom_bg_sig\n", "\n", " dc_dom_bg_mu = detector.dc_dom_bg_mu\n", " dc_dom_bg_sig = detector.dc_dom_bg_sig\n", " \n", " time_binned, total_E_per_V_binned = rebin(time, total_E_per_V, dt, binning)\n", " eps_i3 = 0.87 / (1+deadtime*total_E_per_V_binned/binning)\n", " eps_dc = 0.87 / (1+deadtime*total_E_per_V_binned*dc_rel_eff/binning)\n", " hits_binned = detector.detector_hits(total_E_per_V_binned, eps_i3, eps_dc)\n", "\n", " sn_bg_mu = (n_i3_doms*i3_dom_bg_mu + n_dc_doms*dc_dom_bg_mu ) * binning;\n", " sn_bg_sig = np.sqrt( (n_i3_doms*i3_dom_bg_sig**2 + n_dc_doms*dc_dom_bg_sig**2) * binning )\n", " bg_binned = np.random.normal(sn_bg_mu, sn_bg_sig, time_binned.size)\n", " \n", " return time_binned, bg_binned, hits_binned" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot Expected Signal Increase for Each Flavor\n", "This will plot the signal increase in a single DOM caused by each flavor. The curve shows the DOM response from 0.05 seconds before the core bounce to 0.65 seconds after the core bounce. Note that this is computed with the assumption that the effective volume of the DOM is 0.1654 m$^3$ MeV$^{-1}$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, figsize = (6,7))\n", "\n", "for nu, flavor in enumerate(sim.flavors):\n", " ax.step( sim.time, signal_per_DOM[nu], label=flavor.to_tex(), linewidth=2)\n", " \n", "ax.set_ylabel('Signal per DOM', horizontalalignment='right', y = 1)\n", "ax.set_xlabel(r't-t$_{bounce}$ [s]', horizontalalignment='right', x=1.0)\n", "ax.set(xlim=(-0.05, 0.65))\n", "ax.legend()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot Expected Signal Increase in Detector\n", "This will plot the signal increase across the entire detector. The curve shows the DOM response from 0.05 seconds before the core bounce to 0.65 seconds after the core bounce." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sn_dt = 0.01 #Units seconds: 10ms binning for plotting\n", "time, background, signal = bin_hits(sim.detector, sim.time, sim.total_E_per_V.value, sim.dt.value, sn_dt)\n", "\n", "# Scaled to improve readability of axis labels\n", "background = background/1e4\n", "signal = signal/1e4\n", "response = background+signal\n", "\n", "fig, ax = plt.subplots(1, figsize = (6,7))\n", "ax.step(time, background , lw=2, label='Background', color='k', alpha=0.25)[0] \n", "h = ax.step(time, response, lw=2, label='Response', color='b')[0] \n", "# Error bars are computed on unscaled quantity and then scaled.\n", "ax.errorbar(time - 0.5*sn_dt, background, yerr=np.sqrt(background)/1e4, color='k', alpha=0.5, fmt='.')\n", "ax.errorbar(time - 0.5*sn_dt, response, yerr=np.sqrt(response)/1e4, color=h.get_color(), fmt='.')\n", "\n", "ylimits = ax.get_ylim()\n", "ax.set(xlim=(-0.05, 0.65), ylim=(ylimits[0], ylimits[1]+0.15))\n", "ax.set_xlabel(r't-t$_{bounce}$ [s]', horizontalalignment='right', x=1.0)\n", "ax.set_ylabel(r'Total Hits [10 ms Bins, $\\times 10^4$]', horizontalalignment='right', y=1.0)\n", "l = ax.legend(loc='upper center', ncol=2)" ] } ], "metadata": { "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.3" }, "pycharm": { "stem_cell": { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [] } } }, "nbformat": 4, "nbformat_minor": 2 }