{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Implementation Inspection\n", "\n", ".. contents:: :local:\n", "\n", "In previous tutorials, we've taken a pragmatic approach to csky usage, demonstrating how to accomplish various analysis tasks. Here, we'll look at how to access csky's implementation details." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "import histlite as hl\n", "import csky as cy\n", "\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/mnt/lfs7/user/ssclafani/software/external/csky/csky/plotting.py:92: MatplotlibDeprecationWarning: Support for setting the 'text.latex.preamble' or 'pgf.preamble' rcParam to a list of strings is deprecated since 3.3 and will be removed two minor releases later; set it to a single string instead.\n", " r'\\SetSymbolFont{operators} {sans}{OT1}{cmss} {m}{n}'\n" ] } ], "source": [ "cy.plotting.mrichman_mpl()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For these tests, let's work with PS-7yr." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Setting up Analysis for:\n", "IC40, IC59, IC79, IC86_2011, IC86_2012_2014\n", "Setting up IC40...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/IC40_MC.npy ...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/IC40_exp.npy ...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/GRL/IC40_exp.npy ...\n", "Energy PDF Ratio Model...\n", " * gamma = 4.0000 ...\n", "Signal Acceptance Model...\n", " * gamma = 4.0000 ...\n", "Setting up IC59...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/IC59_MC.npy ...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/IC59_exp.npy ...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/GRL/IC59_exp.npy ...\n", "Energy PDF Ratio Model...\n", " * gamma = 4.0000 ...\n", "Signal Acceptance Model...\n", " * gamma = 4.0000 ...\n", "Setting up IC79...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/IC79_MC.npy ...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/IC79_exp.npy ...\n", "Reading /data/ana/analyses/ps_tracks/version-003-p02/GRL/IC79_exp.npy ...\n", "Energy PDF Ratio Model...\n", " * gamma = 4.0000 ...\n", "Signal Acceptance Model...\n", " * gamma = 1.0000 ..." ] } ], "source": [ "ana_dir = cy.utils.ensure_dir('/data/user/mrichman/csky_cache/ana')\n", "ana = cy.get_analysis(cy.selections.repo, 'version-003-p02', cy.selections.PSDataSpecs.ps_7yr, dir=ana_dir)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis Properties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In various situations, it may be useful to examine the `Analysis` itself. We can find out what \"keys\" are considered easily enough:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Analysis(keys=[IC40, IC59, IC79, IC86_2011, IC86_2012_2014])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ana" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each key corresponds to a `SubAnalysis` instance:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SubAnalysis(key=IC40)\n", "SubAnalysis(key=IC59)\n", "SubAnalysis(key=IC79)\n", "SubAnalysis(key=IC86_2011)\n", "SubAnalysis(key=IC86_2012_2014)\n" ] } ], "source": [ "for a in ana:\n", " print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can access individual `SubAnalysis`s directly:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SubAnalysis(key=IC40)\n", "SubAnalysis(key=IC86_2012_2014)\n", "SubAnalysis(key=IC86_2012_2014)\n" ] } ], "source": [ "print(ana[0])\n", "print(ana[-1])\n", "print(ana['IC86_2012_2014'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we can get a new `Analysis` with a subset of keys like so:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Analysis(keys=[IC40, IC59, IC79, IC86_2011])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ana[:-1] # same as ps_4yr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each `SubAnalysis` holds references to the data, MC (signal Monte Carlo), GRL (Good Run List), background space PDF, energy PDF ratio model, and signal acceptance parameterization:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Events(338590 items | columns: azimuth, dec, energy, event, log10energy, mjd, ra, run, sigma, sindec, subevent)\n", "Events(6807254 items | columns: azimuth, dec, energy, event, log10energy, mjd, ra, run, sigma, sindec, subevent, xdec, xra, true_dec, true_energy, true_ra, oneweight)\n", "Arrays(3931 items | columns: events, livetime, run, start, stop)\n", "\n", "\n", "\n" ] } ], "source": [ "a = ana[-1]\n", "print(a.data)\n", "print(a.sig)\n", "print(a.grl)\n", "print(a.bg_space_param)\n", "print(a.energy_pdf_ratio_model)\n", "print(a.acc_param)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can look at the keyword arguments used to construct the latter three objects:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'hkw': {'bins': array([-1. , -0.9825 , -0.965 , -0.9475 , -0.93 ,\n", " -0.867 , -0.804 , -0.741 , -0.678 , -0.615 ,\n", " -0.552 , -0.489 , -0.426 , -0.363 , -0.3 ,\n", " -0.26111111, -0.22222222, -0.18333333, -0.14444444, -0.10555556,\n", " -0.06666667, -0.02777778, 0.01111111, 0.05 , 0.10277778,\n", " 0.15555556, 0.20833333, 0.26111111, 0.31388889, 0.36666667,\n", " 0.41944444, 0.47222222, 0.525 , 0.57777778, 0.63055556,\n", " 0.68333333, 0.73611111, 0.78888889, 0.84166667, 0.89444444,\n", " 0.94722222, 1. ])}} \n", "\n", " {'hkw': {'bins': (array([-1. , -0.9825 , -0.965 , -0.9475 , -0.93 ,\n", " -0.867 , -0.804 , -0.741 , -0.678 , -0.615 ,\n", " -0.552 , -0.489 , -0.426 , -0.363 , -0.3 ,\n", " -0.26111111, -0.22222222, -0.18333333, -0.14444444, -0.10555556,\n", " -0.06666667, -0.02777778, 0.01111111, 0.05 , 0.10277778,\n", " 0.15555556, 0.20833333, 0.26111111, 0.31388889, 0.36666667,\n", " 0.41944444, 0.47222222, 0.525 , 0.57777778, 0.63055556,\n", " 0.68333333, 0.73611111, 0.78888889, 0.84166667, 0.89444444,\n", " 0.94722222, 1. ]), array([1. , 1.125, 1.25 , 1.375, 1.5 , 1.625, 1.75 , 1.875, 2. ,\n", " 2.125, 2.25 , 2.375, 2.5 , 2.625, 2.75 , 2.875, 3. , 3.125,\n", " 3.25 , 3.375, 3.5 , 3.625, 3.75 , 3.875, 4. , 4.125, 4.25 ,\n", " 4.375, 4.5 , 4.625, 4.75 , 4.875, 5. , 5.125, 5.25 , 5.375,\n", " 5.5 , 5.625, 5.75 , 5.875, 6. , 6.125, 6.25 , 6.375, 6.5 ,\n", " 6.625, 6.75 , 6.875, 7. , 7.125, 7.25 , 7.375, 7.5 , 7.625,\n", " 7.75 , 7.875, 8. , 8.125, 8.25 , 8.375, 8.5 , 8.625, 8.75 ,\n", " 8.875, 9. , 9.125, 9.25 , 9.375, 9.5 ]))}, 'gammas': array([1. , 1.0625, 1.125 , 1.1875, 1.25 , 1.3125, 1.375 , 1.4375,\n", " 1.5 , 1.5625, 1.625 , 1.6875, 1.75 , 1.8125, 1.875 , 1.9375,\n", " 2. , 2.0625, 2.125 , 2.1875, 2.25 , 2.3125, 2.375 , 2.4375,\n", " 2.5 , 2.5625, 2.625 , 2.6875, 2.75 , 2.8125, 2.875 , 2.9375,\n", " 3. , 3.0625, 3.125 , 3.1875, 3.25 , 3.3125, 3.375 , 3.4375,\n", " 3.5 , 3.5625, 3.625 , 3.6875, 3.75 , 3.8125, 3.875 , 3.9375,\n", " 4. ]), 'bg_from_mc_weight': ''} \n", "\n", " {'hkw': {'bins': array([-1. , -0.9825 , -0.965 , -0.9475 , -0.93 ,\n", " -0.867 , -0.804 , -0.741 , -0.678 , -0.615 ,\n", " -0.552 , -0.489 , -0.426 , -0.363 , -0.3 ,\n", " -0.26111111, -0.22222222, -0.18333333, -0.14444444, -0.10555556,\n", " -0.06666667, -0.02777778, 0.01111111, 0.05 , 0.10277778,\n", " 0.15555556, 0.20833333, 0.26111111, 0.31388889, 0.36666667,\n", " 0.41944444, 0.47222222, 0.525 , 0.57777778, 0.63055556,\n", " 0.68333333, 0.73611111, 0.78888889, 0.84166667, 0.89444444,\n", " 0.94722222, 1. ])}, 'gammas': array([1. , 1.0625, 1.125 , 1.1875, 1.25 , 1.3125, 1.375 , 1.4375,\n", " 1.5 , 1.5625, 1.625 , 1.6875, 1.75 , 1.8125, 1.875 , 1.9375,\n", " 2. , 2.0625, 2.125 , 2.1875, 2.25 , 2.3125, 2.375 , 2.4375,\n", " 2.5 , 2.5625, 2.625 , 2.6875, 2.75 , 2.8125, 2.875 , 2.9375,\n", " 3. , 3.0625, 3.125 , 3.1875, 3.25 , 3.3125, 3.375 , 3.4375,\n", " 3.5 , 3.5625, 3.625 , 3.6875, 3.75 , 3.8125, 3.875 , 3.9375,\n", " 4. ])}\n" ] } ], "source": [ "print(a.kw_space_bg, '\\n\\n', a.kw_energy, '\\n\\n', a.kw_acc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There's also some other metadata:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IC86_2012_2014 IC86\\_2012\\_2014 56043.42668248483 57160.03913214595 91452557.81247967\n" ] } ], "source": [ "print(a.key, a.plot_key, a.mjd_min, a.mjd_max, a.livetime)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that `a.plot_key` is valid LaTeX for use in matplotlib labels. Also notice that `livetime` is given in seconds, which is appropriate for many weighting routines. This is inconsistent with the use of days for time PDFs, which is a little ugly, but tolerable, since time-dependent analyses rely on the GRL which holds `livetime` in days:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \n", " \n", " \n", " \n", " \n", "
eventslivetimerunstartstop
01080.33358812002856043.42312556043.756713
11030.33341412002956043.75721156044.090625
21000.33343712003056044.09129656044.424734
3930.28068812015656062.42071256062.701400
4910.33332912015756062.70232156063.035649
\n", "
" ], "text/plain": [ " events livetime run start stop\n", "0 108 0.333588 120028 56043.423125 56043.756713\n", "1 103 0.333414 120029 56043.757211 56044.090625\n", "2 100 0.333437 120030 56044.091296 56044.424734\n", "3 93 0.280688 120156 56062.420712 56062.701400\n", "4 91 0.333329 120157 56062.702321 56063.035649" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a.grl.as_dataframe.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By the way, this trick is useful for examining any `Arrays`, `Events`, or `Sources` instance: convert to a Pandas DataFrame, and exploit its cute tabular displays:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
azimuthdecenergyeventlog10energymjdrarunsigmasindecsubevent
03.357385-0.99332388445.0546888396344.94667356043.4266824.6416961200280.003491-0.8378450
14.714813-0.1391474839.03710929573433.68475956043.4356203.3405781200280.006210-0.1386980
20.0694050.146224636.11132831222552.80353356043.4363191.7072081200280.0169940.1457030
35.216482-0.911558110068.14843834896575.04166256043.4378712.8530881200280.003491-0.7904590
44.9326520.4033031070.04748535786433.02940356043.4382473.1392861200280.0093310.3924592
\n", "
" ], "text/plain": [ " azimuth dec energy event log10energy mjd \\\n", "0 3.357385 -0.993323 88445.054688 839634 4.946673 56043.426682 \n", "1 4.714813 -0.139147 4839.037109 2957343 3.684759 56043.435620 \n", "2 0.069405 0.146224 636.111328 3122255 2.803533 56043.436319 \n", "3 5.216482 -0.911558 110068.148438 3489657 5.041662 56043.437871 \n", "4 4.932652 0.403303 1070.047485 3578643 3.029403 56043.438247 \n", "\n", " ra run sigma sindec subevent \n", "0 4.641696 120028 0.003491 -0.837845 0 \n", "1 3.340578 120028 0.006210 -0.138698 0 \n", "2 1.707208 120028 0.016994 0.145703 0 \n", "3 2.853088 120028 0.003491 -0.790459 0 \n", "4 3.139286 120028 0.009331 0.392459 2 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# first few data events\n", "a.data.as_dataframe.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
azimuthdecenergyeventlog10energymjdoneweightrarunsigmasindecsubeventtrue_dectrue_energytrue_raxdecxra
01.279314-0.2283471.360283e+093859.13363055927.0196763.574832e+112.15994311070001610.085668-0.2263680-0.2270761.128383e+082.230105-0.001811-0.068338
15.496354-0.2645531.694245e+091429.22897655927.0196763.858964e+124.22608911070005980.018461-0.2614780-0.2812377.236306e+084.4686420.008842-0.233963
21.602643-0.9587881.012432e+093899.00536655927.0196762.402457e+121.83661511070023070.018874-0.8184960-0.9851838.687488e+081.8085500.0262070.016128
34.980302-0.8992751.076434e+09339.03198755927.0196762.874464e+124.74214111070025760.061426-0.7828760-0.8367279.506101e+084.833335-0.064472-0.056809
41.666342-0.2813351.094350e+092609.03915655927.0196764.426455e+121.77291611070033980.038012-0.2776380-0.2341727.059776e+081.705232-0.0476740.065093
55.639177-0.1479221.403493e+091339.14721055927.0196763.658860e+124.08326611070038390.031450-0.1473830-0.1448474.670470e+084.120126-0.003172-0.036458
\n", "
" ], "text/plain": [ " azimuth dec energy event log10energy mjd \\\n", "0 1.279314 -0.228347 1.360283e+09 385 9.133630 55927.019676 \n", "1 5.496354 -0.264553 1.694245e+09 142 9.228976 55927.019676 \n", "2 1.602643 -0.958788 1.012432e+09 389 9.005366 55927.019676 \n", "3 4.980302 -0.899275 1.076434e+09 33 9.031987 55927.019676 \n", "4 1.666342 -0.281335 1.094350e+09 260 9.039156 55927.019676 \n", "5 5.639177 -0.147922 1.403493e+09 133 9.147210 55927.019676 \n", "\n", " oneweight ra run sigma sindec subevent true_dec \\\n", "0 3.574832e+11 2.159943 1107000161 0.085668 -0.226368 0 -0.227076 \n", "1 3.858964e+12 4.226089 1107000598 0.018461 -0.261478 0 -0.281237 \n", "2 2.402457e+12 1.836615 1107002307 0.018874 -0.818496 0 -0.985183 \n", "3 2.874464e+12 4.742141 1107002576 0.061426 -0.782876 0 -0.836727 \n", "4 4.426455e+12 1.772916 1107003398 0.038012 -0.277638 0 -0.234172 \n", "5 3.658860e+12 4.083266 1107003839 0.031450 -0.147383 0 -0.144847 \n", "\n", " true_energy true_ra xdec xra \n", "0 1.128383e+08 2.230105 -0.001811 -0.068338 \n", "1 7.236306e+08 4.468642 0.008842 -0.233963 \n", "2 8.687488e+08 1.808550 0.026207 0.016128 \n", "3 9.506101e+08 4.833335 -0.064472 -0.056809 \n", "4 7.059776e+08 1.705232 -0.047674 0.065093 \n", "5 4.670470e+08 4.120126 -0.003172 -0.036458 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# highest energy sig MC events\n", "sig = a.sig\n", "sig[sig.log10energy > 9].as_dataframe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a quick aside, you may be wondering why, then, do the `Arrays` etc. classes even exist? The main reason is full-speed computation without writing `(whatever).values` all over the place:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.37 ms ± 94.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "# Arrays\n", "n, N = 100000, len(a.data)\n", "%timeit ignore = np.sin(a.data.dec[np.random.randint(N, size=n)])" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "171 ms ± 17.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" ] } ], "source": [ "# DataFrame\n", "df_data = a.data.as_dataframe\n", "%timeit ignore = np.sin(df_data.dec[np.random.randint(N, size=n)])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.39 ms ± 57.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "# DataFrame, accessing .values\n", "df_data = a.data.as_dataframe\n", "%timeit ignore = np.sin(df_data.dec.values[np.random.randint(N, size=n)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There may be ways to make `DataFrame`s fast enough for our applications, but we're already doing lots of custom array manipulation, so it's easier to use something that doesn't detour through Pandas's concept of data `Series`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis summary table recipies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here are some snippets for quickly getting summary info on your datasets:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Livetimes:\n", "IC40 54562.379113 54971.132791 (376.36 days)\n", "IC59 54971.158700 55347.275122 (353.58 days)\n", "IC79 55348.314439 55694.405063 (316.05 days)\n", "IC86_2011 55694.991910 56062.416216 (332.96 days)\n", "IC86_2012_2014 56043.426682 57160.039132 (1058.48 days)\n" ] } ], "source": [ "print('Livetimes:')\n", "for a in ana:\n", " print('{:20} {:.6f} {:.6f} ({:.2f} days)'.format(\n", " a.key, a.mjd_min, a.mjd_max, a.livetime/86400))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Event Statistics:\n", "IC40 36900 events in 1420 runs (621858 MC events)\n", "IC59 107011 events in 1238 runs (1617012 MC events)\n", "IC79 93133 events in 1049 runs (1998573 MC events)\n", "IC86_2011 136244 events in 1081 runs (1242934 MC events)\n", "IC86_2012_2014 338590 events in 3931 runs (6807254 MC events)\n" ] } ], "source": [ "print('Event Statistics:')\n", "for a in ana:\n", " print('{:20} {:6} events in {} runs ({} MC events)'.format(\n", " a.key, len(a.data), len(a.grl), len(a.sig)))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of sindec and log10energy bins:\n", "IC40 30 x 56\n", "IC59 52 x 60\n", "IC79 49 x 56\n", "IC86_2011 28 x 72\n", "IC86_2012_2014 41 x 68\n" ] } ], "source": [ "print('Number of sindec and log10energy bins:')\n", "for a in ana:\n", " eprm = a.energy_pdf_ratio_model\n", " print('{:20} {:2} x {:2}'.format(\n", " a.key, *eprm.h_bg.n_bins))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "csky could, in principle, include functions to produce these tables. However, it's probably best to simply understand enough of (1) the `SubAnalysis` internals, and (2) `str.format()`, such that you can produce your own tables on an as-needed basis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Per-trial details" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First things first: let's get a simple time-integrating trial runner:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "src = cy.sources(180, 0, deg=True)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "tr = cy.get_trial_runner(src=src, ana=ana)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We already saw in [Getting started with csky](01_getting_started.html) that we can get the trial data:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "([[Events(3635 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec),\n", " Events(8 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)],\n", " [Events(10335 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec),\n", " Events(15 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)],\n", " [Events(8976 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec),\n", " Events(4 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)],\n", " [Events(12322 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec),\n", " Events(18 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)],\n", " [Events(26507 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec),\n", " Events(55 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)]],\n", " [33265, 96676, 84157, 123922, 312083])" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trial = tr.get_one_trial(n_sig=100, poisson=False, seed=1)\n", "tuple(trial)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And that we can construct a likelihood evaluator (for multi-dataset analysis, a `MultiLLHEvaluator`) either directly or from this trial:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(309.90800833895474, {'gamma': 2.0897522380963123, 'ns': 105.15666984028661})" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L = tr.get_one_llh(n_sig=100, poisson=False, seed=1)\n", "L.fit(**tr.fitter_args)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(309.90800833895474, {'gamma': 2.0897522380963123, 'ns': 105.15666984028661})" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L = tr.get_one_llh_from_trial(trial)\n", "L.fit(**tr.fitter_args)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Between `trial` and `L`, we have access to all the likelihood implementation details. We discuss these in turn, below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Trial data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's talk a little more about the `trial` here. This is an instance of `Trial`, which is a \"named tuple\" (see `collections.namedtuple`). Within csky, it can be used interchangeably with a standard 2-tuple (that is, a tuple with 2 elements).\n", "\n", "The first element is a sequence with one list per dataset. Each list includes at least the background events and possibly also some signal events:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Events(3635 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "Events(8 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "\n", "Events(10335 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "Events(15 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "\n", "Events(8976 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "Events(4 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "\n", "Events(12322 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "Events(18 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "\n", "Events(26507 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "Events(55 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "\n" ] } ], "source": [ "for evs in trial.evss:\n", " for ev in evs:\n", " print(ev)\n", " print()" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trial.evss is trial[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that the signal events are split among the datasets probabilistically in accordance with the relative signal acceptance of each dataset. For reference, those relative weights are:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.08246462 0.13296804 0.15242021 0.17622968 0.45591745]\n" ] } ], "source": [ "print(tr.sig_inj_probs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which are just a sum-to-one normalized version of the total signal acceptances:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[9.97411814e+08 1.60825199e+09 1.84352646e+09 2.13150271e+09\n", " 5.51433365e+09]\n", "[0.08246462 0.13296804 0.15242021 0.17622968 0.45591745]\n" ] } ], "source": [ "print(tr.sig_inj_accs)\n", "print(tr.sig_inj_accs / tr.sig_inj_acc_total)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Anyways, we see that the background `Events` are only a small subset of the total datasets:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IC40 evaluating on 3635 of 36900 events\n", "IC59 evaluating on 10335 of 107011 events\n", "IC79 evaluating on 8976 of 93133 events\n", "IC86_2011 evaluating on 12322 of 136244 events\n", "IC86_2012_2014 evaluating on 26507 of 338590 events\n" ] } ], "source": [ "for (j, a) in enumerate(ana):\n", " print('{:20} evaluating on {:5} of {:6} events'.format(\n", " a.key, len(trial[0][j][0]), len(a.data)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The discrepancy is thanks to csky's aggressively optimized \"band\" cuts, where events more than 5σ away from the source in declination are not included — cutting based on per-event angular error σ. The `LLHEvaluator`s need to know how many events were excluded by these cuts, and this info is stored in `trial.n_exs` (as in, plural of \"n excluded\"; same as `trial[1]`):" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[33265, 96676, 84157, 123922, 312083]\n", "[33265, 96676, 84157, 123922, 312083]\n" ] } ], "source": [ "print(trial.n_exs)\n", "print(trial[1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's confirm that these numbers agree with the missing events listed above:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IC40 36900 - 3635 = 33265 | compare with 33265\n", "IC59 107011 - 10335 = 96676 | compare with 96676\n", "IC79 93133 - 8976 = 84157 | compare with 84157\n", "IC86_2011 136244 - 12322 = 123922 | compare with 123922\n", "IC86_2012_2014 338590 - 26507 = 312083 | compare with 312083\n" ] } ], "source": [ "for (j, a) in enumerate(ana):\n", " Nj, nj = len(a.data), len(trial[0][j][0])\n", " print('{:20} {:6} - {:5} = {:6} | compare with {:6}'.format(\n", " a.key, Nj, nj, Nj - nj, trial[1][j]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For now, just take my word for it that even though these are calculable in this case, it's important that `trial.n_exs` keeps track of these numbers." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the `Events` objects, we can actually trace the origin of each individual event:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Events(3635 items | columns: dec, idx, inj, log10energy, ra, sigma, sindec)\n", "\n" ] } ], "source": [ "print(trial.evss[0][0])\n", "print(trial.evss[0][0].inj[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, for example, we find that... well, the IC40 `DataInjector` had been used. To confirm:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "True\n" ] } ], "source": [ "print(tr.bg_injs[0])\n", "print(tr.bg_injs[0] is trial.evss[0][0].inj[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, we can check this for all background and signal events:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IC40 bg matches? True\n", "IC40 sig matches? True\n", "IC59 bg matches? True\n", "IC59 sig matches? True\n", "IC79 bg matches? True\n", "IC79 sig matches? True\n", "IC86_2011 bg matches? True\n", "IC86_2011 sig matches? True\n", "IC86_2012_2014 bg matches? True\n", "IC86_2012_2014 sig matches? True\n" ] } ], "source": [ "for (i, a) in enumerate(ana):\n", " print('{:20} bg matches? {}'.format(a.key, tr.bg_injs[i] is trial.evss[i][0].inj[0]))\n", " print('{:20} sig matches? {}'.format(a.key, tr.sig_injs[i] is trial.evss[i][1].inj[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can quickly sanity check our signal events. For example, are they all in the right place spatially?" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "all_sig_ev = cy.utils.Arrays.concatenate([evs[1] for evs in trial.evss])\n", "hl.plot2d(hl.kde((all_sig_ev.ra_deg, all_sig_ev.dec_deg), range=((178, 182), (-2, 2))))\n", "plt.gca().set_aspect('equal')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that if the above syntax doesn't work, your histlite is probably out of date. Install the latest from PyPI -- in your terminal,\n", "\n", " pip uninstall histlite\n", " pip install --user histlite" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alright, let's move on to the actual likelihood." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PDFs and Likelihood" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The likelihood is expressed as a `MultiLLHEvaluator`," ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "which is essentially a sequence of `LLHEvaluator`, plus some extra plumbing for multi-dataset analysis:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n", "\n", "\n" ] } ], "source": [ "for l in L:\n", " print(l)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From either a `TrialRunner` or a `MultiLLHEvaluator`, we can access the LLH model, PDF ratio models (parameterizations, etc.), and evaluators (number crunchers) using `cy.inspect`. Here are some PDF ratio model examples, using index `-1`, corresponding to the 2012-2014 dataset:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "From the TrialRunner:\n", "\n", "\n", "\n", "\n" ] } ], "source": [ "print('From the TrialRunner:')\n", "print(cy.inspect.get_llh_model(tr, -1))\n", "print(cy.inspect.get_pdf_ratio_model(tr, -1))\n", "print(cy.inspect.get_space_model(tr, -1))\n", "print(cy.inspect.get_energy_model(tr, -1))" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "From the MultiLLHEvaluator:\n", "\n", "\n", "\n", "\n" ] } ], "source": [ "print('From the MultiLLHEvaluator:')\n", "print(cy.inspect.get_llh_model(L, -1))\n", "print(cy.inspect.get_pdf_ratio_model(L, -1))\n", "print(cy.inspect.get_space_model(L, -1))\n", "print(cy.inspect.get_energy_model(L, -1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since this is a time-integrating setup, we won't be able to find a time PDF ratio model:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "time model not found", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# would work if we were doing time-dep analysis!\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mcy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_time_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/mnt/lfs3/user/mrichman/software/python/csky/csky/inspect.py\u001b[0m in \u001b[0;36mget_time_model\u001b[0;34m(L, key)\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0macc_model\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime_model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 56\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'time model not found'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_energy_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: time model not found" ] } ], "source": [ "# would work if we were doing time-dep analysis!\n", "cy.inspect.get_time_model(L, -1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we can also get the PDF ratio evaluators, and this is where the interesting work happens:" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n" ] } ], "source": [ "space_eval = cy.inspect.get_space_eval(L, -1, 0) # 0: background events (1 would be for signal events)\n", "energy_eval = cy.inspect.get_energy_eval(L, -1, 0)\n", "print(space_eval)\n", "print(energy_eval)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we won't be able to get a time evaluator:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "time evaluator not found", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# would work if we were doing time-dep analysis!\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mcy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_time_eval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/mnt/lfs3/user/mrichman/software/python/csky/csky/inspect.py\u001b[0m in \u001b[0;36mget_time_eval\u001b[0;34m(L, key, i)\u001b[0m\n\u001b[1;32m 89\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0meval\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 91\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'time evaluator not found'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 92\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 93\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mget_energy_eval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mL\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: time evaluator not found" ] } ], "source": [ "# would work if we were doing time-dep analysis!\n", "cy.inspect.get_time_eval(L, -1, 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From here, we can access the actual PDF values that go into the likelihood. These evaluators act as functions when called. The allowed argments are parameters that go into the fit, and they are accepted only as keyword arguments. Each evaluator only *strictly* requires parameters it cares about — meanwhile, they all ignore parameters that they do not depend on. When called, two arrays are returned: the ordinary $S/B$, and the signal subtraction $\\tilde{S}/B$, where $\\tilde{S}$ is the right-ascension-averaged signal PDF. Note that $S$ and $\\tilde{S}$ differ only for space." ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.88494265e+00 4.63178921e+00 6.74842346e+02 5.78967374e-05]\n", "[1.53234816 0.25578275 9.74167442 0.71069479]\n", "[ 0.61933755 0.61088566 4.10332275 82.95478122]\n", "[ 0.61933755 0.61088566 4.10332275 82.95478122]\n" ] } ], "source": [ "print(space_eval()[0][:4])\n", "print(space_eval()[1][:4])\n", "print(energy_eval(gamma=2)[0][:4])\n", "print(energy_eval(gamma=2)[1][:4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, for example, we can plot the space and energy PDF ratio distributions, where we'll consider $E^{-2}$ for the latter:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "SB_space = space_eval()[0]\n", "SB_energy = energy_eval(gamma=2)[0]" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(1, 2, figsize=(7,3))\n", "hl.plot1d(axs[0], hl.hist(SB_space, bins=50, log=True), crosses=True)\n", "hl.plot1d(axs[1], hl.hist(SB_energy, bins=50, log=True), crosses=True)\n", "for ax in axs:\n", " ax.loglog()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We should check how many values we got:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(879, 879, 26507, 338590)" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SB_space.size, SB_energy.size, len(trial.evss[-1][0]), len(ana[-1].data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok — it's natural that the PDF ratio arrays are aligned with each other. But why so many fewer events than in the already-cut trial data? This is because csky applies a \"box\" cut that is equally aggressive as the earlier \"band\" cut, but this time in terms of distance to the source in right ascension." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we want to evaluate on specific `Events` (maybe imported from skylab or hand-constructed for some test) we can instead work with fresh evaluators constructed on the fly. Notice that here the \"band\" cut is already reflected in the `Events` object, but the \"box\" cut is _not_ applied:" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "26507\n" ] } ], "source": [ "# 2012-2014 background events\n", "ev = trial.evss[-1][0]\n", "space_model = cy.inspect.get_space_model(tr)\n", "# space_model(ev) -> PointSourceSpacePDFRatioEvaluator\n", "print(space_model(ev)()[0].size)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The \"box\" cut is _computed_ by `PointSourceSpacePDFRatioEvaluator`, but is not _applied_ before results are requested. Application of cuts is managed by `MultiPDFRatioEvaluator` in a way that preserves array alignment across the space, energy, and time PDFs. Internally, that looks something like this:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "879" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# get the evaluator for 2012-2014 background events\n", "se = space_model(ev)\n", "# finalize the event list\n", "kept_i_ev = se.get_kept_i_ev()\n", "se.finalize_i_ev(kept_i_ev)\n", "# now we see the box cut has been applied\n", "se()[0].size" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For detailed low-level studies, it can be useful to evaluate the PDFs on every single event, especially if comparing with another tool (e.g. skylab, skyllh) where array alignment will be difficult after applying cuts. For this, however, we need a slightly different trial runner configuration:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [], "source": [ "tr_uncut = cy.get_trial_runner(src=src, ana=ana, cut_n_sigma=np.inf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This trial runner will, of course, be much slower to use, but now it will be possible to examine the response to every event. Here, we'll include signal events on the plot:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "L_uncut = tr_uncut.get_one_llh(n_sig=1000, poisson=False, seed=1)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAFCCAYAAAAZlqDlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAASdAAAEnQB3mYfeAAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dcWxb57nn+R9rV05i1yUpRUXSxEopxXtbeTKp1OyFW9zbuyPJ7sYT25gVnbFbzWIXEwqQFWTkBUQEg92h/6SBtZGNrB0zC0wB9cZtxQVsdRqMbWmB3p1b751Imsxda2dvLJ+JXE92aovUmdROKlW53D8cUjoSaYniIQ8Pz/cDHBTnJX34+Fh5++jlc57Xl8lkMgIAAAA87EtOBwAAAAA4jaQYAAAAnkdSDAAAAM8jKQYAAIDnkRQDAADA80iKAQAA4HkkxQAAAPA8kmIAAAB4HkkxAAAAPI+kGAAAAJ633ekAtsI0Tf3qV7/Ss88+qx07djgdDgDkLC4u6je/+Y2+//3vy+/3Ox1O2TEfA6hGW5mLXZkU/+pXv9LRo0edDgMACrp06ZKOHDnidBhlx3wMoJoVMxe7Mil+9tlnJT38i7a0tDgcDdzu8OHDkqSxsTGHI0EtmJ2d1dGjR3PzVK2KxWI6ffp07pz5GKViLoadtjIXuzIpzn5F19LSotbWVoejgds99thjksTPEmxV66UEsVhMsVhMMzMz2rdvH/MxSsZcjHIoZi7mQTsAAAB4HkkxAAAAPI+kGAAAAJ5HUgwAAADPc+WDdoCdZmZmnA4BADyPuRhOY6UYAAAAnkdSDM+7cuWKrly54nQYAOBpzMVwWsXLJ6LRqMbHx2Wapnp7ezU4OFjpEACLU6dOSeKrO6AYazfvAIo1f39R6QdLufN/8j/F5Vu6r//n4EEHo4KXVTQpTiaTMk1TU1NTkqTm5ma1tbWps7OzkmEAAEq0dvMOoFgj1+f01sTNlYH/6n/Ql//mmnMBwfO2XD4xPT2t5ubmvK8lEgkFAgEFAgH19vbmxjs7OxWPxy3n09PTWw0BwCYsp1K69/ZQ7lhOpZwOCQCAqlN0UnzmzBn5fD6Fw2EZhrHu9WQyqWg0qomJCU1NTWlyclLhcFiS5Pf75ff7c+8dHx9nlRgos8/Tac2fP587Pk+nnQ4JAICqU3T5xODgoAYHB5VMJnPJ7mrRaFTxeFxtbW2SpNHRUTU3N8s0TUtCHI1G1d3dnXsfAADwjp79TTr0wlO58yOHj8i3dN/BiOB1ttYUm6YpwzAsq7+hUEh+v1/j4+Pq7u6W9DAhbm5uViQSsfPjgS0pVAZUC5ZTKS3N3baMLc3d1rZgUNvr6x2KCgCkhl071LBrR+78+a/tkrTLuYDgebYmxdlyilAoZBkPhUK513p7exUOhymbQNUYGxtzOoSyWXj3oubPn7eM3envV8PJk3ry9X6HogKA9Wp5LoY72JoUpwvUKgaDQaVSKSWTSSUSCY2Pj+de26gt2927d3Xv3j3L2OzsrD0BA4BHNTc3W0raJiYmLOcA4DUVbcnW3d2tTCZT1J8ZHh6mFybK6vwXK6knT550OBKgctLptG7duuV0GEAOczGcZuuOdsFgMO94Op1W/RbrF/v6+nTjxg3LcenSpVLCBCyGh4c1PDzsdBhlEThxXM8MDVnGnhkaUuDEcYcigt220h4TqEa1PBfDHWxNirO1xGtbtRmGseWv5RobG9Xa2mo5WlpaSo4V8ILt9fWqa9pjGatr2sNDdjWglPaY0sMHo8PhsNrb2xWNRisZOgBUJVuTYr/fr1AopGQymRszDEOmaerYsWN2fhQAeNrg4KAymYxlQ6TVVrfHDIVCGh0dze0qKkmRSETvvPOOpqamlEwmLc96AHabv7+oD3/7O8sxf3/R6bAAC9triqPRqHp7e9XZ2Sm/369wOKzu7m4e4ACACtlMe8wLFy7kXmtra9P09DRdgVA267Z0lvRGx/Ma6NrrUETAekUnxYlEwlKb5vP5JCn3AF0kEpFpmuro6JBpmuru7tbo6KgtwcZiMR66A4q0LRhUw6oHV7YFg1pOpbTw7sXcWODEcUoqashG7THHx8cVDAZzmyeNj49TcwzA84pOiiORyIabbmR3vbNbLBZTLBbTzMyM9u3bZ/v14U0HDhxwOoSy2l5fv64n8eLNm5b+xbt/cJCkuIZs1B7zO9/5jl577TWZpql0Oq14PL6pVWJaZKKcan0uRvWraEs2oBqdO3fO6RCAivL7/Vv6Bo8WmdiqtVs6S1JwZ53lnLkYTiMpBjxo+YuHrbLY+rm2lKM9pvSwRebqDhbSw5Xio0ePbvma8Ia1WzoD1cjW7hOAGw0MDGhgYMDpMCrqk1++Zzm/099vqTGGu5WjPaZkbZE5Ojqqffv2kRDDNl6ci1FdSIrheVevXtXVq1edDgOwTSXaY8ZiMWUyGd24ccOW6wHMxXCaq5LiWCwmn8/HQ3ZAAcuplO69PZQ7llMpp0OCQ6LRqKLRqKanp2UYhu3tMZmPAdQa1yXFrExU1vz9RZ279mHuoNl6dfs8ndb8+fO54/MCXQh2H3rZcs7Wz+6TSCRyO9pJD9tjZltkSg87BcXjcXV0dKi5uTm3gYddmI8B1BpXJcWovPSDJb01cTN3pB8sOR0SbLB9zWohWz+7TyQSUSaTWXesNjg4qIWFBWUyGVsTYgCoRSTFAICiUT4BoNbQkq1KzN9f1Mj1udx5z/4m2tdUSF9fn9Mh2GI5ldLS3G3rmGmqmJ8idrrDZrGZEuxWK3Mx3IukuEpkyxSyDr3wlONJ8fz9RX00/8Ay9tH8AwV31jkem51OrtoC2c0W3r1o2aVOeth6bedLL617b76tn6WVmuQsdroDUCm1MhfDvUiKUdDI9TlLoi5JkZEpvdHxvAa69joUFeyQb+tnAAC8zFVJcSwWq9otRitZ/kCphb0OHz4sSRobG3M4EsA9qnk+hjsxF8NprnrQrppbAJXapWHhU+v7P5p/ULD9GR0h7HXr1i3dunXL6TBKFjhxXM8MDVnG1rZee5RCNclAPtU8H8OdamUuhnu5KimuZb/44GPLeWRkyrIa7ISe/U1K9LRbxhI97erZ3+RQRHiU7fX1qmvaYx0rYqOGhXcv6k6/taRi7XbQAADUKpJiFNSwa4eea9hpGXuuYSelGgAAoOaQFLtMoY4Q7DQHoJLoUwyg1ngyKbZ762I7EtVXXnzacl6oTGHk+pwiI1OWsWootUB1yLZayx7ZVmubUWpNMryFmmIAtcZV3SfsUmpP4LXdHz5dWtY7/+d/sLyn2NZlgSfqLOfZMoV8nwV7nT171ukQbFNKq7VSa5IBoBS1NBfDnTyZFJdqbVL9oz/e84h3u+ez8gnurNMbHc9bzqu1JdxW4zp48GA5wwIAbAJzMZzmqqSYvpgPyyz+dO+TlhKKRE+72poCZfm8hl071q12f/jb3+VdaXc6WXZ6V0Cn//5AJTEfA6g1rqoptqOGLV/979oewcV65cWnK9a6LPBEXdV2hHBr/+TW1la1traWfB23/v1XK6UmGd5CTTHsZtdcDGyVq1aK7ZBv6+JffPCx/vgb9Vu+ZuCJuoI1wZuVr0yhGMWsUrKiiULY/hkA4FWeS4pLVWileW1SXKx8ZQrFfFYxpQOF3luOZJkEPD/uCwCsl6nbqQ9/+7t148GddcyRKDuS4kfIl7gUWmn+R999rqTr5vuP3Y7PKsZmE+t8W1IXWtnOd01Jef/+pSSKhdrilWsizRdrMZyufwaAavSH576rA+f+Yt14Md2cgK3yXFLcs79JrU/vtjyotrZHcFahhK5UpSZE+UotKlm/mm9L6tf+5Bt66Tlr/Wmxq9ql3Jd8v0AU2xavGPlifdQvC6Uk0AAAoPw8lxTn27o48ET+NmPFKLUmuBj5Si2cfqjrr+/853W9msu5ql2N8v2y8EbH8zr0wlO2/3K1nEpp4d2LufPAiePaXr/1ungAALzOc0lxIZtdFS600pwvUS1VMavahVYp1660PqrMwKsuX77sdAhF+zyd1vz587nz3T84SFKMiqIlG+x2+fJlLXy2rK82fn3da17+/yhUjqtaslWDQivNTn9WvlXKfFs/F9om+sKvbm26VV2+LalfeOar69732R8+z5uAl9oCL5+e/U1bbovX0tKilpaWvK/ZvSW49PC+lrotOOA0WrLBbi0tLXrp7/yR9n7tK+sOnrlAJbBS/AjFPFC2WZV+IGyzCpU/5GtVl6/9XFtTQC89F8ybcK89/2/arKsA2ftRSv/ofL9AbLYt3uzsrCTlTYwLfYOQ79/wT/c+qZ/81e3cWHZTlbWlLb/44GPL+6Ty1j8DgBs8ai4GKsFVK8WxWEw+n0/79u2ryOdtdvW1GIVWaku9rtPyJaWPf3lb3veubbcTGZnS/3jpxrr7svb+l8uRI0d05MiRTb+/0L/hX3x4zzKWvR9rE+jP/vD5FiMFgNpV7FwM2M11SbEdX9dlH4rLHlL+lT83JS/5ShrylQ4UKjPIV/6A0uVLoPP14CzGciqlpTnrSvPS3G0tp1IlXRcAAC/zZPnE2ofizl37MG87r7/z9d0lfU6pHS2Ksdkd9QqVGeQrfyj0UN9mvfLi0/rTvU9arpnoadeVmf+k//s/flLStTerGjfJ2Pu1r+j1v/f8uvvS1hTI+/61f4d/8Nfv6dN3Lljec6e/Xw0nT7IbHQAAW+TJpHiz9n7tK5bkbXXispn2a/nqUfN1lHhUQlSpVm/leICw0PbXx156Vv/79H/MjSV62vVcw059NP/A1qRcKs8mGYX+Db/6xJfX1Qrn8/iXtxVV/7z27/Bf+93zDQYAAG5BUvwIa2tiVycuW30gqtgHwsrR6q1UpSbq+RLlvV/7yobv20pchfo3r159XdrbpS9/9Ou87yv0sGW+f8N8immrBwAAnENSrNJX/rymUKJeyZ32CpVFbHZTE8vq63/Rpe0f/3Xe9z1qQ4618v39y7EC7zvara9/50Xd6V8plXhmaEiPf/vFkq4LAICXkRSr8OotilPJnfbsLou4PFb6Bh6VWtX3BYKq27bHMlbXtIfNO1BRbN4Bu83MzDgdAjyOpLiMytHnuJBiShoquSW10yr5b1CqQg9m5uvfXL5HNoHNicViisVimpmZqVibTAAoJ5LiMirmq/dSFbNKWUz5Q6kqWVKRz2b/Df7yL/9Se//BD9b9+VdefHpTG3IUq9B9Wbv6/cu//v/WdUb5xQcf68V9j5X0+QBQba5cuSJJOnjwoMORwKtIih+hXCuqlVypLaYlWTm+/i90zXx/fydXsM/Ez+i/y5MUP6rVXSmxVrLUBADc4NSpU5Ioo4BzSIofoVw1opXsKFGOlmSlKvT3r9R9+XRpeV1JQubLjxd1jWJi9VK5CgAAbuWqHe3cZrO7zKE48/cX89bZ5pPv30DSul3mlr9evs4N2QQ6exTzS0m+HQhp6QYAgP1ctVJczqedy7Gat9ld5lCcketzeets//gb67sv5Ps3mPm4MrvpFavQQ4FN2xb1w39/JTfuX9ynbU8G1XDyZG5sWzBYsTgBAKhFrkuKy/W0czVukgFvKfRQ4Mtf+VQ/+ptrKy+Y/722/1ETWzoDAGAjVyXFgB3ybdayR/fyvpd6YNQy0zT12muvKRgM6sKFC06HA49rbm52OgR4HDXFNayY2ls3KbXONt9mLf/8f/mfC753q/XAQCVMT08XTCYSiYQCgYACgYB6e3vXvR6NRvXqq6+WO0RgU8bGxjQ2NuZ0GPAwkuIaNnJ9bt0DZWu/onejcmydXA14MBPFOHPmjHw+n8LhsAzDWPd6MplUNBrVxMSEpqamNDk5qXA4nHs9kUiovb193Z8DAK8iKQYkXbx40ekQeDATRRkcHFQmk1E8Hs/7ejQaVTweV1tbm0KhkEZHR5VMJmWapqanpzU6OqpIJFLhqIHCzp8/r/PnzzsdBjyMmuIyoh7VeZv9N/jpxZ/q5D/+bze90UmlLKdS2jX/n7S6X8ZXlj51LB64g2maMgxDnZ2dubFQKCS/36/x8XG9//77SqfT6urqkmEYSqfTkkRdMRw1PDwsSTq5qrNO1vz9xXUbHAV31jk+R6O2kBSXkdMdLfI9UOa1HrfF/BtU40YnC+9e1CdrVk58/8c16U+/61BEcINsOUUoFLKMh0IhGYZhWV1OJBKampoiIUZVy9eK87U/+Yb+6aFvORQRahFJcQ2r1dpbAI+WXfldKxgMKpVKbfm6d+/e1b171k4ts7OzW74eAFQTkmJUtfn7i2UpaVhdVjE8PCzf0v2Srwm4UTF1xcPDw2XbQAko1hN1pDCwFz9RqGqFShpKrddeXVbxv/2Taxu82zmBE8f12De/qTv9Kxt17D70soMRwQ2CBXY4TKfTqq9fv/PjZvX19Vk6WEgPV4qPHj265WsCm9Gzv0mHXnjKMsZzOrAbSTFcyc567QMHDthynXLYXl+vuqY91jG/36Fo4BbZWmLDMCx1xYZhyF/Cz09jY6MaGxslPdxhlFVj2OlRc3HDrh2OP+OB2kdSDM87d+6cJOnD3/7O0TjoVgK7+P1+hUIhJZNJDQ4OSnqYEJumqWPHjtnyGbFYTLFYTDMzM9q3b58t14S3ZediwCkkxYDy7/730fyDirb8cbpbCWpLNBpVb2+vOjs75ff7FQ6H1d3dXdJK8WqsFAOoNWzeAc8bGBjQj2KJdbv/RUamLA/5AdUkkUjkdrSTJJ/PJ5/Pl3s9EokoHo+ro6NDzc3NuQ087BKLxZTJZHTjxg3brglvGxgY0MDAgNNhwMNclRTHYjH5fD6+qitC9iv57MFX8utdvXpVt27dcjoMoCiRSESZTGbdsdrg4KAWFhaUyWRsTYiBcrh69aquXr3qdBjwMNclxaxMFCf7lXz2cNODCoVKGubvLzoUEYAsFikA1BpXJcXwlpHrcxUrafjyR79WoqfdMpboaVfP/ibbPwuoBSxSAKg1PGgHSPItPVi3+99zDTurYmV9WzCohpMnLecAAMBeJMVAldteX68nX+/f+I0AAGDLSIpRtXr2N6n16d2WEopET7vamgK2fk5fX5+t1wO8gJZsyGf+/qLSD5bWjW+mvSVzMZxGUoyq1bBrR0VKGk5+UZrg9OYdgJuweQfyGbk+p7cmbq4bf6Pj+Q37sJ9cVSYGOIEH7QAAAOB5JMXwvMOHD+vw4cNOhwEAnsZcDKdRPgHPY+MOoHjUFCOfnv1NOvTCU+vGN7NxFHMxnEZSDHwhu/vf6nMA+VFTjHwadu2oilaWwFaQFANfyO7+BwAAvIeaYgAAAHgeSTEAoGixWEw+n4/SCQA1g/IJVLVK1PmePXvW9msCtY6aYtit2Lm4lI1CgHxIilHVKlHne/DgwbJeHwCwsWLn4lI2CgHyoXwCAAAAnkdSDM9rbW1Va2ur02EAgKcxF8NplE8AAADXKWWjECAfkmIAAOA6bBQCu1E+AQAoGi3ZANQaVyXFTMKoZcuplO69PZQ7llMpp0MCCorFYspkMrpx44bToQCALVyXFDMJo1Z9nk5r/vz53PF5Ou10SAAAeAY1xfC8y5cvOx0CAHgeczGcRlIMz2tpaXE6BADwPOZiOM1V5RNAOczOzmp2dtbpMADA05iL4TRWiuF5R44ckSTNzMw4HAkAeBdzMZxGUgy40Pz9RY1cn8ud9+xvol8nAAAlICkGXCj9YElvTdzMnR964SmSYlRULBbT6dOnnQ4DAGxDTTEAoGi0yARQa0iKAQAA4HkkxUCVWDZNy/nS3G12tQMAoEJIiuF5MzMzVfG08ye/fM9yfqe/XwvvXnQoGgCorGqZi+FdJMUAAADwPJJieN6VK1d05coVp8MAAE9jLobTaMkGzzt16pQk5xvG7z70ssyf/jR3/szQkB7/9osORoRadubMGV27dk3pdFqdnZ2Kx+NOhwSPq5a5GN5FUgxUie1+v+W8rmmPttfXOxQNapn5xUOd165dkyQFAgG9+uqramtrczIsAHAU5RMA4GLT09Nqbm7O+1oikVAgEFAgEFBvb29u3O/3a3BwUJJkGIZM01QoFKpIvEC5zd9f1Ie//Z3lmL+/6HRYcAGSYsBl5u8v6qP5B5axj+YfMOl7zJkzZ+Tz+RQOh2UYxrrXk8mkotGoJiYmNDU1pcnJSYXDYct7wuGwmpubNTo6Kv+abyoAtxq5PqcD5/7Ccoxcn3M6LLgASTHgMiPX5xQZmbKMRUamNHJ9TvP3F3Xu2oe5g0S5dg0ODiqTyRSsBY5Go4rH42pra1MoFNLo6KiSyWSudEKS3nnnHU1NTSkajWp6erpSoQNl9enSstMhwKVIiuF5zc3NBb9+dpv0gyW9NXEzd6QfLDkdEhxgmqYMw1BnZ2duLBQKye/3a3x8PDfm9/vV1tamtrY2XbhwwYlQgZxamovhTjxoB88bGxtzOgTAVtlyirV1wqFQSIZhKJlMKhQK5R6sm56eVjQarXicwGp2zcW9329W+DvPWsaCO+tsuTZqG0kx4DI9+5vU+vRuSwlFoqddbU0BVoYhSUqn03nHg8GgUqmUBgcHFY1GFY1GlU6n1d3drUgksuF17969q3v37lnGZmdnbYkZsEvDrh1q2LXD6TDgQiTF8Lzz589Lkk6ePOlwJJvTsGuHnmvYaRl7rmGnGnbtICnGpm2lL/Hw8LBOnz5dhmgA983FqD0kxfC84eFhSUzEqB3BYDDveDqdVn0Jva/7+vrWdbCYnZ3V0aNHt3xNIIu5GE4jKQaAGpOtJTYMw1JXbBhGSa3XGhsb1djYWHJ8AFCN6D4BADXG7/crFAopmUzmxrKbdBw7dsyWz4jFYvL5fNq3b58t1wMAp5EUA0ANyj5INz09LcMwFA6H1d3dbdsmHbFYTJlMRjdu3LDlegDgNMongCqxLRhUw6paum0F6kIB6eEWzqu3bvb5fJKkTCYjSYpEIjJNUx0dHTJNU93d3RodHbXt82OxGA/dAagpjqwUG4ZhmcwBJx04cEAHDhxwOgxtr6/Xk6/3547tJTwQhdoXiUSUyWTWHasNDg5qYWFBmUzG1oRYYqUY9quWuRjeVfGV4q6uLqXT6YJPRwOVdu7cOadDsMX8/UV9NP/AMrbwKS3aALhDrczFcK8trxRPT08X3I4xkUgoEAgoEAisWxG+du2a3nzzza1+LIACRq7PWTb0kKRffPCxQ9Gg1vGgHYBaU3RSfObMGfl8PoXD4dxWoqslk0lFo1FNTExoampKk5OT6/paAtVkYGBAAwMDTocBuArlE7AbczGcVnT5xODgoAYHB5VMJvMmu9FoVPF4XG1tbZKk0dFRNTc3yzRN2556Bux09epVp0MAAM9jLobTbH3QzjRNGYahzs7O3FgoFJLf79f4+LidHwVgjZ79TUr0tFvGXnnxaYeiAQDAXWxNirPlFKt3UMqe5yu1AGCfhl079FzDTstY4Ik6h6JBraOmGECtsbX7RDqdzjseDAaVSqUkSb29vZqcnJRhGOrq6rKUWuRz9+5d3bt3zzI2OztrX9CACwV31umNjuct50AlxWIxxWIxzczMkBgDqAkVb8l24cKFot4/PDxMg3hgjYZdOzTQtdfpMAAAqBm2JsWFeg+n02nVb3Ejgr6+vnUP9M3Ozuro0aNbuh6wVl9fn9MhAIDnMRfDabYmxdlaYsMwLHXFhmFsufNEY2OjGhsbbYkPyOfkqq2VK2U5ldLCuxdz54ETx9nBDq7CNs+wmxNzMbCarQ/a+f1+hUIhJZPJ3JhhGDJNU8eOHbPzowBX+zyd1vz587nj8wL1+EC1ok8xgFpje01xNBpVb2+vOjs75ff7FQ6H1d3dTY9iVK3Dhw9LksbGxhyOBAC8i7kYTis6KU4kEpatm30+nyQpk8lIkiKRiEzTVEdHh0zTVHd3t0ZHR20KF7DfrVu3nA4BADyPuRhOK7p8IhKJKJPJrDtWGxwc1MLCgjKZjK0JMX0xAaA6MB/DTebvL+rD3/7OcszfX3Q6LFQZW2uKy40aNgCoDszHcJOR63M6cO4vLMeFX7EyDStXJcUAAAB2+Gzpc6dDQJWp+OYdQK2q1jZr8/cXNXJ9Lnfes79JDbt2OBgRADjv8bptToeAKkNSDM87e/asLdfJtlnL2v2Dg1WRFKcfLOmtiZu580MvPEVSDKDq2DUX59Ozv0mHXnjKMhbcWVe2z4M7kRTD8w4ePOh0CADgeeWcixt27WAxABtyVU0xTzsDAACgHFyXFPO0M+zW2tqq1tZWp8MAXIVFCtiNuRhOc1VSDODRgjvr9EbH87mDmjmUC4sUAGoNNcVADWnYtUMDXXstY+kHSw5FAwCAe7BSDAAAAM9jpRiosOVUSktzty1jS3O3tS0YrIoWbgCwGfP3F9d9ExXcWUeXB7gWSTFQYQvvXrT0M5akO/39ajh5Uk++3u9QVABQnJHrc5Ye6JL02p98Q//00LcciggojauS4lgsptOnTzsdBmrM5cuXnQ4BAGpCKVsnMxfDaa6qKeZpZ5RDS0uLWlpanA4DADyNuRhOc9VKMVAOs7OzklSxyThw4rge++Y3dad/pVTimaEhPf7tFyvy+YAd+OYOPfub9N2Wev3i332cG/tH+5/b8vUqPRcDa5EUw/OOHDkiSZqZmanI522vr1dd0x7LWF3THh6yg6vEYjHFYjHNzMywgYdHZbdO/uNv2DN3VXouBtZyVfkEAAAAUA4kxQAAAPA8kmLAJsumaTlfmrut5VTKoWgemr+/qI/mH1jGPpp/oPn7iw5FBABAdSIpBmzyyS/fs5zf6e/XwrsXHYrmoZHrc4qMTFnGIiNTGrk+51BEAABUJ1c9aMfTziin5VTKksQGThy35eG3fNcFAADVxXVJMU87w27ZJ50Xb9607DS3+wcHbUmKP0+n110XcFo0GtX4+LhM01Rvb68GBwedDgkeR9cJOM1VSTFQzXYfelnmT3+aO8/2Hv48nXYspp79TWp9erelhCLR0662poBjMcF5yWRSpmlqaurhz0Vzc7Pa2trU2dnpcGQA4BxqiuF5V65c0ZUrV0q+zna/33JeDb2HG3bt0HMNOy1jzzXsVMOuHQ5FBLtNT0+rubk572uJREKBQECBQOXxCqMAABeZSURBVEC9vb258c7OTsXjccv59PR02WMFHsWuuRjYKpJieN6pU6d06tQpp8MAinLmzBn5fD6Fw2EZhrHu9WQyqWg0qomJCU1NTWlyclLhcFiS5Pf75V/1S9z4+DirxHAcczGcRlIMAC40ODioTCZjWfFdLRqNKh6Pq62tTaFQSKOjo7myibXv6+7uVltbWyXCBoCqRVIMADXGNE0ZhmFZ/Q2FQvL7/RofH8+NRaNRNTc3F0ysAcBLeNAOAGpMtpwiFApZxkOhUO613t5ehcNhyiYA4AskxQBQY9IFOp4Eg0GlUiklk0klEgnLqvFm2rLdvXtX9+7ds4zNzs6WHjAAVAGSYnheoSf3gVrV3d2tTCZT9J8bHh5mAyWUDXMxnOaqpJgd7VAOY2Njkh5u3gHUgmAwmHc8nU6rvoQ2gX19fbkOFlmzs7M6evTolq8Jb/j97KwW/vzPc+dfffllfSkQ0N8uLOg/v/eeJOlCe7sCP/yhUyEC7kuK2dEOAB4tW0tsGIalrtgwDEsrtmI1NjaqsbGx5PjgPQs/+XPL5kbmxZ/q8Zde0mfvv299Y0Z6KvbPKhwd8BDdJ+B558+f1/lV2zADbuf3+xUKhZRMJnNjhmHINE0dO3bMls+IxWLy+XwsUMBWN27ccDoEeJirVoqBchgeHpYk/eMDBzb9Z5ZTKS28ezF3Hjhx3Pa4gFJEo1H19vaqs7NTfr9f4XBY3d3dJa0Ur8Y3dyiHGzduqKtCnzV/f1G37t3XL/7dx7mxV/7u02p+che7fnoUSTGwBZ+n05pftbq8+wcHHYwGXpRIJCxbN/t8PknKPUAXiURkmqY6Ojpkmqa6u7s1Ojpq2+fzjAeKEfjRDyXfynm2pvgPH83pTn9/bvxf+6SBCsU0cn1Ob01YnyX5yf91W290PK+Brr0VigLVhKQYAFwoEokoEok88j2Dg4MbtlnbKlaKUYzHWlr01D9bXyu8PRBQw8mTkqTh4fP62Odb955y+uri7/T3jV/nzv9l6LsV/XxUF5JiAADgiO319Xry9YcrxT//5/9rRT+77nem/ig1px/9zbXc2OxXv66634Ue8adQy0iKAQdsCwZzqyPZc8BNKJ+A2/39//Br/b1/82PLWOzf/FhP/N0dkv5LR2KCs0iK4XkHinjAzi6rV0cAN6J8AnZ71Fy8nEppyTByPY0lKfDDH+qxlpYtf94Tddv1aYFxeBP/8vC8c+fOaTmV0mf/9gPL+NLcbW0LBrW9hM0OllMpLc3dto6ZpniuGQCszp07Jyl/d5+Fdy9aHm6WRE9j2I4+xYCkhXcvWp6AlqQ7/f2Widmu637yy/cKvBtwD/oUoxyyCxTz58/njs/+7Qf628/yremWJnDiuJ4ZGrKMPTM0RItND3PVSjE1bCiHgYEBtd+8qXanAwFchPIJ2C03F8/esozf6e/X4y+9ZPvnba+v1+PfftHyfMfj336xpG8H4W6uWimOxWLKZDLseANbXb16Vbdu3dr4jQCAsnnUXPz4vn3rVnV3H3q55M/MPt+RPUiIvc1VK8VAufwrn0+n3n7bUurwzNCQHv/2iyVdN3DiuB775jct17VjIgcAL/nSE0+sW9XdEaJ1GuxFUgxI+sTnU13THstYXdOeklcNttfXr7vudpu22QWcRDkbyuFRCxR07UG5kRQDAIpGTTHK4ROfr6g633ydKiiBwFaRFAMAgKqx2RXh1Z0qsh775jd5WA5bRlIMz+vr63M6BADwvGLn4ny9i+/096vh5EnKLLAlJMXwvJNffE23ePNmSdep1q2bgzvr9EbH85ZzAKg2J1fNn4ATSIoBm1TrQyANu3ZooGuv02GgxvCgHYBaQ1KMmlHMAxer33vx4kVd939VP37rrYrEWQ3m7y9q5Ppc7rxnf5MadrH5NDaPB+1gt8OHD0uSxsbGNvX+fC0v7WilCe8iKUbN+DydttSX7f7BwYJJ8er3dkn6pblQiRCrRvrBkt6aWCkXOfTCUyTFABxV7CZK+VpeZs/vvb2y0QcdKbBZJMUAAMCV8j3LsWgYdKTAlpAUAwAAV8r3LMfqVWKJjhTYvC85HQAAAADgNJJioEjLqZSW5m5bxpbmbms5lXIoIgAAUCqSYkBSdHBw0+9dePei5Wln6eHXc6s7XwC1LhaLyefz0XkCtjl79qzOnj1b8nV2H3rZcv7M0JACJ46XfF3UPlclxUzCKJfvfe97TocAuEosFlMmk9GNGzecDgU14uDBgzp48GDJ19nu91vO65r2aHt9vZZTKd17eyh38O0e1nLVg3b0xQQAAI9SaHfRYtp2wptclRQD5XL4yBGNXb68qffSMB4A7Nfa2ipJmpmZKek6+TpS5HsWZNk0RXd2rOaq8gmgGhRqGM+KAwBUp3zPgnzyy/ccigbViqQYAAAAnkdSDAAAAM8jKQYAADUtcOK4nhmy7nS3tnUbQFIMACgaLTLhJvmeBVnbug0gKQYkDb39ttMhAK5Cn2LY7fLly7q8yS5AQDnQkg2QtGfPno3fBAAom5aWlrJev1D/YiCLpBiQdPv2bRJjAHDQ7OyspPIlx/n6FwOrUT4BSOp//XWnQwAATzty5IiOHDnidBjwMJJiAAAAeB5JMQAAADyPpBgAPMowDPX29jodBgBUBR60AwAP6urqUjqdVpAn8AFAEivFAOBq09PTam5uzvtaIpFQIBBQIBBYtyJ87do1vfnmm5UIETVg/v6izl37MHfM3190OiTAdiTFgKQxGsbDZc6cOSOfz6dwOCzDMNa9nkwmFY1GNTExoampKU1OTiocDjsQKWpB+sGS3pq4mTvSD5Zs/4yZmRnNzMzYfl1gs0iKAcCFBgcHlclkFI/H874ejUYVj8fV1tamUCik0dFRJZNJmaZZ4UgBwB1IilETllMpLc3dtowtzd3Wciq1qff++urVssZXbRY+ta7yfDT/gK9Da4hpmjIMQ52dnbmxUCgkv9+v8fFxByMDCrty5YquXLnidBjwMJJi1ISFdy/qTr91p6I7/f1aePfipt77wdtDZY2v2vzig48t55GRKY1cn3MoGtgtW04RCoUs46FQKG+pBbCRSvwiferUKZ06dcrWawLFcFX3iVgsptOnTzsdhpZTKUuyFThxXNvr6x2MqLIxlfpZlYz1bz/9VPdWJbyBE8cLvndbMKiGkyct53bEmu+6QDml0+m848FgUKkvvj3p7e3V5OSkDMNQV1dXrtTiUe7evat79+5ZxrJb86K25ftF+o2O5zXQtdehiAD7uS4pjsVimpmZ0b59+xyL4/N0WvPnz+fOd//goONJcSVjKvWzKhnr3372mdL/4l9YPquQ7fX1evJ16wry4s2bJcea77qA0y5cuFD0nxkeHq6KhQkAKAfKJ1ATAieO65khawnEM0ND2n3o5U2991/7yhpe1Xnlxact54medvXsb3IoGtitUO/hdDqt+hJ+Ae3r69ONGzcsx6VLl7Z8PQCoJq5aKQYK2V5fr7qmPZaxteePeu99n7ey4sATdZbz5xp2qmHXDoeigd2ytcSGYVjqig3DkN/v3/J1Gxsb1djYWHJ8cJ9XXnxaP/mrlQeUEz3tamsKOBgRYD9WigFJe5591ukQANv4/X6FQiElk8ncmGEYMk1Tx44ds+UzYrGYfD6fo6VsqJxK/CLd3NxccCMaoBJIigFJQ0Pe6j6B2heNRhWNRjU9PS3DMBQOh9Xd3V3SSvFqsVhMmUxGN27csOV6wNjYmMbGxpwOAx5GUgwALpRIJHI72kmSz+eTb1UZUCQSUTweV0dHh5qbm3MbeNiFlWIAtYakGJB08eL6fsZANYtEIspkMuuO1QYHB7WwsKBMJmNrQiyxUgz7nT9/XudXdfsBKo2kGJB08ac/dToEAPC04eFhDQ8POx0GPIykGABQNMonANQakmIAQNEon/CW4M46vdHxfO4I7qzb+A8BLkOfYgAA8EgNu3awpTNqHivFAICiUT4BoNaQFAOSvvfd7zodAuAqlE/AbgcOHNCBAwecDgMeRvkEoIcbHQAAnHPu3DmnQ4DHsVIMAAAAzyMpBiTF43GnQwBchZpi2G1gYEADAwNOhwEPIykGJP3lr3/tdAiAq1BTDLtdvXpVV69edToMeBg1xQAAAF+Yv7+oketzufOe/U1q2LXDwYhQKSTFAAAAX0g/WNJbEzdz54deeIqk2CMonwAAAIDnkRQDAIrGg3YAag1JMSDp+D/8h06HALgKD9rBbn19ferr63M6DHgYNcWApOPHjzsdAgB42smTJ50OAR5HUgxswbZgUA2rJvBtwaCD0QAAgFKRFAOS+vv79c6VK5t+//b6ej35en8ZIwIAZzjVkuzw4cOSpLGxsbJ/1qMsfLpkOf9o/oGCO+voQOEBJMWApNu/+Y3TIQBAVXCqJdmtW7fK/hmb8YsPPracR0am9EbH8xro2utQRKgUHrQDABSN7hMAak3Fk+JkMqn29na1t7frzJkzlf54AIAN6D4BoNZUtHzCNE1Fo9HcVyTt7e3q7OxUW1tbJcMAAADI65UXn9ZP/up27jzR0662poCDEaFStrxSPD09rebm5ryvJRIJBQIBBQIB9fb25sbHx8ctCfCrr76qn/3sZ1sNAQAAwFaBJ+os58817OQhO48oOik+c+aMfD6fwuGwDMNY93oymVQ0GtXExISmpqY0OTmpcDgsSTIMQ6FQKPdev9+f9xpApUUHB50OAQA87ezZszp79qzTYcDDik6KBwcHlclkFI/H874ejUYVj8fV1tamUCik0dFRJZNJmaYpSbn/laQgvV1RJb73ve85HQIAeNrBgwd18OBBp8OAh9n6oJ1pmjIMQ52dnbmxUCgkv9+v8fFx+f1+pdPp3GtrV44BAAAAJ9iaFGdLIdYmuqFQSIZh6NixYxofH8+tFv/sZz/Tq6++amcIZbecSmlp7rZ1bNXqt1PWxrA0d1vLqVRVflY1xnr4yJGS/jwA1IL5+4v6aP6BZeyj+Qeav79Y9s9ubW1Va2tr2T8HKMTWpHj1KvBqwWBQqVRKfr9fo6Oj6ujoUHt7u1599dUNO0/cvXtXMzMzlmN2dtbOsIuy8O5F3em37mT2yS/fcyiawjHc6e/XwrsXq/KziBUAqtPI9TlFRqYsY5GRKcsOd0CtqviOdp2dnZqamtr4jV8YHh7W6dOnyxgRAKBYsViMuRlATbF1pbjQg3PpdFr19fVbumZfX59u3LhhOS5dulRKmACAErF5B4BaY2tSnK0lXttmzTAM+f3+LV2zsbExV2eUPVpaWkqOdasCJ47rmaEhy9juQy87FE3hGJ4ZGlLgxPGq/CxiBYDq1LO/SYmedstYoqddPfubHIoIqBxbk2K/369QKKRkMpkbMwxDpmnq2LFjdn6UY7bX16uuaY91bIsJv53WxlDXtEfbt7g6X+7PIlYAqE4Nu3bouYadljE2r4BX2F5THI1G1dvbq87OTvn9foXDYXV3d295pRiohKG333Y6BADwtMuXLzsdAjyu6KQ4kUhYtm72+XySpEwmI0mKRCIyTVMdHR0yTVPd3d0aHR21KVygPPbs2bPxmwAAZeNkaSQgbaF8IhKJKJPJrDtWGxwc1MLCgjKZjK0JcSwWk8/n0759+2y7JiBJt2/f3vhNAICymZ2ddbTlKmBrTXG58bQzyqX/9dedDgEAPO3IkSM6UmAjJaASXJUUAwAAAOVAUgwAAADPq/iOdgAAANUquLNOb3Q8bzmHN5AUAwAAfKFh1w4NdO11Ogw4wFVJcSwW0+nTp3PnTj2lujQ3p98sLubOf3/zpuqWlhyJJauSMZX6WeWKNd91JeX9rLXvvf8ln2ZmZioWq9M+mn+gpXtzufOb/++/1x/mdz7iT2CzsvPS4qqfm1qW/XvSNaB2ODU//P73v5ekvHMxUKwtzcUZF/rxj3+ckcTBwcFRtcelS5ecniorgvmYg4Ojmo9i5mJXrRRn7d378GuNn//85/rWt77lcDTOm52d1dGjR3Xp0iXPNz/nXqzgXqyo5L1YXFzUb37zG33/+98v6+dUC+bjFfw3t4J7sYJ7YVWp+7GVudiVSfHu3bslSd/61rfU2trqcDTVo6WlhfvxBe7FCu7Fikrdi7a2trJ/RrVgPl6P/+ZWcC9WcC+sKnE/ip2LackGAAAAzyMpBgAAgOeRFAMAAMDztsVisZjTQWzFzp079Wd/9mfauZM2UhL3YzXuxQruxQruRflwb1dwL1ZwL1ZwL6yq9X74MplMxukgAAAAACdRPgEAAADPq9mk2DAM9fb2bnrcK3p7e9XV1aVwOCzTNJ0Ox1Fe/1mAlEwm1dXVpfb2diUSCafDqUnMxfkxF6/w+s8CqmcudmWf4o2Ew2EZhqFgMLipca/ITsAXLlxwOhTHdXV1KZ1Oe/ZnwTRNvfbaawoGg579eTBNU9FoVLdu3ZIkNTc3q7OzU6FQyOHIagdzcX7MxSuYi5mLq2kudmSleHp6Wu3t7XlfSyQSam5uViAQ2PJvjqOjo4rH45serxbT09Nqbm7O+1oikVAgENjyfZmentbk5KQikUipYVZEOe+FJF27dk1vvvlmKSE6rpR7FI1G9eqrr5Y7xIrZypzy85//XJ2dnbnzzs5OJZPJssdaTZiL82MuXsFcvDHm4hVun4srmhSfOXNGPp9P4XBY09PT615PJpOKRqMaHR3V1NSUJicnFQ6HKxmiI1bfF8Mw1r2evS8TExNbvi+Tk5MKhULq7e1Ve3u7urq67ArfVpW4F25X6j1KJBIFJy23sXNO8fv9uZWKWsdcnB9z8Qrm4o0xF6+ombk444DR0dFMvo9ua2vLXLhwIXd+69atjKTMwsJC0Z9x7dq1TGdn56bHq0Gh+xIKhUq+LxcuXMj4/f7ceXd3dyYej5cWcBmV816s/oxq/VnYjK3co6mpqdzfeXR0NBOJRCoWbzltZU65detWxu/35352QqFQZnBwsGIxVwPm4vyYi1cwF2+MuXiF2+fiqqkpNk1T09PTliX0UCgkv9+v8fFxdXd3K5lM6v333y94jWr+Om6rTNOUYRgb3pdr167l/fN+v1/xeFyhUMhyjZdeesl1q2J23YtattE9ev/995VOp9XV1SXDMJROpyWpJmvZNjOnxONxdXR06Dvf+Y7a2toKfgXqJczF+TEXr2Au3hhz8Qo3zcVVkxRnv3pYW1gdCoVyr3V3d6u7u7visTnJrvvS2dlpqeF5//33q/Zru0L4GdnYRvdo9f8RJRIJTU1N1eQkLG3u5yUSiSgSicg0TXV0dLimzrOc+O8sP+biFfyMbIy5eIWb5uKqSYqzvyWtFQwGlUqlirpWb2+vJicnZRiGwuGw3nzzTbW1tRUcr2Z23pcLFy6ovb1dwWBQbW1trksAyvUz0tXVpXg8XvU/C5th5z1yu83ci2wy4vf7NTo6WrHYqhlzcX7MxSuYizfGXLzCTXNx1STFdir021at/ha2WZ2dnZqamnI6jKrg9Z8FSa77P+JyKPT1LuzBXJwfc/EKr/8sSMzFUvXMxVWzeUe2R+HaJzjT6bTq6+udCKkqFOrd6MX7wr3YGPdoBXPK1nDf8uO/rRXci41xj1a4aU6pmqQ4W2uydmcfwzDk9/udCKkqZO/L2h8mL94X7sXGuEcrmFO2hvuWH/9treBebIx7tMJNc0rVJMV+v1+hUEjj4+O5McMwZJqmjh075mBkzsrel9WNrL16X7gXG+MerWBO2RruW378t7WCe7Ex7tEKN80pVVVTHI1G1dvbq1AopLa2NoXDYXV3d1fdbxKVlr0vnZ2d8vv9nr4v3IuNcY9WMKdsDfctP/7bWsG92Bj3aIVr5pRKNkW+cOFCRtK6Y+17QqFQRlKmu7u7kuE5ZjP3JR6PZ/x+f83fF+7FxrhHK5hTtob7lh//ba3gXmyMe7SiVuYUXyaTydiTXgMAAADuVDU1xQAAAIBTSIoBAADgeSTFAAAA8DySYgAAAHgeSTEAAAA8j6QYAAAAnkdSDAAAAM8jKQYAAIDnkRQDAADA80iKAQAA4HkkxQAAAPA8kmIAAAB4HkkxAAAAPI+kGAAAAJ73/wPzFbKsLwxgOAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(1, 2, figsize=(7,3))\n", "\n", "for bg_or_sig in (0, 1):\n", " space_eval_uncut = cy.inspect.get_space_eval(L_uncut, -1, bg_or_sig)\n", " energy_eval_uncut = cy.inspect.get_energy_eval(L_uncut, -1, bg_or_sig)\n", " SB_space_uncut = space_eval_uncut()[0]\n", " SB_energy_uncut = energy_eval_uncut(gamma=2)[0]\n", " kw = dict(bins=50, range=(1e-10, 1e10), log=True)\n", " hl.plot1d(axs[0], hl.hist(SB_space_uncut, **kw), crosses=True)\n", " hl.plot1d(axs[1], hl.hist(SB_energy_uncut, **kw), crosses=True)\n", "for ax in axs:\n", " ax.loglog()\n", " ax.axvline(1, color='k', ls='--', lw=1, zorder=-10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you have skylab up and running simultaneously, and you know how to extract its PDF ratios, then you can make useful scatterplots comparing arrays like `SB_space_uncut` and `SB_energy_uncut` with the skylab equivalents. We aren't doing that in this tutorial, so here's a sillier plot comparing the space and energy PDF ratios:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1e-05, 100000.0)" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "\n", "for bg_or_sig in (0, 1):\n", " space_eval_uncut = cy.inspect.get_space_eval(L_uncut, -1, bg_or_sig)\n", " energy_eval_uncut = cy.inspect.get_energy_eval(L_uncut, -1, bg_or_sig)\n", " SB_space_uncut = space_eval_uncut()[0]\n", " SB_energy_uncut = energy_eval_uncut(gamma=2)[0]\n", " ax.loglog(SB_space_uncut, SB_energy_uncut, '.', alpha=.25)\n", "ax.set_xlim(1e-5, 1e5)\n", "ax.set_ylim(1e-5, 1e5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Likelihood confirmation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It turns out that it's actually pretty easy to confirm the underlying likelihood implementation by writing it from scratch. Let's get the fit for 2012-2014 only:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2933.922943418569, {'gamma': 1.999080216432319, 'ns': 445.0750138559467})" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L_uncut[-1].fit(**tr_uncut.fitter_args)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Oh, right, we injected lots of signal into this trial.) Ok, now let's get the space and energy PDFs (for the best-fit spectrum) as well as the overall $S/B$:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "# concatenate background and signal S/B values\n", "SB_space = np.concatenate([cy.inspect.get_space_eval(L_uncut, -1, i)()[0] for i in (0, 1)])\n", "SB_energy = np.concatenate([cy.inspect.get_energy_eval(L_uncut, -1, i)(gamma=1.999)[0] for i in (0, 1)])\n", "SB = SB_space * SB_energy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can write down the test statistic as a function of ns:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "# np.vectorize in case we wanted to call for an array of ns\n", "@np.vectorize\n", "def ts(ns):\n", " return 2 * np.sum(np.log1p(ns * (SB - 1) / SB.size))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And evaluate it at the best fit ns ~ 445:" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(2933.92292731)" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ts(445)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Closing remarks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course, this is nowhere near covering everything about the csky internals, but it's a good start. More details can and should be added to this tutorial over time.\n", "\n", "Interactive usage is, in general, strongly encouraged in csky. To that end, a *very* good project for beginner to intermediate users would be to add `__repr__` implementations to make some of the outputs friendlier. Consider:" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SubAnalysis(key=IC86_2011)" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ana[3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "vs:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L[3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In any case, hopefully the above sheds some light on the csky internals and helps with finding per-event information for detailed crosschecks as more and more types of analysis are ported between likelihood frameworks." ] } ], "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.5" } }, "nbformat": 4, "nbformat_minor": 4 }