diff --git a/docs/source/nb/AnalyticModel_DetectorResponse.ipynb b/docs/source/nb/AnalyticModel_DetectorResponse.ipynb index 0946dd3..c656834 100644 --- a/docs/source/nb/AnalyticModel_DetectorResponse.ipynb +++ b/docs/source/nb/AnalyticModel_DetectorResponse.ipynb @@ -26,33 +26,27 @@ "import numpy as np\n", "\n", "from snewpy import model_path\n", - "from snewpy.neutrino import Flavor\n", + "from snewpy.neutrino import Flavor, MixingParameters\n", + "from snewpy.flavor_transformation import AdiabaticMSW\n", "from snewpy.models.ccsn import Analytic3Species\n", "\n", "from asteria.simulation import Simulation\n", - "from asteria import set_rcparams\n", - "\n", - "set_rcparams()" + "from asteria import set_rcparams" ] }, { "cell_type": "code", "execution_count": null, - "id": "2790c4a0", + "id": "a3318161-8249-40a5-b7bd-6fbeb818813c", "metadata": {}, "outputs": [], "source": [ - "filename = \"AnalyticFluenceExample.dat\"\n", - "model_folder = f\"{model_path}/AnalyticFluence/\"\n", - "\n", - "if not os.path.exists(model_folder):\n", - " os.makedirs(model_folder)\n", - "file_path = os.path.join(model_folder, filename)" + "mpl.rc('font', size=14)" ] }, { "cell_type": "markdown", - "id": "1ae4d76e", + "id": "6aab9b4d-81cb-4de2-82a1-fb003eca97f9", "metadata": {}, "source": [ "## Creating a SN model file modeled after the Livermore model\n", @@ -63,50 +57,57 @@ { "cell_type": "code", "execution_count": null, - "id": "52c8193e", + "id": "2790c4a0", "metadata": {}, "outputs": [], "source": [ - "# These numbers _almost_ reproduce the Livermore model included in the SNOwGLoBES repository.\n", - "# They are obtained by calculating the total L, and from the livermore.dat\n", - "# fluence file (which is modelled after a 10kpc supernova).\n", - "total_energy = (5.478e+52, 5.485e+52, 4 * 5.55e+52)\n", - "mean_energy = (11.5081, 15.4678, 21.0690)\n", - "rms_or_pinch = \"rms\"\n", - "rms_energy = (12.8788, 17.8360, 24.3913)\n", - "\n", - "# Make an astropy table with two times, 0s and 1s, with constant neutrino properties\n", - "table = Table()\n", - "table['TIME'] = np.linspace(0,1,2)\n", - "table['L_NU_E'] = np.linspace(1,1,2)*total_energy[0]\n", - "table['L_NU_E_BAR'] = np.linspace(1,1,2)*total_energy[1]\n", - "table['L_NU_X'] = np.linspace(1,1,2)*total_energy[2]/4. #Note, L_NU_X is set to 1/4 of the total NU_X energy\n", - " \n", - "table['E_NU_E'] = np.linspace(1,1,2)*mean_energy[0]\n", - "table['E_NU_E_BAR'] = np.linspace(1,1,2)*mean_energy[1]\n", - "table['E_NU_X'] = np.linspace(1,1,2)*mean_energy[2]\n", + "filename = 'AnalyticFluenceExample.dat '\n", + "model_folder = f\"{model_path}/AnalyticFluence/\"\n", + "file_path = os.path.join(model_folder, filename)\n", "\n", - "if rms_or_pinch == \"rms\":\n", - " table['RMS_NU_E'] = np.linspace(1,1,2)*rms_energy[0]\n", - " table['RMS_NU_E_BAR'] = np.linspace(1,1,2)*rms_energy[1]\n", - " table['RMS_NU_X'] = np.linspace(1,1,2)*rms_energy[2]\n", - " table['ALPHA_NU_E'] = (2.0 * table['E_NU_E'] ** 2 - table['RMS_NU_E'] ** 2) / (\n", - " table['RMS_NU_E'] ** 2 - table['E_NU_E'] ** 2)\n", - " table['ALPHA_NU_E_BAR'] = (2.0 * table['E_NU_E_BAR'] ** 2 - table['RMS_NU_E_BAR'] ** 2) / (\n", - " table['RMS_NU_E_BAR'] ** 2 - table['E_NU_E_BAR'] ** 2)\n", - " table['ALPHA_NU_X'] = (2.0 * table['E_NU_X'] ** 2 - table['RMS_NU_X'] ** 2) / (\n", - " table['RMS_NU_X'] ** 2 - table['E_NU_X'] ** 2)\n", - "elif rms_or_pinch == \"pinch\":\n", - " table['ALPHA_NU_E'] = np.linspace(1,1,2)*pinch_values[0]\n", - " table['ALPHA_NU_E_BAR'] = np.linspace(1,1,2)*pinch_values[1]\n", - " table['ALPHA_NU_X'] = np.linspace(1,1,2)*pinch_values[2]\n", - " table['RMS_NU_E'] = np.sqrt((2.0 + table['ALPHA_NU_E'])/(1.0 + table['ALPHA_NU_E'])*table['E_NU_E']**2)\n", - " table['RMS_NU_E_BAR'] = np.sqrt((2.0 + table['ALPHA_NU_E_BAR'])/(1.0 + table['ALPHA_NU_E_BAR'])*table['E_NU_E_BAR']**2)\n", - " table['RMS_NU_X'] = np.sqrt((2.0 + table['ALPHA_NU_X'])/(1.0 + table['ALPHA_NU_X'])*table['E_NU_X']**2 )\n", - "else:\n", - " print(\"incorrect second moment method: rms or pinch\")\n", + "if not os.path.exists(file_path):\n", + " os.makedirs(model_folder, exist_ok=True)\n", "\n", - "table.write(file_path,format='ascii',overwrite=True)" + " # These numbers _almost_ reproduce the Livermore model included in the SNOwGLoBES repository.\n", + " # They are obtained by calculating the total L, and from the livermore.dat\n", + " # fluence file (which is modelled after a 10kpc supernova).\n", + " total_energy = (5.478e+52, 5.485e+52, 4 * 5.55e+52)\n", + " mean_energy = (11.5081, 15.4678, 21.0690)\n", + " rms_or_pinch = \"rms\"\n", + " rms_energy = (12.8788, 17.8360, 24.3913)\n", + " \n", + " # Make an astropy table with two times, 0s and 1s, with constant neutrino properties\n", + " table = Table()\n", + " table['TIME'] = np.linspace(0,1,2)\n", + " table['L_NU_E'] = np.linspace(1,1,2)*total_energy[0]\n", + " table['L_NU_E_BAR'] = np.linspace(1,1,2)*total_energy[1]\n", + " table['L_NU_X'] = np.linspace(1,1,2)*total_energy[2]/4. #Note, L_NU_X is set to 1/4 of the total NU_X energy\n", + " \n", + " table['E_NU_E'] = np.linspace(1,1,2)*mean_energy[0]\n", + " table['E_NU_E_BAR'] = np.linspace(1,1,2)*mean_energy[1]\n", + " table['E_NU_X'] = np.linspace(1,1,2)*mean_energy[2]\n", + " \n", + " if rms_or_pinch == \"rms\":\n", + " table['RMS_NU_E'] = np.linspace(1,1,2)*rms_energy[0]\n", + " table['RMS_NU_E_BAR'] = np.linspace(1,1,2)*rms_energy[1]\n", + " table['RMS_NU_X'] = np.linspace(1,1,2)*rms_energy[2]\n", + " table['ALPHA_NU_E'] = (2.0 * table['E_NU_E'] ** 2 - table['RMS_NU_E'] ** 2) / (\n", + " table['RMS_NU_E'] ** 2 - table['E_NU_E'] ** 2)\n", + " table['ALPHA_NU_E_BAR'] = (2.0 * table['E_NU_E_BAR'] ** 2 - table['RMS_NU_E_BAR'] ** 2) / (\n", + " table['RMS_NU_E_BAR'] ** 2 - table['E_NU_E_BAR'] ** 2)\n", + " table['ALPHA_NU_X'] = (2.0 * table['E_NU_X'] ** 2 - table['RMS_NU_X'] ** 2) / (\n", + " table['RMS_NU_X'] ** 2 - table['E_NU_X'] ** 2)\n", + " elif rms_or_pinch == \"pinch\":\n", + " table['ALPHA_NU_E'] = np.linspace(1,1,2)*pinch_values[0]\n", + " table['ALPHA_NU_E_BAR'] = np.linspace(1,1,2)*pinch_values[1]\n", + " table['ALPHA_NU_X'] = np.linspace(1,1,2)*pinch_values[2]\n", + " table['RMS_NU_E'] = np.sqrt((2.0 + table['ALPHA_NU_E'])/(1.0 + table['ALPHA_NU_E'])*table['E_NU_E']**2)\n", + " table['RMS_NU_E_BAR'] = np.sqrt((2.0 + table['ALPHA_NU_E_BAR'])/(1.0 + table['ALPHA_NU_E_BAR'])*table['E_NU_E_BAR']**2)\n", + " table['RMS_NU_X'] = np.sqrt((2.0 + table['ALPHA_NU_X'])/(1.0 + table['ALPHA_NU_X'])*table['E_NU_X']**2 )\n", + " else:\n", + " print(\"incorrect second moment method: rms or pinch\")\n", + " \n", + " table.write(file_path, format='ascii', overwrite=True)" ] }, { @@ -125,19 +126,14 @@ "outputs": [], "source": [ "# SNEWPY model dictionary, the format must match the below example for analytic models\n", - "model = {\n", - " 'name': 'Analytic3Species',\n", - " 'param': {\n", - " 'filename': file_path\n", - " }\n", - "}\n", + "model = Analytic3Species(filename=file_path)\n", "\n", "sim = Simulation(model=model,\n", - " distance=10 * u.kpc, \n", - " Emin=0*u.MeV, Emax=100*u.MeV, dE=1*u.MeV,\n", - " tmin=-1*u.s, tmax=10*u.s, dt=1*u.ms,\n", - " mixing_scheme='AdiabaticMSW',\n", - " hierarchy='normal')\n", + " distance=10*u.kpc, \n", + " E=np.arange(0, 101, 1)*u.MeV,\n", + " t=np.arange(-1, 10.001, 0.001)*u.s,\n", + " flavor_xform=AdiabaticMSW(mixing_params=MixingParameters(mass_order='NORMAL')))\n", + "\n", "sim.run()" ] }, @@ -164,20 +160,11 @@ "t, hits = sim.detector_signal(dt)\n", "bg = sim.detector.i3_bg(dt, size=hits.size) + sim.detector.dc_bg(dt, size=hits.size)\n", "\n", - "\n", - "ax.step(t, hits+bg, where='post', lw=2, )\n", + "ax.step(t, (hits+bg), where='post', lw=2, )\n", "ax.set(xlim=(-1, 5));\n", "ax.set_xlabel(r'$t-t_\\mathrm{bounce}$ [s]', ha='right', x=1.0)\n", "ax.set_ylabel(fr'total signal [{dt} bins, $\\times 10^{{{int(np.log10(scale))}}}$]', ha='right', y=1.0)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "106f8205", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -196,7 +183,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.11" + "version": "3.12.13" } }, "nbformat": 4, diff --git a/docs/source/nb/PiegsaEarthOscillations.ipynb b/docs/source/nb/PiegsaEarthOscillations.ipynb deleted file mode 100644 index fcb3349..0000000 --- a/docs/source/nb/PiegsaEarthOscillations.ipynb +++ /dev/null @@ -1,272 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Earth Survival Probability from USSR\n", - "\n", - "Check the Earth-crossing survival probability computed in the old USSR code." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib as mpl\n", - "import matplotlib.pyplot as plt\n", - "\n", - "from importlib.resources import files\n", - "\n", - "from snewpy.neutrino import Flavor\n", - "from asteria import set_rcparams" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Set Styles for Plotting" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "set_rcparams(verbose=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Define Helper Function" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def getUSSRdata(filename):\n", - " file = files('asteria.data.USSR').joinpath(f'earth_survival_probability/{filename}')\n", - " if not file.exists():\n", - " raise FileNotFoundError(f'Could not find earth_survival_probability/{filename} in asteria.')\n", - " \n", - " with open(file, 'r') as infile:\n", - " # Get Size of data from first line and initialize.\n", - " line = infile.readline().strip('#').replace(',','').split()\n", - " Enu = np.zeros( int(line[1]) )\n", - " data = np.zeros( shape=( int(line[0]), int(line[1])) )\n", - " \n", - " # Clear other lines of header\n", - " infile.readline() \n", - " infile.readline() \n", - " i = 0\n", - " for line in infile:\n", - " line = line.split()\n", - " Enu[i] = float(line[0])\n", - " for nu, item in enumerate(line[1:]):\n", - " data[nu][i] = float(item)\n", - " i+=1\n", - " return Enu, data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Plot Earth Survival Probability from USSR\n", - "Commands used: `$ ./sim_test -mn 404 -oem 33 -os {os} -osm {osm}` with...\n", - " - `{osm} = 0,1` For Star oscillations off, on\n", - " - `{os} = 1,2,3 / 4,5,6` For $sin^2(2\\theta_{13})$ = 1e-2, 5e-4, 1e-6. (1,2,3 are NH / 4,5,6 are IH)\n", - " \n", - " In all cases $\\delta_{cp} = 0$. $\\theta_n$ is the nadir angle, which at the time of writing is always 33 $^{\\circ}$." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Enu, Pe = getUSSRdata( 'nadir-33__sqsin2theta13-1E-2__NH__StarOsc_Off.txt' )\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "for nu, flavor in enumerate(Flavor):\n", - " ax.plot(Enu, Pe[nu], lw=2, alpha=0.7, label=flavor.to_tex())\n", - " \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1e-2$' +' | '+'NH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "ax.plot(Enu, Pe[0] + Pe[2], lw=2, alpha=0.7, label=r'$\\nu$')\n", - "ax.plot(Enu, Pe[1] + Pe[3], lw=2, alpha=0.7, label=r'$\\bar{\\nu}$') \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'IH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Enu, Pe = getUSSRdata( 'nadir-33__sqsin2theta13-1E-2__IH__StarOsc_Off.txt' )\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "for nu, flavor in enumerate(Flavor):\n", - " ax.plot(Enu, Pe[nu], lw=2, alpha=0.7, label=flavor.to_tex())\n", - " \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1e-2$' +' | '+'IH' + ' | Star Osc. OFF' )\n", - "ax.legend(loc='upper right');\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "ax.plot(Enu, Pe[0] + Pe[2], lw=2, alpha=0.7, label=r'$\\nu$')\n", - "ax.plot(Enu, Pe[1] + Pe[3], lw=2, alpha=0.7, label=r'$\\bar{\\nu}$') \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'IH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Enu, Pe = getUSSRdata( 'nadir-33__sqsin2theta13-5E-4__NH__StarOsc_Off.txt' )\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "for nu, flavor in enumerate(Flavor):\n", - " ax.plot(Enu, Pe[nu], lw=2, alpha=0.7, label=flavor.to_tex())\n", - " \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 5e-4$' +' | '+'NH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "ax.plot(Enu, Pe[0] + Pe[2], lw=2, alpha=0.7, label=r'$\\nu$')\n", - "ax.plot(Enu, Pe[1] + Pe[3], lw=2, alpha=0.7, label=r'$\\bar{\\nu}$') \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'IH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Enu, Pe = getUSSRdata( 'nadir-33__sqsin2theta13-5E-4__IH__StarOsc_Off.txt' )\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "for nu, flavor in enumerate(Flavor):\n", - " ax.plot(Enu, Pe[nu], lw=2, alpha=0.7, label=flavor.to_tex())\n", - " \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 5e-4$' +' | '+'IH' + ' | Star Osc. OFF' )\n", - "ax.legend(loc='upper right');\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "ax.plot(Enu, Pe[0] + Pe[2], lw=2, alpha=0.7, label=r'$\\nu$')\n", - "ax.plot(Enu, Pe[1] + Pe[3], lw=2, alpha=0.7, label=r'$\\bar{\\nu}$') \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'IH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Enu, Pe = getUSSRdata( 'nadir-33__sqsin2theta13-1E-6__NH__StarOsc_Off.txt' )\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "for nu, flavor in enumerate(Flavor):\n", - " ax.plot(Enu, Pe[nu], lw=2, alpha=0.7, label=flavor.to_tex())\n", - " \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'NH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');\n", - "\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "ax.plot(Enu, Pe[0] + Pe[2], lw=2, alpha=0.7, label=r'$\\nu$')\n", - "ax.plot(Enu, Pe[1] + Pe[3], lw=2, alpha=0.7, label=r'$\\bar{\\nu}$') \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'IH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "Enu, Pe = getUSSRdata( 'nadir-33__sqsin2theta13-1E-6__IH__StarOsc_Off.txt' )\n", - "\n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "for nu, flavor in enumerate(Flavor):\n", - " ax.plot(Enu, Pe[nu], lw=2, alpha=0.7, label=flavor.to_tex())\n", - " \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'IH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');\n", - " \n", - "fig, ax = plt.subplots(1,1, figsize=(9,5))\n", - "ax.plot(Enu, Pe[0] + Pe[2], lw=2, alpha=0.7, label=r'$\\nu$')\n", - "ax.plot(Enu, Pe[1] + Pe[3], lw=2, alpha=0.7, label=r'$\\bar{\\nu}$') \n", - "ax.set_xlabel( r'E$_\\nu$ [MeV]', horizontalalignment='right', x = 1)\n", - "ax.set_ylabel( 'Probability' , horizontalalignment='right', y = 1)\n", - "ax.set_title(r'$\\theta_n = 33$'+' | '+ r'$sin^2 (2 \\theta_{13}) = 1E-6$' +' | '+'IH' + ' | Star Osc. Off' )\n", - "ax.legend(loc='upper right');" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.11" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/source/nb/config_example.ipynb b/docs/source/nb/config_example.ipynb index 1c253a1..1c15529 100644 --- a/docs/source/nb/config_example.ipynb +++ b/docs/source/nb/config_example.ipynb @@ -4,7 +4,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Example Configuration" + "# Example Configuration\n", + "\n", + "Configure the `Simulation` with an INI file distributed with `asteria` and generate an average signal per flavor." ] }, { @@ -16,10 +18,20 @@ "from asteria.simulation import Simulation\n", "from snewpy.neutrino import Flavor\n", "\n", + "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "from importlib.resources import files" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mpl.rc('font', size=14)" + ] + }, { "cell_type": "code", "execution_count": null, @@ -27,14 +39,25 @@ "outputs": [], "source": [ "configfile = files('asteria.etc').joinpath('example.ini')\n", - "sim = Simulation(config=configfile)\n", - "sim.run()\n", - "\n", - "fig, ax = plt.subplots(1, figsize = (6,7))\n", + "sim = Simulation(configfile=configfile)\n", + "sim.run()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(1, figsize = (8,5))\n", "for flavor in sim.flavors:\n", - " ax.plot(sim.time, sim.avg_dom_signal(flavor=flavor), label=flavor.name)\n", - "ax.legend()\n", - "ax.set(xlabel=r't-t$_{bounce}$ [s]', ylabel='Signal per DOM', xlim=(-0.025, 0.65));" + " lw = 1 if flavor.is_neutrino else 3\n", + " ls = '-' if flavor.is_neutrino else ':'\n", + " color = 'tab:blue' if flavor.is_electron else ('tab:orange' if flavor.is_muon else 'tab:red')\n", + " signal = sim.avg_dom_signal(flavor=flavor) / sim.res_dt\n", + " ax.plot(sim.t_binned, signal.to('Hz'), lw=lw, ls=ls, color=color, label=flavor.to_tex())\n", + "ax.legend(fontsize=12, ncol=3)\n", + "ax.set(xlabel=r'$t-t_\\text{bounce}$ [s]', ylabel='signal per DOM [Hz]', xlim=(-0.025, 0.65));" ] } ], @@ -54,7 +77,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.11" + "version": "3.12.13" } }, "nbformat": 4, diff --git a/docs/source/nb/cross_sections.ipynb b/docs/source/nb/cross_sections.ipynb index dd4422d..46fab01 100644 --- a/docs/source/nb/cross_sections.ipynb +++ b/docs/source/nb/cross_sections.ipynb @@ -43,43 +43,7 @@ "metadata": {}, "outputs": [], "source": [ - "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' : '16' }\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}']" + "mpl.rc('font', size=14)" ] }, { @@ -150,12 +114,12 @@ "\n", "\n", "\n", - "ax.set(xlim=[0,100], ylim=[1e-49, 1e-42], yscale='log', title='Primary SN Interactions' )\n", + "ax.set(xlim=[0,100], ylim=[1e-49, 1e-42], yscale='log', title=f'Primary SN $\\nu$ Interactions in Ice')\n", "\n", "ax.set_xlabel(r'$E_\\nu$ [MeV]', horizontalalignment='right', x=1.0)\n", "ax.set_ylabel(r'$\\sigma(E_\\nu)$ [m$^2$]', horizontalalignment='right', y=1.0)\n", "\n", - "ax.legend( bbox_to_anchor=(1.05,1))\n", + "ax.legend( bbox_to_anchor=(1.05,1), fontsize=10)\n", "\n", "fig.subplots_adjust(left=0.075, right=0.8)" ] @@ -164,7 +128,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Define Helper Functions\n", + "### Define Helper Functions\n", "\n", "Define Functions for plotting, retrieving information from Data Files\n", "\n", @@ -277,14 +241,15 @@ "interaction = interactions.InvBetaTab()\n", "\n", "for nu, flavor in enumerate(Flavor):\n", - " xsname = f'xs_{flavor.name}'\n", + " flname = flavor.name if flavor.is_electron else flavor.name.replace('MU', 'X').replace('TAU', 'X')\n", + " xsname = f'xs_{flname}'\n", " ussrxs = ussrdata[xsname]\n", " astrxs = interaction.cross_section(flavor=flavor, e_nu=Enu*u.MeV).to_value('m**2')\n", "\n", " if astrxs.any() and ussrxs.any():\n", " drawComparison(Enu, ussrxs, astrxs, flavor, r'$\\sigma(E_\\nu)$', '[m$^2$]', xs=True)\n", "\n", - " mEname = f'Elep_{flavor.name}'\n", + " mEname = f'Elep_{flname}'\n", " ussrmE = ussrdata[mEname]\n", " astrmE = interaction.mean_lepton_energy(flavor=flavor, e_nu=Enu*u.MeV).to_value('MeV')\n", "\n", @@ -311,14 +276,15 @@ "interaction = interactions.InvBetaPar()\n", "\n", "for nu, flavor in enumerate(Flavor):\n", - " xsname = f'xs_{flavor.name}'\n", + " flname = flavor.name if flavor.is_electron else flavor.name.replace('MU', 'X').replace('TAU', 'X')\n", + " xsname = f'xs_{flname}'\n", " ussrxs = ussrdata[xsname]\n", " astrxs = interaction.cross_section(flavor=flavor, e_nu=Enu*u.MeV).to_value('m**2')\n", "\n", " if astrxs.any() and ussrxs.any():\n", " drawComparison(Enu, ussrxs, astrxs, flavor, r'$\\sigma(E_\\nu)$', '[m$^2$]', xs=True)\n", "\n", - " mEname = f'Elep_{flavor.name}'\n", + " mEname = f'Elep_{flname}'\n", " ussrmE = ussrdata[mEname]\n", " astrmE = interaction.mean_lepton_energy(flavor=flavor, e_nu=Enu*u.MeV).to_value('MeV')\n", "\n", @@ -359,14 +325,15 @@ "interaction = interactions.ElectronScatter()\n", "\n", "for nu, flavor in enumerate(Flavor):\n", - " xsname = f'xs_{flavor.name}'\n", + " flname = flavor.name if flavor.is_electron else flavor.name.replace('MU', 'X').replace('TAU', 'X')\n", + " xsname = f'xs_{flname}'\n", " ussrxs = ussrdata[xsname]\n", " astrxs = interaction.cross_section(flavor=flavor, e_nu=Enu*u.MeV).to_value('m**2')\n", "\n", " if astrxs.any() and ussrxs.any():\n", " drawComparison(Enu, ussrxs, astrxs, flavor, r'$\\sigma(E_\\nu)$', '[m$^2$]', xs=True)\n", "\n", - " mEname = f'Elep_{flavor.name}'\n", + " mEname = f'Elep_{flname}'\n", " ussrmE = ussrdata[mEname]\n", " astrmE = interaction.mean_lepton_energy(flavor=flavor, e_nu=Enu*u.MeV).to_value('MeV') * astrxs\n", "\n", @@ -393,14 +360,15 @@ "interaction = interactions.Oxygen16CC()\n", "\n", "for nu, flavor in enumerate(Flavor):\n", - " xsname = f'xs_{flavor.name}'\n", + " flname = flavor.name if flavor.is_electron else flavor.name.replace('MU', 'X').replace('TAU', 'X')\n", + " xsname = f'xs_{flname}'\n", " ussrxs = ussrdata[xsname]\n", " astrxs = interaction.cross_section(flavor=flavor, e_nu=Enu*u.MeV).to_value('m**2')\n", "\n", " if astrxs.any() and ussrxs.any():\n", " drawComparison(Enu, ussrxs, astrxs, flavor, r'$\\sigma(E_\\nu)$', '[m$^2$]', xs=True)\n", "\n", - " mEname = f'Elep_{flavor.name}'\n", + " mEname = f'Elep_{flname}'\n", " ussrmE = ussrdata[mEname]\n", " astrmE = interaction.mean_lepton_energy(flavor=flavor, e_nu=Enu*u.MeV).to_value('MeV')\n", "\n", @@ -427,14 +395,15 @@ "interaction = interactions.Oxygen16NC()\n", "\n", "for nu, flavor in enumerate(Flavor):\n", - " xsname = f'xs_{flavor.name}'\n", + " flname = flavor.name if flavor.is_electron else flavor.name.replace('MU', 'X').replace('TAU', 'X')\n", + " xsname = f'xs_{flname}'\n", " ussrxs = ussrdata[xsname]\n", " astrxs = interaction.cross_section(flavor=flavor, e_nu=Enu*u.MeV).to_value('m**2')\n", "\n", " if astrxs.any() and ussrxs.any():\n", " drawComparison(Enu, ussrxs, astrxs, flavor, r'$\\sigma(E_\\nu)$', '[m$^2$]', xs=True)\n", "\n", - " mEname = f'Elep_{flavor.name}'\n", + " mEname = f'Elep_{flname}'\n", " ussrmE = ussrdata[mEname]\n", " astrmE = interaction.mean_lepton_energy(flavor=flavor, e_nu=Enu*u.MeV).to_value('MeV')\n", "\n", @@ -463,14 +432,15 @@ "interaction = interactions.Oxygen18()\n", "\n", "for nu, flavor in enumerate(Flavor):\n", - " xsname = f'xs_{flavor.name}'\n", + " flname = flavor.name if flavor.is_electron else flavor.name.replace('MU', 'X').replace('TAU', 'X')\n", + " xsname = f'xs_{flname}'\n", " ussrxs = ussrdata[xsname]\n", " astrxs = interaction.cross_section(flavor=flavor, e_nu=Enu*u.MeV).to_value('m**2')\n", "\n", " if astrxs.any() and ussrxs.any():\n", " drawComparison(Enu, ussrxs, astrxs, flavor, r'$\\sigma(E_\\nu)$', '[m$^2$]', xs=True)\n", "\n", - " mEname = f'Elep_{flavor.name}'\n", + " mEname = f'Elep_{flname}'\n", " ussrmE = ussrdata[mEname]\n", " astrmE = interaction.mean_lepton_energy(flavor=flavor, e_nu=Enu*u.MeV).to_value('MeV')\n", "\n", @@ -495,7 +465,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.11" + "version": "3.12.13" } }, "nbformat": 4, diff --git a/docs/source/nb/detector.ipynb b/docs/source/nb/detector.ipynb index bd78a77..e179e2d 100644 --- a/docs/source/nb/detector.ipynb +++ b/docs/source/nb/detector.ipynb @@ -4,24 +4,33 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Detector Geometry" + "# Detector Geometry\n", + "\n", + "Access to `Detector` geometry through the `detector` module." ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "from asteria import config, detector\n", + "from asteria import detector\n", "\n", "import astropy.units as u\n", "\n", "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", - "from mpl_toolkits.mplot3d import Axes3D\n", - "\n", + "from mpl_toolkits.mplot3d import Axes3D" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "mpl.rc('font', size=12)" ] }, @@ -29,909 +38,46 @@ "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", + "## Load IC86 Configuration\n", "\n", - "If these were not done, the initialization will fail because the paths will not be correctly resolved." + "This will load the source configuration using the `detector_scope` argument." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "conf = config.load_config('../../data/config/default.yaml')\n", - "ic86 = detector.initialize(conf)" + "ic86 = detector.Detector(detector_scope='IC86')" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "Table length=5160\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
strixyzeffvoltype
float32float32float64float64float64float64bytes2
1.01.0-256.14-521.08496.070.14061218768974065i3
1.02.0-256.14-521.08479.050.15195632747592844i3
1.03.0-256.14-521.08462.030.1680922220166442i3
1.04.0-256.14-521.08445.010.17294657931248547i3
1.05.0-256.14-521.08427.990.16979112735610763i3
1.06.0-256.14-521.08410.970.1500592745094757i3
1.07.0-256.14-521.08393.950.12795153280329327i3
1.08.0-256.14-521.08376.920.12487149756118941i3
1.09.0-256.14-521.08359.90.13476460232511675i3
1.010.0-256.14-521.08342.880.144256168089653i3
.....................
86.051.0-10.976.72-437.440.31115821719070447dc
86.052.0-10.976.72-444.450.3120262572290038dc
86.053.0-10.976.72-451.460.31244696673740874dc
86.054.0-10.976.72-458.470.3108843832344346dc
86.055.0-10.976.72-465.480.30803064350541054dc
86.056.0-10.976.72-472.490.30491330061603933dc
86.057.0-10.976.72-479.490.30094017032486026dc
86.058.0-10.976.72-486.50.2964800387830281dc
86.059.0-10.976.72-493.510.2915809488737785dc
86.060.0-10.976.72-500.830.2858211445129103dc
" - ], - "text/plain": [ - "\n", - " str i x y z effvol type \n", - "float32 float32 float64 float64 float64 float64 bytes2\n", - "------- ------- ------- ------- ------- ------------------- ------\n", - " 1.0 1.0 -256.14 -521.08 496.07 0.14061218768974065 i3\n", - " 1.0 2.0 -256.14 -521.08 479.05 0.15195632747592844 i3\n", - " 1.0 3.0 -256.14 -521.08 462.03 0.1680922220166442 i3\n", - " 1.0 4.0 -256.14 -521.08 445.01 0.17294657931248547 i3\n", - " 1.0 5.0 -256.14 -521.08 427.99 0.16979112735610763 i3\n", - " 1.0 6.0 -256.14 -521.08 410.97 0.1500592745094757 i3\n", - " 1.0 7.0 -256.14 -521.08 393.95 0.12795153280329327 i3\n", - " 1.0 8.0 -256.14 -521.08 376.92 0.12487149756118941 i3\n", - " 1.0 9.0 -256.14 -521.08 359.9 0.13476460232511675 i3\n", - " 1.0 10.0 -256.14 -521.08 342.88 0.144256168089653 i3\n", - " ... ... ... ... ... ... ...\n", - " 86.0 51.0 -10.97 6.72 -437.44 0.31115821719070447 dc\n", - " 86.0 52.0 -10.97 6.72 -444.45 0.3120262572290038 dc\n", - " 86.0 53.0 -10.97 6.72 -451.46 0.31244696673740874 dc\n", - " 86.0 54.0 -10.97 6.72 -458.47 0.3108843832344346 dc\n", - " 86.0 55.0 -10.97 6.72 -465.48 0.30803064350541054 dc\n", - " 86.0 56.0 -10.97 6.72 -472.49 0.30491330061603933 dc\n", - " 86.0 57.0 -10.97 6.72 -479.49 0.30094017032486026 dc\n", - " 86.0 58.0 -10.97 6.72 -486.5 0.2964800387830281 dc\n", - " 86.0 59.0 -10.97 6.72 -493.51 0.2915809488737785 dc\n", - " 86.0 60.0 -10.97 6.72 -500.83 0.2858211445129103 dc" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "doms = ic86.doms_table()\n", + "doms = ic86.get_doms_table()\n", "doms" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "window.mpl = {};\n", - "\n", - "\n", - "mpl.get_websocket_type = function() {\n", - " if (typeof(WebSocket) !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof(MozWebSocket) !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert('Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.');\n", - " };\n", - "}\n", - "\n", - "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = (this.ws.binaryType != undefined);\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById(\"mpl-warnings\");\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent = (\n", - " \"This browser does not support binary websocket messages. \" +\n", - " \"Performance may be slow.\");\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = $('
');\n", - " this._root_extra_style(this.root)\n", - " this.root.attr('style', 'display: inline-block');\n", - "\n", - " $(parent_element).append(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", - " fig.send_message(\"send_image_mode\", {});\n", - " if (mpl.ratio != 1) {\n", - " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", - " }\n", - " fig.send_message(\"refresh\", {});\n", - " }\n", - "\n", - " this.imageObj.onload = function() {\n", - " if (fig.image_mode == 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function() {\n", - " fig.ws.close();\n", - " }\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "}\n", - "\n", - "mpl.figure.prototype._init_header = function() {\n", - " var titlebar = $(\n", - " '
');\n", - " var titletext = $(\n", - " '
');\n", - " titlebar.append(titletext)\n", - " this.root.append(titlebar);\n", - " this.header = titletext[0];\n", - "}\n", - "\n", - "\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._init_canvas = function() {\n", - " var fig = this;\n", - "\n", - " var canvas_div = $('
');\n", - "\n", - " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", - "\n", - " function canvas_keyboard_event(event) {\n", - " return fig.key_event(event, event['data']);\n", - " }\n", - "\n", - " canvas_div.keydown('key_press', canvas_keyboard_event);\n", - " canvas_div.keyup('key_release', canvas_keyboard_event);\n", - " this.canvas_div = canvas_div\n", - " this._canvas_extra_style(canvas_div)\n", - " this.root.append(canvas_div);\n", - "\n", - " var canvas = $('');\n", - " canvas.addClass('mpl-canvas');\n", - " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", - "\n", - " this.canvas = canvas[0];\n", - " this.context = canvas[0].getContext(\"2d\");\n", - "\n", - " var backingStore = this.context.backingStorePixelRatio ||\n", - "\tthis.context.webkitBackingStorePixelRatio ||\n", - "\tthis.context.mozBackingStorePixelRatio ||\n", - "\tthis.context.msBackingStorePixelRatio ||\n", - "\tthis.context.oBackingStorePixelRatio ||\n", - "\tthis.context.backingStorePixelRatio || 1;\n", - "\n", - " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband = $('');\n", - " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", - "\n", - " var pass_mouse_events = true;\n", - "\n", - " canvas_div.resizable({\n", - " start: function(event, ui) {\n", - " pass_mouse_events = false;\n", - " },\n", - " resize: function(event, ui) {\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " stop: function(event, ui) {\n", - " pass_mouse_events = true;\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " });\n", - "\n", - " function mouse_event_fn(event) {\n", - " if (pass_mouse_events)\n", - " return fig.mouse_event(event, event['data']);\n", - " }\n", - "\n", - " rubberband.mousedown('button_press', mouse_event_fn);\n", - " rubberband.mouseup('button_release', mouse_event_fn);\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband.mousemove('motion_notify', mouse_event_fn);\n", - "\n", - " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", - " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", - "\n", - " canvas_div.on(\"wheel\", function (event) {\n", - " event = event.originalEvent;\n", - " event['data'] = 'scroll'\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " mouse_event_fn(event);\n", - " });\n", - "\n", - " canvas_div.append(canvas);\n", - " canvas_div.append(rubberband);\n", - "\n", - " this.rubberband = rubberband;\n", - " this.rubberband_canvas = rubberband[0];\n", - " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", - " this.rubberband_context.strokeStyle = \"#000000\";\n", - "\n", - " this._resize_canvas = function(width, height) {\n", - " // Keep the size of the canvas, canvas container, and rubber band\n", - " // canvas in synch.\n", - " canvas_div.css('width', width)\n", - " canvas_div.css('height', height)\n", - "\n", - " canvas.attr('width', width * mpl.ratio);\n", - " canvas.attr('height', height * mpl.ratio);\n", - " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", - "\n", - " rubberband.attr('width', width);\n", - " rubberband.attr('height', height);\n", - " }\n", - "\n", - " // Set the figure to an initial 600x600px, this will subsequently be updated\n", - " // upon first draw.\n", - " this._resize_canvas(600, 600);\n", - "\n", - " // Disable right mouse context menu.\n", - " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", - " return false;\n", - " });\n", - "\n", - " function set_focus () {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('
');\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " // put a spacer in here.\n", - " continue;\n", - " }\n", - " var button = $('